티스토리 뷰

728x90

제네릭

 

클래스 내부에서 지정할 객체 타입을 외부에서 지정하는 기술

객체별로 다른 타입이 저장될 수 있다.

✅제네릭 데이터 타입

일반 자료형(int, double 등)은 사용할 수 없다.

Reference 타입 (참조 타입으로 일반 자료형을 제외한 타입, 인터페이스, 배열, 리스트, wrapper 등)

 

제네릭 사용

🟣List에서 사용

리스트에서 <String>도 제네릭이다.

제네릭으로 Map을 사용할 수도 있다.

List<String> list = new ArrayList<>();
List<Map<String, Object>> list

 

🟣클래스에서 사용

클래스명 옆에 <>을 사용해 타입 매개변수를 지정한다.

public class Sender<T> {
    private T data1;
}

 

 

타입을 여러 개 생성할 수 있다.

public class Sender<T,T2, T3> {
    private T data1;
    private T2 data2;
    private T3 data3;
}

 

객체 생성하고 메모리에 할당할 때 타입을 결정한다.

다양한 타입을 저장할 수 있다.

Sender sender1 = new Sender<Integer, String, Double>(10, "test", 3.14);
Sender sender2 = new Sender<String, String, Integer>("test1, "test2", 11);
//Sender<Integer,String, Double> sender1 = new Sender<>(10, "test", 3.14);

 

타입 변수

<> 사이에 들어가는 타입 변수는 아무거나 들어가도 상관없지만 아래와 같은 규칙이 있다.

  • <T> : Type
  • <E> : Element
  • <K> : Key
  • <N> : Number
  • <V> : Value

제네릭 와일드카드

기호 : ?

모든 클래스와 인터페이스 타입을 뜻한다.

public class Message<T> {
    private T message;
    
    public Message(T message) {
       this.message = message;
    }
}

 

와일드카드의 자료형은 Object타입이다.

그렇기 때문에 타입을 지정하고 다운캐스팅해서 사용한다.

Message<?> m1;
m1 = new Message<>("12"); //String 데이터 넣었지만 Object 타입
String str = (String)m1.getMessage(); // Object타입이기 때문에 다운캐스팅해서 String변수에 넣음

 

와일드카드 제약

1. 하행

<? extends 상위타입 >

자신과 상위타입을 상속받은 타입만 사용할 수 있다.다운캐스팅이 필요하다.

 

2. 상행

<? super 하위타입>

자신과 하위타입이 상속받은 타입만 사용할 수 있다. 

자동으로 업캐스팅된다.

Message<? extends String> message1 = new Message<>("10"); 
Message<? super String> message2 = new Message<>(new Object());

 

message1에는 String이나 String을 상속받은 타입만 사용할 수 있고 message2에는 String이나 String이 상속받은 타입들만 올 수 있다.

message1은 지정한 타입이 최상위 타입이기 때문에 아래 타입이 들어오면 다운캐스팅을 해줘야한다.

message2는 지정한 타입보다 높아야하기 때문에 업캐스팅된다.

 


 

Wrapper 클래스

 

기본 자료형을 객체로 다루기 위해서 사용하는 클래스

Wrapper 자료형 일반 자료형
Integer int
Boolean boolean
Character char
Double double
Long long
Float float

박싱과 언박싱 (Boxing, UnBoxing)

✅박싱

일반 자료형에서 Wrapper 타입으로 변환

 

언박싱

Wrapper 타입에서 일반 자료형으로 변환 

Integer num = new Integer(10); //박싱
int num2 = num.intValue(); //언박싱

 

자바는 자동으로 박싱과 언박싱을 해준다.

Integer num3 = 20; //자동 박싱
int num4 = num3; //자동 언박싱

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함