본문 바로가기
[ JAVA ]/JAVA

[ Java ] Generic

by 환이s 2022. 12. 26.
728x90
CHAPTER 14. Generic 기본 개념 이해하기

오늘은 java.utill 패키지에서 제공하는 Collertion Framework(컬렉션 프레임워크)에 대해 알기 전에 알고 넘어가야 하는 Generic에 대해 포스팅을 해보겠습니다!

 

1 ) Generic 이란?

 

제너릭(Generic)은 클래스 내부에서 지정하는 것이 아닌, 외부에서 사용자에 의해 지정되는 것을 의미합니다.

한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아니라 필요에 의해서 지정할 수 있도록 하는 일반(Generic) 타입을 이야기하며, 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법입니다.

 

그럼  제너릭(Generic)이란 무엇인지에 대해 궁금증이 생기는데 우리는 지금까지 Java를 공부하면서 제너릭을 사용했습니다. 어디서 사용을 했을까 ?? 바로 우리가 흔히 쓰는 ArrayList를 생성할 때 사용했는데 어떻게 쓰였는지 다들 아실 거예요!

 

객체<타입>객체명 = new 객체<타입>(); 이렇게 작성했던 걸 기억할 수 있습니다. 즉 아래와 같이 여러 생성방식이 있습니다.

 

 

이렇게 <> 괄호 안에 들어가는 타입을 지정해 줍니다.

이렇듯 제너릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미합니다.

 

2 ) Generic 장점

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

 

3 ) Generic 사용 방법

 

Generic은 사용되는 타입이 여러 가지 있습니다. 아래 표를 참고!

타입 설명
<T> Type
<E> Element
<K> Key
<V> Value
<N> Number

※ 타입 변수(Type Variable)

 

기호의 종류만 다를 뿐 "임의의 참조형 타입"을 의미한다는 것은 모두 같으며, 상황에 맞게 의미 있는 문자를 선택해서 사용합니다.

타입 변수는 클래스에서 뿐만 아니라 메서드의 매개변수나 반환값으로도 사용할 수 있습니다.

 

 

4 ) Generic의 선언 및 생성

 

//클래스
public class Person<T>{...}
//인터페이스
public Interface StudentName<T>{...}
//Generic Type 두 개 이상 사용하는 경우
public class Student<K,V>{...}

 

클래스나 인터페이스에 선언한 경우와 Generic 타입을 두 개 이상 사용하는 경우입니다.

 

public class Person<T> { // extends Object
    private T person;
    public void set(T person) {
        this.person = person;
    }
    public String getName() {
        return this.person.toString();

 

기본적으로 Generic 타입의 클래스는 위와 같이 선언합니다.

T 타입은 해당 블록{...} 안에서까지 유효합니다.

 

주의할 점은 Generic 클래스를 사용하려면, 즉 객체를 생성해야 하는데 이때 구체적인 타입을 명시를 해주어야 합니다.

 

public static void main(String[] args) {

        Man m = new Man("Man");
        Student stu = new Student(100 , "Hong");

        Person<Man> p = new Person<>();
        p.set(m);
        System.out.println("m= "+ m.getName());

        Person<Student> sp = new Person<>();
        sp.set(stu); // 이자리에 Man을 주면 에러가 남
        System.out.println("sp= "+sp.getName());

 

 

Generic이 참조 타입이 올 수 있다는 것은 사용자가 정의한 클래스도 타입으로 올 수 있다는 뜻입니다. 

위 예시에서 보여주는 것처럼 기존의 Student , Man을 Person<> 안에 클래스 타입 구체적으로 명시해주어야 합니다.

 

위 코드를 실행시키면 다음과 같이 출력된다.

 

 

정리하자면

  • Generic 클래스 안에 <> 데이터 자료형 타입이 올 수 있습니다.
  • 코드의 재사용성이 높아지면서 타입의 안정성 역시 보장될 수 있습니다.
  • 형변환이 따로 필요 없으며, 필요한 데이터 자료형이 있을 경우에 사용하는 것이 좋습니다.
  • Generic을 사용하고자 하는 클래스 앞에는 <T>라는 타입을 사용하면 됩니다.
728x90

'[ JAVA ] > JAVA' 카테고리의 다른 글

[ Java ] Scanner  (0) 2022.12.29
[ Java ] Collection Framework  (0) 2022.12.28
[ Java ] JDK 기본 클래스 2  (0) 2022.12.25
[ Java ] JDK 기본 클래스 1  (0) 2022.12.22
[ Java ] Interface 2  (2) 2022.12.21