728x90
Q. 클래스에서 Integer, boolean, String 등 여러 타입을 한 번에 처리를 어떻게 할까?
1. 여러 타입 처리 방법
1) 각 타입을 처리하는 클래스 만들기
장점
- 컴파일로 정확하게 타입을 알려준다.(타입 안전성O)
단점
- 각 타입마다 클래스를 만들어야 한다.(코드 재사용X)
// Integer 담당 클래스
IntegerBox integerBox = new IntegerBox();
integerBox.set(10);
Integer integer = integerBox.get();
System.out.println("integer = " + integer);
// String 담당 클래스
StringBox stringBox = new StringBox();
stringBox.set("hello");
String str = stringBox.get();
System.out.println("str = " + str);
2) 클래스의 최상위 부모 Object를 사용
장점
- 다형성을 활용하여 코드의 중복을 제거하고, 기존 코드를 재사용할 수 있다. (코드 재사용O)
=> 입력 값이 어떤 타입이든 다 받아 줄 수 있다.
단점
- Object 클래스에서 값을 꺼내면 타입이 Object이다.
- 입력 값은 타입 상관없이 받아주지만, return 하는 타입을 제대로 확인해야한다.(타입 안전성X)
=> String을 Integer로 캐스팅할 수 없기 때문에 캐스팅 예외가 발생할 수 있다.
ObjectBox integerBox = new ObjectBox();
integerBox.set(10);
Object object = integerBox.get();
Integer integer = (Integer) integerBox.get();
System.out.println("integer = " + integer);
2. 제네릭 적용
1) 제네릭
- 기호(<>)를 다이아몬드라고 부르며, 해당 기호를 사용한 클래스를 제네릭 클래스라고 한다.
- 제네릭 클래스를 사용할 때는 미리 타입을 결정하지 않는다.
- 대신 클래스명 오른쪽에 <T>와 같이 선언하며, T를 타입 매개변수 라고 한다.
- 생성 시점에 T의 타입을 결정된다.(타입추론)
public class GenericBox<T> {
private T value;
public set(T value) {
this.value = value;
}
public get() {
return value;
}
}
GenericBox<Integer> integerBox = new GenericBox<>();
2) 제네릭 용어와 관례
제네릭(Generic)
- 일반적인, 범용적인이라는 영어 단어 뜻
- 특정 타입에 속한 것이 아니라 일반적으로, 범용적으로 사용할 수 있다는 뜻이다.
- 제네릭 핵심은 사용할 타입을 미리 결정하지 않는다.
- 클래스 내부에서 사용하는 타입 클래스를 결정하는 것이 아니라, 실제 사용하는 생성 시점에 타입을 결정.
메서드의 매개변수와 인자
- 매개변수(Parameter): String param
- 인자, 인수(Argument): arg
void mehtod(String param) // 매개변수
void main() {
String arg = "hello";
method(arg) // 인자 전달
}
제네릭의 타입 매개변수와 타입 인자
- 메서드는 매개변수에 인자를 전달해서 사용할 값을 결정한다.
- 제네릭 클래스는 타입 매개변수에 타입 인자를 전달해서 사용할 타입을 결정한다.
- 타입 매개변수: GenericBox<T> 에서 T
- 타입 인자: GenericBox<Integer>에서 Integer
void method(String parameter) {
}
void main() {
String argument = "test";
method(argument)
}
제네릭 명명 관례
- 일반적으로 대문자를 사용하고 용도에 맞는 단어의 첫 글자를 사용
- 키워드(관례이므로 자신한테 맞게 수정해서 사용해도 된다)
- E - Element
- K - Key
- N - Number
- T - Type
- V - Value
- S, U, V etc - 2nd, 3rd, 4th types
3) 제네릭 활용 예제
'온라인 강의 > 김영한의 실전 자바 - 중급 2편' 카테고리의 다른 글
[섹션2] 컬렉션 프레임워크 - ArrayList (0) | 2024.08.04 |
---|---|
[섹션1] 제네릭 2편 (0) | 2024.08.04 |