Code States | 제네릭

yeonk·2022년 5월 25일
1

codestates-backend-bootcamp

목록 보기
13/19
post-thumbnail

1. 제네릭(Generic)


데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법

public class className<타입 매개변수>{ ... }
public interface interfaceName<타입 매개변수>{ ... }
  • 클래스 외부에서 사용자에 의해 지정

  • 잘못된 타입이 들어오는 것을 방지

  • 타입 변환을 해줄 필요가 없어 관리 용이 (타입 체크, 형변환 생략)

  • 다른 타입에 유사한 기능을 지원하고자 하는 경우 코드의 재사용성을 높일 수 있음

  • 객체 타입의 안정성





2. 타입 매개변수


  • 통상적으로 알파벳 한 글자로 표현(대문자)

타입설명
<T>Type
<E>Element
<K>Key
<N>Number
<V>Value
<R>Result





연산자 <>

다이아몬드 연산자
자바 7버전 부터 생성자에 자료형 명시 선택적

ArrayList<String> test = new ArrayList<>();





와일드카드(wild card)

? 기호 사용

  • <?> (제한 없음, Unbounded Wildcards)

    • 모든 클래스, 인터페이스 타입 가능
  • <? extends T> (상위 클래스 제한, Upper Bounded Wildcards)

    • T와 그 자손들을 구현한 객체만 가능
  • <? super T> (하위 클래스 제한, Lower Bounded Wildcards)

    • T와 그 조상들을 구현한 객체들만 가능





3. 제네릭 클래스 정의


public class ClassName <T> { ... }
 
public class SubClassName { ... }
 
public class Main {
	public static void main(String[] args) {
    	
		ClassName<SubClassName> a = new ClassName<SubClassName>();
		
        ClassName<String> b = new ClassName<String>();
		
        ClassName<Integer> c = new ClassName<Integer>();
	}
}





4. 제네릭 메서드


호출되는 시점에서 제네릭 타입 지정

  • 특정 자료형에 사용하는 메서드 사용 불가 (예: Stringlength())

  • Object 클래스 메서드 사용 가능





참고 자료


[Java/자바] - 제네릭(Generic) - 와일드카드(Wildcard) 타입

제네릭스(Generics) - 3. 와일드 카드 <?>

자바 [JAVA] - 제네릭(Generic)의 이해

0개의 댓글