[Java] 자바 #27, 제네릭(Generic)
- 프로그래밍 언어/Java
- 2019. 2. 24. 13:37
제네릭(Generic)
- Java5부터 제네릭타입이 새로 추가.
- 제네릭을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다.
- 컬렉션(***), 람다식, 스트림, NIO에서 널리 사용되므로 확실히 이해해두어야 한다.
- API 도큐먼트에보면 제네릭 표현이 많기 때문에 제네릭을 이해하지 못하면 API 도큐먼트를 정확히 이해할 수 없다.
- 메소드를 정의할 때 타입을 파라미터로 사용할 수 있도록 한다.
ex) 제네릭 클래스
class Wrapper<T>{
private T data;
public Wrapper(T data) {
this.setData(data);
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
@Override
public String toString() {
return this.data+"";
}
}
Wrapper<Integer> n3 = new Wrapper<Integer>(300);
Wrapper<Boolean> b3 = new Wrapper<Boolean>(true);
Wrapper<String> s3 = new Wrapper<String>("문자열");
< > 이안에 참조타입이 와야한다. 즉 클래스타입. 기본원시타입(int.boolean, double 등 )은 안된다.
제네릭을 선언했을 때의 뜻!!
- 멤버들중에 어떤 멤버의 자료형을 컴파일 할때 정하겠다.
- 어떤 멤버의 자료형은 내가 직접 객체 생성할 때 정하겠다.
ex)
class Tea<T>{ // T : 타입변수
//멤버구현 : 일반클래스와 동일하다.
public int a;
public String b;
public T c;
public void aaa(String str) {
}
}
Tea<String> t1 = new Tea(); //비권장 - 레거시(곧 사라질 문법, 나중에 언제 피해볼지 모름)
Tea<String> t2 = new Tea<>(); //비권장 - <>안에 타입을 지정해주지 않았기 때문
Tea<String> t3 = new Tea<String>(); //권장 - 정석.
t3.c="문자열";
인터페이스에도 사용이 가능하다.
- public interface 인터페이스명<T> { .... }
제네릭을 사용하는 요소
- List계열 컬렉션, Map계열 컬렉션, Set 계열 컬렉션 등... 스트림...
- List<String> list = new List<String>(); => String형 변수를 담는 list를 만들겠다.
- List<Integer> list2 = new List<Integer>() => Integer형 변수를 담는 list를 만들겠다.
- 그 외의 다른 타입은 허용하지 않겠다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 자바 #29, 예외처리(Exception, try-catch문) 및 예외 종류 예제 및 응용 (1) | 2019.02.27 |
---|---|
[Java] 자바 #28, Wrapper클래스 예제 및 응용 (0) | 2019.02.25 |
[Java] 자바 #26, 열거형(Enumeration, enum) (0) | 2019.02.24 |
[Java] 자바 #25, 인터페이스(Interface) (1) | 2019.02.23 |
[Java] 자바 #24, 업캐스팅과 다운캐스팅(Casting) (0) | 2019.02.21 |