[Java] 제네릭 (Generic)

2023. 2. 17. 13:26·Java/Base
728x90
728x90

제네릭 프로그래밍

  - 다양한 자료형이 적용될 수 있는 클래스를 만드는 것

  - 선언 시 클래스의 자료형을 명시하지 않음

      → 추후 해당 클래스를 인스턴스화(new)할 때 자료형이 정해짐 (.class 파일도 이 시점에 생성됨)

      ⇒ 변수의 이름과 기능이 동일하면서, 자료형만 달라지는 변수들을 사용할 때 고려

  - 컬렉션 프레임워크에서 많이 사용됨

      : 알고리즘을 활용해서 보다 빠르게 자료 구조를 검색하고, 데이터를 삽입할 수 있는 프레임워크

 

#  장점

  - 인스턴스화할 때, 다이아몬드 연산자(< >) 사이에 자료형을 명시함

      → 가독성을 높임

  - 자료형을 잘못 사용했을 때, 컴파일 시점 오류가 발생함

      → 자료형의 변환이 컴파일러에 의해 검증되므로, 안정성이 높음

  - java 파일의 수를 줄일 수 있음

      ex) double result, int result, float result

            이 세 가지 변수를 생성하려면 a.java, b.java, c.java 각 파일로 따로 만들어야 함

            → 제네릭을 사용하면 파일 하나로 생성할 수 있음

  - 메서드의 반환 자료형에 제네릭을 넣으면, 하나의 메서드만 만들어도

    상황에 따라 다른 자료형을 리턴할 수 있게 됨

 

Object 클래스를 사용할 때와 비교

  - 최상위 클래스 Object를 사용하는 경우에도 제네릭과 비슷한 효과가 있음

     (다형성을 이용하여 Object 타입으로 바라봄)

      → 그러나, 이 방법을 사용하면 하위 클래스의 메서드/멤버변수를 호출할 때마다

           다운 캐스팅을 해야 하기 때문에 번거로움

 

 


제네릭 프로그래밍 방법

// 클래스 파일 : 선언 방법 //

public class 클래스명<T> {  // T : 대체문자

    // 제네릭 자료형 선언  :: T 자료형으로 선언한 변수
    private T 변수명;

    // 제네릭 메서드 정의  :: T 자료형을 반환하는 메서드
    public T 메서드명(매개변수) {
        ...
    }

    // 제네릭 메서드 정의 2  :: T 자료형 변수를 매개변수로 받는 메서드
    public 반환자료형 메서드명(T 변수) { 
        ...
    }

} // end of class

-----------------------------------------
// 메인 함수 파일 : 사용 방법 //

public static void main(String[] args) {

    // 사용할 자료형 인스턴스화
    자료형a 참조변수a = new 자료형a();

    // 제네릭 인스턴스화
    클래스명<자료형a> 참조변수 = new 클래스명<>();
    
    // 다운 캐스팅을 하지 않아도 자료형a로 사용할 수 있음

} // end of main

#  <대체문자>

  - 아무 문자를 사용해도 문제가 발생하지 않으나, 가급적 의미가 있는 약자로 사용하는 것이 좋음 

T E K V
Type Element Key Value

 

특정 클래스를 상속받은 자식 클래스만 허용

// 클래스 파일의 선언부 //

public class 클래스명<T extends 부모클래스> {
    // 그 외 문법은 동일함

 

  - 상속을 이용하여 T 자료형의 범위를 제한할 수 있음

      → 부모 클래스를 상속받지 않은 클래스가 제네릭 자료형으로 접근하려고 하면 컴파일 오류

  - 부모 클래스는 추상 메서드로 구현

 

320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java > Base' 카테고리의 다른 글

[Java] Thread - 은행 계좌 입출금에 대한 동기화 기능 구현  (0) 2023.02.19
[Java] 쓰레드 (Thread)  (0) 2023.02.19
[Java] 내부 클래스와 익명 클래스  (1) 2023.02.16
[Java] 오류와 예외 처리  (0) 2023.02.15
[Java] Object 클래스  (0) 2023.02.14
'Java/Base' 카테고리의 다른 글
  • [Java] Thread - 은행 계좌 입출금에 대한 동기화 기능 구현
  • [Java] 쓰레드 (Thread)
  • [Java] 내부 클래스와 익명 클래스
  • [Java] 오류와 예외 처리
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (384)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • etc. (13)
      • Error Note (16)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    Android
    SWAGGER
    SpringBoot
    SEO
    tailwindcss
    HTML
    CSS
    zapier
    개발일지
    vuejs
    jsp
    git
    티스토리챌린지
    php
    C#
    cs
    Swing
    js
    SQL
    http
    Wordpress
    errorNote
    오블완
    java
    typeScript
    면접
    Hotkeys
    jQuery
    Codeigniter
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Java] 제네릭 (Generic)
상단으로

티스토리툴바