본문 바로가기
JAVA/컬렉션 프레임워크

02. 제네릭 클래스 정의하기

by 김꾸꾸(하트) 2022. 11. 18.

제네릭 클래스

정의

제네릭클래스에서는 여러 참조 자료형을 사용해야하는 부분에 Object가 아닌 하나의 문자로 표현

 

< T >를 뭐라고 부르는 지?

< > - 다이아몬드 연산자

T - 자료형 매게변수 ( = 자료형을 매게변수로 받는 다는 뜻 (꼭 T가 아니여도 됨. 아무거나 OK))

 

GenericPrinter<T>.

public class GenericPrinter<T>{ 
// <T> = 자료형을 매게변수로 받음. 이때 T 를 자료형 매게변수라고 함.(Type parameter) 
				
		//< >이 안에 실제 사용할 자료형을 매게변수로 받으면 자료형 매게변수인 T형이 해당 자료형으로 변함.
			private T material; 
				

		//해당 자료형이 필요한 부분에는 모두 T문자를 사용하여 구현
			public void setMaterial( T material ){
					this.material = material;
			}

     
			public T getMaterial(){
					return material;
			}

}

 

 

 

 

다이아몬드 연산자<>

< > → 이게 다이아몬드 연산자

ArrayList<String> list = new ArrayList<>(); //생성부분에서는 생략 가능 < > 생략가능

 

특징

선언된 자료형을 보고 생략된 부분이 선언된 자료형임을 컴파일러가 유추할 수 있기 때문에

생성부분에서는 생략 가능

 

 

 

 

 

자료형 매게변수 T와 static

자료형 매게변수 T는 static변수나 매서드에서 사용 할 수 있을 까?

자료형 매게변수 T 는 static 변수의 자료형이나 static메서드 내부에서 사용할 수 없음

 

why?

자료형 매게변수로 받을 실제 자료형이 정해지는 순간은

재네릭클래스의 인스턴스가 생성되는 순간이기 때문에

//재네릭클래스의 인스턴스가 생성될 때 실제 사용할 자료형이 정해짐<String> 
ArrayList<String> list = new ArrayList<>(); 

 

 

 

 

 

 

제네릭에서 자료형 추론하기

자료형 추론

변수에 대입되는 값을 보고 컴파일러가 추론하는 것

ArrayList<String> list = new ArrayList<String>();
→ var list = new ArrayList<String>();

 

특징

  • 자바 10이후 부터 제네릭도 자료형 추론가능
  • 지역변수로 선언되는 경우만 가능

 

 

출처 - Do it! 자바 프로그래밍 입문 (박은종 선생님) 

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=157852460