카테고리 없음

객체지향프로그래밍] 제네릭 메소드 정리

Gom3rye 2022. 6. 10. 12:13
728x90

제네릭 프로그래밍이란?

일반적인 코드를 작성하고 이 코드를 다양한 타입의 객체에 대하여 재사용하는 프로그래밍 기법

- 타입을 파라미터로 가지는 클래스와 인터페이스를 정의한다.

- 컴파일 시 타입 파라미터가 구체적인 타입으로 변경한다. Ex) String 이면 String, Integer는 Integer

- 멀티 타입 파라미터도 가능하다.

제네릭의 장점

- 컴파일 단계에서 잘못된 타입으로 발생할 수 있는 문제를 파악할 수 있다.

=> 강한 타입 체크가 가능하기 때문에, 컴파일 시에 미리 타입을 강하게 체크해서 실행 시 런타임-타입 에러가 나는 것을 방지한다.

- 타입 명시 / 타입 변환 제거가 가능하다.

제네릭 메소드

매개변수 타입리턴 타입으로 타입 파라미터를 갖는 메소드

제한된 타입 파라미터

상속 및 구현 관계를 이용해 타입을 제한할 수 있다.

Ex) public <T extends 상위타입> 리턴타입 메소드(매개변수, ...) {...}

=> T는 상위타입 제한 (클래스 뿐만 아니라 인터페이스도 가능)

와일드카드 타입

? : 와일드카드 타입의 세가지 형태 -> 매개변수(인자)에서 허용

- 제네릭타입<? super 하위타입> : 하위 클래스 제한/ 하위 타입이나 하위 타입의 상위 타입만 올 수 있다.

Ex)

Box <뱀> box3 = new Box();                         ArrayList <뱀> a3 = new ArrayList();

Box <동물> box4 = new Box();                     ArrayList <동물> a4 = new ArrayList();

Box <자동차> box5 = new Box();                  ArrayList <자동차> a5= new ArrayList();

Box <방울달린뱀> box6 = new Box();           ArrayList <방울달린뱀> a6 = new ArrayList();

public void put_super(ArrayList<? super T> t)

public void put_sub(ArrayList<? extends T> t)

 

box3.put_super() -> a3,a4 가능 But, a5.a6 불가능

box3.put_sub() -> a3,a6 가능 But, a4.a5 불가능

box6.put_super() -> a6 가능

728x90
반응형