[Java] Generic(제네릭)이란?

2021. 6. 2. 23:27· Java

 

 

generic 영어 뜻과 마찬가지로 "포괄적인"이라는 의미를 지닌다.

이걸 데이터 타입에 대입한다면? 포괄적인 타입 = 모든 타입이 될 수 있는 타입이다.

 

 

 

JDK(Java Development Kit)에 포함된기능으로 대충 위 문장을 알면 다 끝났다고 생각합니다.
인생은 실전이니 바로 예제를 보겠습니다, 다음은 제네릭을 이용한 클래스이다.

// 제네릭은 아래처럼 클래스에서 자료형을 매개변수화 할 수 있다, 뿐만 아니라 인터페이스도 가능
class Data <T>{
    private T t;
    public void set(T t) {
        this.t = t;
    }
    public Object get(){
        return t;
    }
}

public class Main {
    public static void main(String args[]){
        // 아래 처럼 제네릭 타입을 String 로 가능
        Data <String> data = new Data();
        String s = new String("hello world");
        data.set(s);
        System.out.println(data.get());

        // 아래 처럼 제네릭 타입을 int 로도 가능
        Data <Integer> data2 = new Data();
        Integer i = new Integer(777);
        data2.set(i);
        System.out.println(data2.get());
    }
}

결과 값은 

hello world
777

이런 방식으로 클래스의 타입 지정을 객체 선언에서 하는 것으로 미룰 수 있습니다.

그리고 <>로 표기하는 것을 다이아몬드 표기법이라고 합니다.

// 제네릭을 두개 받을 수 있으며, 인터페이스에서는 아래와 같이 사용
interface Base <K,V>{
    public K getKey();
    public V getValue();
};

class Heir <K,V> implements Base <K,V>{
    private K Key;
    private V Value;
    // 제네릭 타입을 매개변수로 생성자를 받을 수 있음
    public Heir(K Key, V Value){
        this.Key = Key;
        this.Value =Value;
    }
    public K getKey() {return Key;}
    public V getValue() {return Value;}
}

public class Main {
    public static void main(String args[]){
        // 생성자는 아래와 같이 다이아몬드 표기법이 같이 들어감.
        Heir <String, Integer> heir = new Heir<>("Hello World", 777);
        System.out.println(heir.getKey()+" "+heir.getValue());
    }
}

이러면 결과 값은 

Hello World 777

이렇게 사용하면 됩니다, 참 쉽죠?

 

주의사항

- 클래스형(Integet)이 아닌 기본 자료형(int)는 사용할 수 없음

- 제네릭 매개변수 타입으로 사용은 가능하나 이를 통해 객체를 만들 수 없음

- 제네릭 매개변수 타입으로  static 필드도 정의 불가능

- 제네릭 매개변수 타입으로 배열 선언도 불가능 

반응형

'Java' 카테고리의 다른 글

[Java] Java 면접 질문 정리  (0) 2024.02.25
'Java' 카테고리의 다른 글
  • [Java] Java 면접 질문 정리
DSeung
DSeung
DSeung
Dev log
DSeung
  • 분류 전체보기 (193)
    • PHP (62)
      • Laravel (31)
      • Error (5)
      • Setting (11)
      • Modern PHP (15)
    • Go Lang (51)
      • Study (30)
      • Algorithm (17)
      • Setting (1)
      • Error (3)
    • Java (11)
      • Spring (3)
      • JSP (0)
      • Error (2)
      • Setting (2)
      • 단축키 (2)
    • JavaScript (6)
      • Modern JavaScript (4)
      • Node (1)
    • Android Kotlin (5)
      • Study (4)
      • Error (1)
    • 컴퓨팅 기술 (12)
      • 데이터베이스시스템 (4)
      • Docker (2)
      • 크롤링 & 스크래핑 (1)
      • API (1)
      • 클라우드 (1)
      • 네트워크 (1)
    • MySQL (7)
    • AWS (1)
    • Git (5)
      • GItLab (1)
      • GitHub (4)
    • 도메인 (2)
      • 안과 (2)
    • 자격증 (7)
      • SQLD (1)
      • 정보처리기사 (6)
    • Mac os (1)
    • 나머지 (13)
      • tistory (1)
      • 기타 (9)
      • 일기 (3)
    • 독서 (10)

인기 글

최근 글

블로그 메뉴

  • 홈
  • 태그
전체
오늘
어제
hELLO · Designed By 정상우.v4.2.0
DSeung
[Java] Generic(제네릭)이란?
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.