Monday
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, S 본문
언어/Java 기타
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, S
뉴비2 2021. 7. 10. 21:53// java.lang.enum public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { ... 생략 }
저도 정확한 용어는 모르지만, 위와 같은 구조를 재귀적 타입 바운드(recursive type bound)라고 하는 것 같습니다.
위 구조를 아래와 같이 분리해서 생각하면 좀 이해하기 쉬운 것 같습니다.
1. E extends Enum<E>
2. Enum<E> implements Comparable<E>, serializable
3. 따라서 E는 Comparable하고 Serializable하다
즉, Enum은 Comparable하고 Serializable한 타입만을 받으려고 위와 같은 구조를 만든 것 같습니다.
재귀적 타입 바운드 사용 시기
1. 제네릭한 클래스가 있다
ex. MyClass<T>
2. 제네릭 T타입을 여러가지 속성을 사용하는 타입으로 제한하고 싶다.
ex. T extends Serializable, Comparable<T>(그러나 자바는 다중 상속 안됨)
3. 자바는 제네릭 타입에 대해서 implements할 수 없고 다중 상속을 할 수도 없다.
ex T implements Serializable(제네릭이라 안됨)
4. 따라서 재귀 상속을 이용해서 타입을 제한한다.
ex. MyClass<T extends MyClass<T>> implements Serializable, Comparable<T>
'언어 > Java 기타' 카테고리의 다른 글
M1 Mac에서 Java 개발환경 세팅하기(vscode, jabba) (0) | 2022.02.27 |
---|---|
Java transient란? (0) | 2021.07.10 |
자바 Exception 종류 (0) | 2021.06.12 |
자바 JDBC 드라이버 연결 원리(Class.forName()) (0) | 2021.04.06 |
Java 생성자 분석 (바이트 코드) (0) | 2021.03.23 |
Comments