새소식

Java/제대로 파는 자바

[제대로 파는 자바 (Java)-by 얄코] 제네릭

  • -

해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.

 

 

 

 

 

  • 자료형을 필요에 따라 동적으로 정할 수 있도록 해 줌
    • 자료형을 변수로 갖는다고 이해
  • 메소드 또는 클래스에 사용

 

 

 

 

제네릭 메소드

 

//  제네릭 메소드
//  T : 타입변수. 원하는 어떤 이름으로든 명명 가능
public static <T> T pickRandom (T a, T b) {
    return Math.random() > 0.5 ? a : b;
}

 

 

 

 

 

 

 

public static <T> void arraySwap (T[] array, int a, int b) {
    if (array.length <= Math.max(a, b)) return;
    T temp = array[a];
    array[a] = array[b];
    array[b] = temp;
}

 

 

 

 

 


제네릭 클래스

 

 

 

 

 

 

 

 

생성시 오른쪽에 빈 <> 을 붙이는 이유

 

빈 <> 라도 붙이지 않으면 생성하는 인스턴스의 자료형을 체크하지 않습니다.

때문에 자료형에 맞게 대입해도 컴파일러가 걸러내지 못하죠.

<> 를 붙이면 타입추론을 통해 자료형에 맞는 제네릭을 채워 넣게 되고,

그렇게 함으로써 의도한 바에 맞지 않은 자료형을 사용했을 때 컴파일 오류를 발생시켜 예상치 못한 문제를 차단하게 됩니다.

위의 코드에서 첫줄은 제네릭 타입을 잘못 사용했음에도 불구하고 오류가 나지 않지만

두번째 줄은 컴파일 오류가 발생하는 것을 볼 수 있습니다.

때문에 두번째 줄의 코드는 개발자가 코드를 잘못 작성했음을 사전에 알고 수정할 수 있습니다.

 

 


특정 조건을 갖춘 자료형만 쓸 수 있도록 하는 방법

제한된 제네릭

 

//  💡 T는 Number를 상속한 클래스이어야 한다는 조건
public static <T extends Number> double add2Num(T a, T b) {
    return a.doubleValue() + b.doubleValue();
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 


와일드카드

  • 제네릭 클래스에 대한 다형성을 위함

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.