Java -14

김정현·2024년 4월 26일
0

JAVA

목록 보기
16/21

Generics

지네릭스
1. 지네릭스란?

참고)

  • 다양한 자료형을 수용 -> Object 클래스 사용
    단점
    1) 타입 안정성 X
    2) 형변환의 번거로움
  1. 지네릭 클래스의 선언
    자료형이 명확하게 결정되어 있어야 컴파일 가능
    -> 컴파일러가 알 수 있는 형태로 자료형을 결정
    (모든 클래스는 Object의 하위 클래스 임을 알고 있다 -> 자료형을 Object로 결정)
<T> : 형식상 오류
  -> 컴파일 시점에 형식상의 오류를 해결하기 위해서 지네릭 타입은 모두 제거
  1. 지네릭스의 용어
    1) 지네릭 클래스
	class Box<T> { .... }

2) 타입변수 T
3) 원시타입 Box

타입 매개변수는 컴파일시 제거 -> Object -> 객체가 생성될때 타입 매개변수의 자료형으로 형변환

(타입은 객체 생성시 결정)

사용의 제한점)

static 멤버 변수에는 타입 매개변수 사용 불가 
	- 처음부터 자료형이 명시 되어야 공간을 할당 

배열 생성 불가 
	- new 연산자 : 배열 공간 생성 : 명확한 자료형을 알아야 공간을 계산 ..
  1. 지네릭스의 제한
    1) 타입 매개변수와 동일한 자료형
    2) static멤버에 타입 변수 T를 사용할 수 없다.
    3) 지네릭 타입의 배열을 생성하는 것도 허용하지 않는다.

  2. 지네릭 클래스의 객체 생성과 사용

  3. 제한된 지네릭 클래스
    <T extends 타입> -> T 는 타입의 하위 클래스
    <T extends 타입1 & 타입2> -> T는 타입1의 하위 클래스 이고 타입2 인터페이스의 구현 클래스

// T는 Fruit의 하위클래스로 한정
public class Box<T extends Fruit> { 
  • 컴파일시
     
public class Jucier {
    public static void make(FruitBox<?> box) {
        ArrayList<?> fruits = box.getItems();
        System.out.println(fruits);
    }
}

apple, grape 모두 가능.

  1. 와일드 카드
    <?> : <? extends Object>
    <? extends 타입> -> T는 타입의 하위 클래스 : 타입으로 상한 제한
    <? super 타입> -> T는 타입의 상위 클래스 : 타입으로 하한 제한
public abstract class Fruits {
}


public class Apple extends Fruits {
    public String toString() {
        return "사과";
    }
}

public class Jucier {
    public static void make(FruitBox<? extends Fruits> box) {
        ArrayList<?> fruits = box.getItems();
        System.out.println(fruits);
    }
}

이렇게 제한할경우 다른 클래스의 유입을 막을 수
8. 지네릭 메서드

  • 타입을 클래스에 정의하면 : 지네릭 클래스
    예) class Box<T> : T의 자료형은 객체가 생성될때 결정

  • 타입을 메서드의 반환값 타입 앞에 정의하면 : 지네릭 메서드
    public <T, U> String method(T str1, U str2); : T, U의 자료형은 함수가 호출될 때 결정

static으로 정의해도댐

  1. 지네릭 타입의 제거

0개의 댓글