[자바 프로그래밍] 제네릭

2024. 7. 10. 16:17·CNU SW 아카데미/2주차
Generics는 Generic이라는 단어가 주는 의미처럼, 다양한 타입에 적용할 수 있는 객체를 만들수 있도록 지원한다.

 

 

  1. Generics 개요
  2. 강력한 타입 검사
  3. 형 변환 감소
  4. 일반 알고리즘의 구현

 

 

 

# Generics

## Generics 개요

  • 객체 생성시 부여되는 타입을 이용한 파라미터 다형성(Parametric Polymorphism) 구현
  • 타입(Class, Interface) 또는 메소드에 정의
class Box<T> {
    T item;
    ...
}
Box<String> stringBox = new Box<>(“String”);
Box<Integer> integerBox = new Box<>(100);

class Box<T> {
    T item;

    public T simpleFunction(T item) { ... }
}

 

 

 

## 강력한 타입 검사

  • Generics는 타입 안정성(Type Safety)를 지원
    • 타입 파라미터를 통해 전달된 타입 정보를 이용하여 컴파일 타임에 검사
  • java.lang.Object 타입으로 변환되는 객체 형 변환은 런타임에 검사됨
    • 컴파일시에 오류를 발견할 수 없음
    • java.lang.ClassCastException 예외 발생
  • Generics는 타입이 명확히 명시되므로 컴파일 타임에 오류를 검출할 수 있음

 

 

 

## 형 변환 감소

  • 수퍼 타입을 서브 타입으로 변환하기 위해서는 타입 변환이 필요함
public class TypeSafetyExample {
    public static class Box {
        Object item;
        …
    }
    public static void main(String [] args) {
        …
        Integer value = (Integer) box.get();
        …
    }
}

 

  • Generic을 적용할 경우 별도의 타입 변환 과정을 필요로 하지 않음
public class TypeSafetyGenericsExample {
    public static class Box<T> {
        T item;
        …
    }
    public static void main(String [] args) {
        …
        Integer value = box.get();
        …
    }
}

 

 

 

## 일반 알고리즘의 구현

  • Generics는 알고리즘 일반화를 구현할 수 있도록 함
    • 다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일 시 타입 체크를 가능하도록 함
public static <T extends Comparable<T>> void bubbleSort(T[] items) {
    for(int i = items.length - 1 ; i > 0 ; i--) {
        for(int j = 0 ; j < i ; j++)  {
            if (items[j].compareTo(items[j+1]) > 0) {
                T item = items[j];
                items[j] = items[j+1];
                items[j+1] = item;
            }
        }
    }
}
  • 타입 파라미터가 Compatable의 서브 타입이면 정렬 가능하도록 정의
  • 비교 가능한 아이템의 경우 정렬이 가능하도록 선언하며, 특정 데이터 타입에 국한되지 않는 일반적인 알고리즘의 구현이 가능

 

 

 

# Generic 타입

  • 일반 타입 선언(클래스와 인터페이스)에 타입 파라미터를 추가한 형태로 사용
  • 타입 파라미터는 클래스나 인터페이스의 이름뒤에 선언하며, < > 기호 사이에 열거됨
  • 하나 이상의 타입 파라미터를 사용할 수 있음

 

 

# Generic 메소드

  • 일반 메소드 선언과 동일하며, 일반화 할 타입을 타입 파라미터로 선언
  • 메소드 앞에 <> 기호를 사용하여 타입 파라미터 목록을 선언
<Access Modifier> <Type Parameter List> <Return Type> Method name(Parameter list)

public <T> List<T> arrayToList(T[] array) { ... }

 

'CNU SW 아카데미 > 2주차' 카테고리의 다른 글

[자바 프로그래밍] 디자인 패턴 심화  (0) 2024.07.12
[자바 프로그래밍] 람다  (0) 2024.07.11
[자바 프로그래밍] 클래스  (1) 2024.07.09
[자바 프로그래밍] 값 타입 vs 참조 타입  (1) 2024.07.08
'CNU SW 아카데미/2주차' 카테고리의 다른 글
  • [자바 프로그래밍] 디자인 패턴 심화
  • [자바 프로그래밍] 람다
  • [자바 프로그래밍] 클래스
  • [자바 프로그래밍] 값 타입 vs 참조 타입
하가네
하가네
  • 하가네
    하 렌
    하가네
  • 전체
    오늘
    어제
    • 분류 전체보기 (93)
      • Computer Science (23)
        • 운영체제 (7)
        • 데이터통신 (6)
        • 자료구조 (4)
        • 논리회로 (0)
        • 확률 및 통계 (0)
        • 데이터베이스 (2)
        • AI소프트웨어 (3)
        • 컴퓨터네트워크 (1)
      • Language (0)
        • Java (0)
      • Framework (8)
        • Spring (8)
      • Tips (2)
        • 터미널 명령어 (1)
        • 우분투 명령어 에러 (1)
      • SSA (6)
        • Front (1)
        • Back (4)
        • DB (0)
        • 기획 (1)
      • 우아한테크코스 (0)
        • 7기 프리코스 (0)
      • CNU SW 아카데미 (42)
        • 1주차 (5)
        • 2주차 (5)
        • 3주차 (2)
        • 4주차 (1)
        • 5주차 (3)
        • 6주차 (2)
        • 7주차 (0)
        • 8주차 (1)
        • 9주차 (14)
        • 10주차 (0)
        • 11주차 (1)
        • 12주차 (0)
        • 13주차 (2)
        • 14주차 (2)
        • 15주차(최종 프로젝트) (3)
        • 최종 프로젝트 이후 (1)
      • 모각코 (6)
        • 2023 동계 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.
하가네
[자바 프로그래밍] 제네릭
상단으로

티스토리툴바