엠마의 개발공부일지

지네릭스(제네릭, Generics) 한장 정리 본문

Stack/Java

지네릭스(제네릭, Generics) 한장 정리

Emmababy 2020. 12. 4. 22:41
728x90

 

*지네릭스란?

  : 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에, 컴파일 시의 타입체크를 해주는 기능

  : 클래스 or 인터페이스에 어떤타입의 변수를 넣고싶은가? 를 먼저 생각해봐야한다.

  : 타입을 파라미터로 가지는 클래스 or 인터페이스, 컴파일시 구체적인 타입이 결정됨.

public class 클래스명<T> {....}
public class 인터페이스명<T> {....}

 

 

*지네릭스의 필요성

장점 : 타입안정성 제공, 타입체크와 형변환 생략이 가능하므로 코드가 간결해진다

Car 클래스 Main클래스
- car클래스의 멤버변수 object는 타입이 Object형(최상위 클래스, 그래서 모든타입을 다 저장가능)
- 그래서 main클래스에 String타입도 object타입도 모두 담을 수 있지만, 꺼낼때 형변환을 해줘야한다.
  (한 클래스에서 사용할 타입을 지네릭스로 지정해두는게 효율적이다, 무턱대고 object사용은 곤란함)

 

*지네릭스 사용이점

사용X 사용O
ArrayList에는 다양한 타입이 담길 수 있음
그래서 list에 보통 최상위 타입인 object타입으로 담김
list에 저장된 값을 가져오려면 object -> String(원하는 타입)으로 형변환을 해야함.
저장할 타입을 String으로 정함. 다른타입을 저장시 에러발생
값을 꺼낼때 형변환하지 않아도 됨.

 

 

*지네릭스 사용방법

1.  클래스 선언할때 (<T>사용) 2. 인스턴스 생성시(T에 원하는 타입) 3. 컴파일시 타입파라미터가 구체적인 클래스로 변경됨

 

 

*멀티타입 파라미터

클래스생성 인스턴스생성
Product클래스에는 두가지타입의 변수를 담을 수 있다 2가지 변수에 각각 값을 지정하고 가져올때,
그 타입에 맞게 지정하고 가져와야한다.

 

 

*지네릭스 메서드

  • 선언  
    • 리턴타입앞에 선언 / 리턴타입 & 매개변수에 사용
    • ex) public <T> Car<T> carMethod(T t) {.....}
  • 호출
    • Car <integer> car = carMethod(100);
    • 매개값을 보고 구체적 타입을 추정함 (매개변수에 int타입을 넣어서, 리턴타입이 integer일것이라고 추정)
728x90
Comments