제네릭(Generic)
제네릭 타입을 이용해서 컴파일 과정에서 타입 체크를 할 수 있다.
제네릭은 클래스와 인터페이스, 메소드를 정의할 때 타입 파라미터로 사용한다.
* 제네릭을 사용하는 이유(=장점)
1. 컴파일할 때 타입을 체크해서 에러를 사전에 잡을 수 있다.
2. 컴파일러가 타입캐스팅을 해주기 때문에 개발자가 편리하다.
3. 타입만 다르고 코드의 내용이 대부분 일치할 때, 코드의 재사용성이 좋아진다.
1 2 3 | public class className<T>{...} public interface interfaceName<T>{...} |
* 클래스, 인터페이스에서 제네릭 타입파라미터 사용법
- 실제 사용할 시에는 타입 파라미터에 구체적인 타입을 지정해야 함.
1 | ArrayList<String> list = new ArrayList<String>(); |
ArrayList에 String 값만 저장할 수 있도록 구체적인 타입을 지정했음.
* 멀티 타입 파라미터
1 | HashMap<String,Object> map = new HashMap<String,Object>(); |
제네릭 타입을 2개 이상 만들 수 있음.
해시맵도 <K,V>로 제네릭 타입을 사용하고 있음.
* 제네릭 메소드
매개변수 타입과 리턴 타입으로 타입파라미터를 갖는 메소드.
제네릭 클래스가 아니여도 메소드만 제네릭 메소드일 수 있음.
1 | public <T> Product<T> boxing(T t){...} |
* 제한된 타입 파라미터
<T extends 타입>
타입 파라미터에 지정되는 구체적인 타입을 제한할 필요가 있을 때가 있다.
ex) 숫자 연산 제네릭 메소드는 Byte, Short, Integer, Long, Double 인스턴스만 가져야 한다. 이럴 때 Number타입으로 제한한다. <T extends Number>
Number타입 또는 Number타입의 하위 클래스 타입만 올 수 있음.
<T super 타입> 으로 상위클래스도 표현가능하지만 <T implements 타입>같은 표현은 없음.
만약 인터페이스로 제한하고 싶다할지라도 "extends" 를 사용해야 함.
'신입 개발자 면접 기초' 카테고리의 다른 글
Java 성능 좋은 분기문을 쓰는 방법, if문에서 연산 순서 (if문에서 좋은 퍼포먼스를 만들기, && || 연산자 우선 순위) (7) | 2018.03.12 |
---|---|
DB 인덱스의 구조는 어떻게 되어있나요? 인덱스는 언제 적용해야하나요? (6) | 2017.12.28 |
OAuth2.0 구조와 동작 프로세스(feat. 생활코딩) (0) | 2017.11.25 |
디자인 패턴 한 방에 정리하기(feat. 혹시 디자인 패턴 아시는 것 있으세요?) (2) | 2017.11.21 |
스택, 큐, 덱(Stack, queue, deque)의 특징에 대해 설명해보세요! (0) | 2017.11.18 |