Java

[Java] 지네릭스(Generics) 의 개념과 활용에 대해 알아보기

joheamin 2025. 5. 14. 23:59
지네릭스?

 

 

지네릭스란 다양한 타입의 객체들을 다루는 메서드 혹은 컬렉션 클래스에 컴파일 시 타입을 체크해주도록 하는 기능이다.

컴파일시 생성된 객체의 타입을 체크해주기 때문에 타입의 안정성을 높이고 형변환이 간편하다는 장점이있다.

 

 

✍️ 지네릭스의 표기

List<String> list = new ArrayList();

흔히 컬렉션에서 이런식으로 컬렉션을 사용하는 경우를 많이 보았을 것이다.

 

List는 제네릭스로 타입을 체크할 수 있도록 되어있다.

해당 list는 String 으로 지정하였기때문에 String 이외에 타입이 저장될 경우 컴파일 에러가 발생한다.

 

따라서 컴파일시 타입체크를 함과 동시에 다른 타입이 저장되지 못하도록 타입 안정성이 생기는 것 이다.

 

 

🔍 모든 타입을 받는 지네릭스

지네릭스는 타입을 지정하는 동시에 어떠한 타입을 받을 수 있도록 명시할 수 도있다.

List 컬렉션 프레임 워크만 살펴보아도 String , Integer , 모든 객체 등등 다양한 타입으로 선언할 수 있다.

 

이는 List의 지네릭스 타입이 T로 되어있기 때문이다.

interface List<T>

 

클래스나 인터페이스에서 지네릭스 타입으로 설정하여 받게 될 경우 내부에 설정된 지네릭스는 모두 

인스턴스 생성할 때 지정된 타입을 가지게 된다.

 

◾ 지네릭스 클래스
class Test<T>{
	T name;
}​

 

◾인스턴스 생성 후 데이터 삽입
Test<String> test = new Test();​

test.name = "홍길동"  //정상
test.name = 10		//에러

👉 String 타입으로 인스턴스를 생성해주고 지네릭스 타입으로 된 필드에 데이터삽입
int형으로 저장하였을 때 에러 발생

Type mismatch: cannot convert from int to String : 타입 불일치 
즉 인스턴스 생성 시 지정한 타입이 String이기때문에 그 내부에 작성된 지네릭스(T)는 모두 String 타입으로 자동 설정된다.

 

 

제네릭스를 활용하여 메서드를 만들어보자 

 ◾ 제네릭스 반환 타입 메서드 
public <T> T print(T i) {
		return i;
	}​

 

👉 해당 메서드의 <T>는 지네릭스 타입을 받아 사용한 다는 것이다.
반환 타입은 지정된 지네릭스 타입이며 매개변수까지 지네릭스 타입으로 받는다.

 

◾ 인스턴스 생성 후 호출
Test<Integer> test = new Test();

System.out.println(test.print(10));  //정상
System.out.println(test.print("비정상"));  //에러​

 

👉 반환 타입부터 전달받는 매개변수의 타입까지 모두 지네릭스 타입으로 인해 
객체 생성 시 지정된 타입으로 변환되는것을 알 수 있다.