제네릭(Generic)

Life is ninanino·2022년 9월 22일
0

JAVA

목록 보기
15/15

제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다

이걸 코드로 표현하면

Class Person<T> {
	public T info;
}
public class Generic { 
	public static void main(String[] agrs){
    	Person<String> p1 = new Person<String>();
        Person<StringBuilder> p2 = new Person<StringBuilder>();
        }
    }

p1.info : String
p2.info : StringBuilder
각각의 인스턴스를 생성할 때 사용한 <> 사이에 어떤 데이터 타입을 사용했느냐에 따라 달라진다.

Public T info;

클래스 선언부에서 클래스 Person의 필드 info의 데이터 타입은 T로 되어있다. 그런데 T라는 데이터 타입은 존재하지 않는다
이 값은 아래 코드의 T에서 정해진다

class Person<T> {

위 코드의 T는 아래 코드의 <> 안에 지정된 데이터 타입에 의해서 결정된다

Person<String> p1 = new Person<String>();
Person<String> p1

위 에서 데이터 타입을 정의하고

new Person<Stirng>();

에서 인스턴스를 생성하고 있다.
클래스를 정의할 때 info의 데이터 타입을 확정하지 않고 인스턴스를 생성할 때 데이터 타입을 지정하는 기능의 제네릭이다.

제네릭은 참조 데이터 타입에 대해서만 사용할 수 있다. 기본 데이터 타입에서는 사용할 수 없다.
new integer는 기본 데이터 타입인 int를 참조 데이터 타입으로 변환해주는 역할을 한다. 이러한 클래스를 래퍼(wrapper) 클래스라고한다. 덕분에 기본 데이터 타입을 사용할 수 없는 제네릭에서 int를 사용할 수 있다.

제네릭은 생략 가능하고 메소드에도 적용할 수 있다.
제네릭으로 올 수 있는 데이터 타입을 특정 클래스의 자식으로 제한할 수 있다
extends는 상속 뿐 아니라 구현의 관계에서도 사용할 수 있다

profile
백엔드 프로그래밍을 공부하고 있습니다. AWS, 클라우드 환경에 대해 관심이 많습니다.

0개의 댓글