0. Generic Programming
각 type별로 코드를 따로 만드는 것이 아니라
같은 코드로 여러 type을 다루는 방법
(동일한 코드는 한 번만 만드는 게 좋다.)
이와 같이 A, B라는 class 말고
아래와 같이 Object라는 class로 한 번에 다루면 됩니다.
하지만 이 또한 type casting을 해야하는 등 불편한 점이 많습니다.
그래서 Generic class라는 것을 생성하도록 합니다.
1. Generic Class
1) Generic Class 기본
1> Generic Class 정의
[1] class 이름과 (<T>)
[2] class 내부 특정 object의 type을 (T)
아래와 같이 T로 설정합니다.
(T는 type에서 비롯된 글자이지만 T가 아닌 다른 문자를 써도 됩니다.)
2> Generic Class 활용
instance를 만들 때, T의 type을 <>로 알려줍니다.
2) Generic Class에서 여러 개의 type variable을 사용
1> Generic Class 정의
2> Generic Class 활용
굳이 type variable을 중복할 필요가 없으므로
비워놓아도
자동으로 type variable을 순서대로 인식합니다.
3) 용어 정리
1> Box<T> : generic class
2> T : type variable
3> Box : raw type
4> String : parameterized type (T의 매개변수로 쓰이니까)
4) Generic Class의 단점 (한계)
1> type variable (type T)에 static variable로 정의할 수 없습니다.
type variable의 type은 object가 만들어 질 때 결정되는데
static variable은 object를 만들지 않고 사용하기 때문입니다. (type 결정이 안 되니까)
2> generic class 내부에서는 type variable의 instance를 만들 수 없습니다.
(compile 과정에서 <T>는 제거되고 알맞은 type으로 변경합니다.)
-> 3> type variable은 array로 만들 수 없습니다. (generic class 밖에서도 못 만듭니다.)
4> primitive type (e.g. int)은 parameterized type으로 사용할 수 없습니다.
5) example 1
1> class 정의
2> class 활용
[1] 주황 박스
parameterize type은 생성자의 type과 동일해야 합니다.
[2] 노란 박스
Apple은 Fruit의 subclass여서 argument로 넘겨주는 것이 가능합니다.
[3] 하늘색 박스
Toy는 Apple의 subclass가 아니어서 argument로 넘겨주는 것이 불가능합니다.
[4] 하늘색 박스
subclass 아니어서 불가능
3> 결론
[1] parameterize type은 생성자의 type과 동일해야 합니다. (상속 관계도 안 됩니다.) (<>는 동일해야 함)
[2] raw type 간에는 상속 관계가 있어도 됩니다. (<> 앞은 상속 관계 있어도 됩니다.)
'JAVA' 카테고리의 다른 글
[Java] 6-0강 - Collection Framework (0) | 2020.12.03 |
---|---|
[Java] 5-2강 - Generic Programming 2 (generic 기법 응용) (0) | 2020.12.03 |
[Java] 4-1강 - 예외 처리 (0) | 2020.11.17 |
[Java] 2-3강 - 객체 지향 프로그래밍 3 (Abstraction - Interface) (0) | 2020.10.16 |
[Java] 2-1강 - 객체 지향 프로그래밍 1 (Encapsulation - Access Modifier) (0) | 2020.10.16 |