[JAVA] 자바 정리노트(5)
-지네릭, enum-
1. 지네릭에서 static멤버에 대해서 타입 변수를 사용할 수 없다. 타입 변수는 인스턴스 변수로 간주되기 때문이다.
2. 지네릭 배열 타입의 참조변수를 선언하는 것은 가능하지만 지네릭 타입의 배열을 생성하는 것은 허용하지 않는다. 굳이 배열을 생성한다면 동적으로 객체를 생성하는 메소드를 이용하거나, Object 배열을 복사하여 형변환 하는 방법등이 사용된다.
3. 참조변수와 생성자에 대입된 타입이 일치해야 한다. 상속관계이어도 허용하지 않는다.
또한 대입된 타입이 같기 때문에 아래와 같이 대입타입을 생략할 수 있다.
Room<Conference> conferenceRoom = new Room<Rest>(); // error
Room<Conference> conferenceRoom = new Room<Conference>(); // ok!
Room<Conference> conferenceRoom = new Room<>(); // 타입 생략가능
4. 대입된 타입이 같으면서, 지네릭 클래스의 타입이 상속관계의 경우 다형성으로 가능하다.(RestRoom은 Room과 상속관계라고 가정한다)
Room<Conference> conferenceRoom = new RestRoom<Conference>();
5. 지네릭 클래스의 타입제한에서 인터페이스를 구현해야 하는 제약이 필요할 경우에는 implements를 사용하지 않고 extends를 사용한다. 추가적으로 여러 제한을 둘 경우 '&'을 사용하면 된다. 아래 예시의 경우 Unit의 자손들만 담을 수 있다.
interface Repairable { ... }
class RepairUnit<T extends Repairable & Unit> { ... }
6. 지네릭 타입이 다른 것만으로는 오버로딩이 성립하지 않기 떄문에 메소드 구현시 '와일드 카드'를 이용하면 된다. 와일드카드에는 '&'을 사용할 수 없다.
<? extends T> // T와 T의 자손들만 가능(와일드카드 upper bound)
<? super T> // T와 T의 조상들만 가능(와일드카드 lower bound)
<?> // 제한 없음
7. 열거형 상수간의 비교에는 '=='를 사용할 수 있다. 이는 빠른 성능을 제공하는 의미이다.
8. 열거형 상수의 값이 불연속적일 경우, 상수 이름 옆에 원하는 값을 괄호'( )'와 함께 적어준다.
9. 열거형의 생성자는 외부에서 호출이 불가하다. 이유인즉 열거형 생성자의 제어자가 private이기 때문이다.
'▶개발 > JAVA' 카테고리의 다른 글
[JAVA] 자바 정리노트(7) (0) | 2019.01.27 |
---|---|
[JAVA] 자바 정리노트(6) (0) | 2019.01.27 |
[JAVA] 자바 정리노트(4) (0) | 2019.01.26 |
[JAVA]날짜와 시간 클래스, Date의 Calendar간의 변환 (0) | 2019.01.25 |
[JAVA] 자바 정리노트(3) (0) | 2018.12.19 |