자바의 제네릭

Jeong Gyejin·2023년 3월 13일
0

JAVA

목록 보기
14/18

제네릭이란?

제네릭은(Generic)은 자료구조 같이 구조체를 직접 만들어 사용할 때 많이 쓰이기도 하고 매우 유용합니다.
제네릭은 직역을 하면 일반적인이라는 뜻입니다. 부연 설명을 하자면 데이터의 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법입니다.

우리가 흔히 사용하는 ArrayList,LinkedList 등을 생성을 할 때 <> 괄호 안에 들어가는 타입을 지정해 줌으로써 사용이 가능합니다.

제네릭을 사용하는 이유?

어떤 자료구조를 만들어 배포를 하려고 하는데, 여러 타입을 지원을 하기 위해서 제네릭을 사용합니다.
즉, 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미합니다.
한마디로 특정 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 것이 제네릭 타입입니다.

제네릭의 장점

  • 제네릭 타입을 사용하게 된다면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지를 할 수 있습니다.
  • 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없으며 관리하기가 편합니다.
  • 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아집니다.

제네릭 사용 방법

타입설명
Type
Element
Key
Value
Number

보통 제네릭은 표의 타입들이 많이 사용됩니다.

  1. 클래스 및 인터페이스 선언: 자바에서 제네릭은 클래스와 메소드에서 선언을 합니다.
public class ClassName <T> { ... }
 
public class Student { ... }
 
public class Main {
	public static void main(String[] args) {
		ClassName<Student> a = new ClassName<Student>();
	}
}
  1. 제네릭 클래스

    <> 안의 객체의 제네릭 타입을 String, Integer 등의 타입으로 지정을 해서 사용을 합니다.

  2. 제네릭 메소드

    제네릭 메소드는 매개변수의 타입과 리턴 타입을 제네릭 타입으로 받는 메서드를 이야기합니다.
    라는 제네릭 타입을 클래스가 아니라 메소드에 한정해서 사용을 할 수 있습니다.

제한된 제네릭과 와일드카드

제네릭을 특정 범위 내로 좁혀서 제한하고 싶을 때는 extends와 super, 그리고 ?(와일드카드)를 해서 사용할 수 있습니다.

<K extends T>	// T와 T의 자손 타입만 가능 (K는 들어오는 타입으로 지정 됨)
<K super T>	// T와 T의 부모(조상) 타입만 가능 (K는 들어오는 타입으로 지정 됨)
<? extends T>	// T와 T의 자손 타입만 가능
<? super T>	// T와 T의 부모(조상) 타입만 가능
<?>		// 모든 타입 가능. <? extends Object>랑 같은 의미
  • 이 때 K는 특정타입으로 지정이 되지만, ?는 타입이 지정되지 않습니다.
profile
항상 더 나은 개발자가 되기 위해서 끊임없이 공부하고 학습하면서 성장하는 사람이 되겠습니다.

0개의 댓글