cbw1030
기록하는 공간
cbw1030
전체 방문자
오늘
어제
  • 전체보기 (101)
    • Programming (99)
      • Java (19)
      • Servlet (10)
      • Spring Framework (13)
      • Javascript (22)
      • AWS (2)
      • 네트워크 (8)
      • 데이터베이스 (13)
      • 리눅스 (3)
      • 블록체인 (7)
      • 용어 정리 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 인공지능
  • 브라이틱스 스튜디오
  • beautifulsoup
  • 브라이틱스 스튜디오 사용법
  • 데이터 사이언스
  • 삼성SDS 브라이틱스
  • 생활코딩
  • 머신러닝
  • Brightics AI
  • Brightics Studio
  • Brightics
  • 브라이틱스 튜토리얼
  • web
  • javascript
  • 크롤링
  • 데이터분석
  • 차원축소
  • 브라이틱스
  • 삼성SDS
  • react

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
cbw1030

기록하는 공간

Programming/Java

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

2021. 6. 14. 21:06
반응형

JDK 1.5부터 제네릭 타입이 새로 추가되었다.

1. 제네릭의 장점

1. 컴파일 시 강한 타입 체크를 할 수 있다.

2. 캐스팅을 제거한다.

불필요한 타입 변환을 막을 수 있다.

 

2. 제네릭 타입

제네릭 타입이란 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.

public class 클래스명<T> { ... }
public interface 인터페이스명<T> { ... }

 

3. 멀티 타입 파라미터

제네릭 타입은 두 개 이상의 멀티 타입 파라미터를 사용할 수 있다.

두 개 이상이 올 수 있다. 예를 들어 Map을 생성할 때 아래와 같이 사용한다.

Map<String, Object> map = new HashMap<>();

 

4. 제네릭 메서드

제네릭 메서드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메서드를 말한다.

public <타입 파라미터, ...> 리턴타입 메서드명(매개변수, ...) { ... }
public <T> Box<T> boxing(T t) { ... }

 

5. 제한된 타입 파라미터(<T extends 최상위타입>)

일반적인 제네릭 타입에서는 모든 자료형이 꺽쇠(<>)안에 들어갈 수 있다.

하지만 제한된 타입 파라미터 타입은 다음과 같은 경우에 쓰인다.

숫자 또는 문자열만 들어가야 하는 경우.

public <T extends Number> int compare(T t1, T t2) { ... }

위의 경우에는 타입에 Number 클래스와 Number 클래스를 상속받고 있는 하위 클래스들(Interger, Double 등)만 넣을 수 있다.

 

 

와일드카드 타입(<?>, <? extends ... >, <? super ...>)

  • 제네릭타입<?>
    • 모든 클래스나 인터페이스 타입이 올 수 있다.
  • 제네릭타입<? extends 상위타입>
    • 상위타입 또는 상위타입을 상속받는 하위타입만 올 수 있다.
  • 제네릭타입<? super 하위타입>
    • 하위타입 또는 하위타입이 상속하는 상위타입만 올 수 있다.
// Person Class(최상위)
public class Person { ... }

// Worker Class 
public class Worker extends Person { ... }

// Student Class
public class Student extends Person { ... }

// HighStudent Class 
public class HighStudent extends Studnet { ... }

클래스 4개가 위처럼 구성되어 있다면 총 3가지의 와일드카드 타입을 사용한 제네릭을 생성할 수 있다.

Course는 임의의 와일드 카드 타입의 클래스이다.

Course<?>                   // 모든 수강생이 올 수 있다.
Course<? extends Student>   // 수강생은 Student, HighStudent만 가능하다.
Course<? super Worker>      // 수강생은 Worker, Person만 가능하다.

 

 

참고

신용권, 『이것이 자바다 2』, 한빛미디어, 2016

반응형
저작자표시 (새창열림)

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

[Java] Comparable, Comparator 인터페이스를 사용하여 비교하고자 하는 기준을 정해 객체를 내맘대로 정렬하기  (0) 2021.08.10
[Java] try-with-resources 구문을 사용하여 할당한 자원을 자동으로 해제하기  (0) 2021.08.01
[Java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가  (0) 2020.11.10
[Java] 래퍼 클래스와 박싱, 언박싱에 대해 알아보자  (1) 2020.10.28
[Java] 제네릭(Generic)을 예시를 통해 알아보자  (0) 2020.10.24
    'Programming/Java' 카테고리의 다른 글
    • [Java] Comparable, Comparator 인터페이스를 사용하여 비교하고자 하는 기준을 정해 객체를 내맘대로 정렬하기
    • [Java] try-with-resources 구문을 사용하여 할당한 자원을 자동으로 해제하기
    • [Java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가
    • [Java] 래퍼 클래스와 박싱, 언박싱에 대해 알아보자
    cbw1030
    cbw1030

    티스토리툴바