3. JAVA - 제네릭스

hsso_o·2024년 7월 11일
0

스터디

목록 보기
14/44

제네릭스(Generics)

  • 데이터의 타입을 일반화한다는 의미를 가짐
  • 데이터의 타입을 일반화하여 다양한 타입을 지닌 제네릭 클래스 인스턴스로 활용 가능
    • 하나의 클래스만 작성해도 여러 타입의 필드 값을 가진 클래스로 변형 가능
      • 제네릭 타입(T, E, K, V)을 활용
  • 참조 타입만 사용 가능
    • int, char 등 사용 불가하여 Integer, Character 사용해야 함
  • 사용 이유
    • 구현의 편리함/재사용성
      • 하나의 클래스만 작성해도 여러 타입의 필드 값을 가진 클래스로 변형
    • 자료형의 안전성
      • 컴파일 시 타입을 체크하여 런타임 오류를 방지
public class GenericTest<T> {

	private T value;
	
	public T getValue() {
		return value;
	}
	
	public void setValue(T value) {
		this.value = value;
	}
}

// 제네릭 클래스의 T(타입)에 해당하는 부분이 모두 Integer로  변환
GenericTest<Integer> gt = new GenericTest<Integer>();

제네릭 클래스의 다이아몬드 연산자(<>) 안에는 4가지 타입을 지정 가능.
1. E : Element
2. T : Type
3. K : Key
4. V : Value

와일드카드(Wildcard)

  • 제네릭 클래스의 인스턴스를 유연하게 활용하기 위한 문법
  • 메소드의 매개변수로 받을 경우, 타입을 원하는 만큼 제한하는 것
<?>: 모든 타입을 허용하는 와일드 카드
<? extends T>: T 타입 또는 T의 하위 타입을 허용하는 와일드 카드
<? super T>: T 타입 또는 T의 상위 타입을 허용하는 와일드 카드
// Number이거나 Number의 자손 타입만 제네릭 가능
public class NumberBox<T extends Number> { 
    private T number;

    public void setNumber(T number) {
        this.number = number;
    }

    public T getNumber() {
        return this.number;
    }
}
profile
아뇨 소혠데요-

0개의 댓글