본문 바로가기

한권떼기/자바의 정석

[한권떼기] 자바의정석 챕터12. 제네릭스, 열거형, 어노테이션

728x90
반응형

**자바의 정석(남궁성 저)를 읽고 정리한 글입니다.

 

 

제네릭스

제네릭스는 다양한 타입의 객체들을 다루는 메소드나 클래스에 컴파일 시 타입 체크를 해주는 기능

장점

의도하지 않는 타입이 저장되고, 꺼내지는 것을 방지하여 항변환 오류가 줄어듦 -> 타입 안정성 제공

타입체크와 형변환을 생략할 수 있어 코드가 간결해짐

 

제네릭 타입

제네릭 타입은 <T>, <K>, <V> 등으로 사용되며 클래스와 메소드에 선언할 수 있음

<T>, <K> ... 등 모두 기호의 종류만 다른 것이며, T, K 각각은  임의의 참조형 타입을 의미함

제네릭의 용어

class Hello<T> {} 를 예시로 들면

Hello<T>는 제네릭 클래스, T는 타입 변수, Hello는 원시 타입임

Box<String> b = new Box<String>에서

<T>가 <String>이 되면서 String이 대입된 타입이 되었음

 

와일드카드

단순히 <T> 처럼만 나타내지 않고 와일드카드를 이용해서 상한과 하한을 제한할 수 있음

<? extends T> T와 그 자손들만 가능

<? super T> T와 그 조상들만 가능

<?> 모든 타입이 가능. <? extends Object> 와 동일

 

제네릭 타입의 제거

컴파일된 파일에는 제네릭 타입 정보가 없는데, 이는 소스코드를 체크하여 필요한 곳에 형변환을 넣어주기 때문

원시 타입을 사용한 이전 소스코드와의 호환성을 위한 것

1. 제네릭 타입의 경계 제거 (ex. 제네릭 타입이 <T extends Fruit>면 <Fruit>로 치환

2. 제네릭 타입 제거 후 타입이 일치하지 않으면 명시적으로 형변환시킴

 

 

열거형

서로 관련된 상수를 편리하게 선언하기 위해 사용

 

 

어노테이션

마치 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서 프로그램에게 유용한 정보를 제공하기 위한 기능

(ex. @Override 자체는 동작 상의 기능보다는 컴파일 시에 오버라이드 한 메소드가 있는지 체크할 수 있도록 정보를 제공하는 역할)

 

 

728x90
반응형