인터페이스
범용정렬
- Object 클래스를 이용하여 정렬
- Interface를 통해 비교기능있는 객체만 받을수있게함
public static void sort(Object[] array) {
//특정한 행위를 할 수 있는 객체만 받을 수 있어야 함
//비교할 때 사용할 함수가 필요함
}
public static void sort(Runnable[] array) {
//compareTo 메소드를 정의한 Runnable만 받음
}
- Template 활용가능
public static <T> T max(T a, T b) {
return a.compareTo(b) >= 0? a: b;
}
//T가 Comparable을 구체화한 타입임을 보장해줌
public static <T extends Comparable<? super T>> T max(T a, T b) {
return a.compareTo(b) >= 0? a: b;
}
//정렬
public static <T extends Comparable<? super T>> void sort(T[] array) {
}
Comparable interface
- 객체 비교를 위한 interface
public interface Comparable<T> {
int compareTo(T other);
}
"asd".compareTo("bcd") // 양수
//같으면 0
//앞이 크면 양수
//뒤가 크면 음수
- Comparable 구현
class Student implements Comparable<Student> {
public int compareTo(BankAccount other) {//grade로 비교
return grade – other.grade;
}
}
Marker Interface
- 빈 인터페이스
- 용도를 나타내기 위해서 사용
Cloneable Interface
- clone 을 구현하기 위해서 사용
- Object에서는 clone이 정의되있지만 따로 재정의하고싶으면 사용
기본 메소드 default
- interface에 선언, 정의 둘다하는 메소드(default)
- 같은 기본메소드를 가진 인터페이스 여러개 상속받으면 오류
public interface A {
default void foo() {
//
}
}
public interface B {
default void foo() {
//
}
}
public class C implements A, B {
// 컴파일 에러: foo() 메서드 충돌
}
public class D implements A, B {
@Override
public void foo() {
// 직접 구현
//A.super.foo(); // 필요시 A 인터페이스의 구현 호출
}
}
public interface A {
default void foo() {}
}
public interface B extends A {
default void foo() {} // 문제없음
}
public class X {
void foo() {
//
}
}
public class Y extends X implements A, B {
} // 문제없음 A,B에 기본메소드있어도 X 클래스 foo가 이김
인터페이스 static, private
- static 메소드 정의하면 상속되지않음
- private 메소드도 사용가능(상속은 되지않음)
'Language > JAVA' 카테고리의 다른 글
[Java] 내부 클래스, 중첩클래스 (0) | 2024.12.03 |
---|---|
[Java] 열거형 (0) | 2024.12.03 |
[Java] 문자열 (0) | 2024.12.03 |