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>

Comments