티스토리 뷰
제네릭
클래스 내부에서 지정할 객체 타입을 외부에서 지정하는 기술
객체별로 다른 타입이 저장될 수 있다.
✅제네릭 데이터 타입
일반 자료형(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; //자동 언박싱
'JAVA' 카테고리의 다른 글
[Java] 스트림(Stream) (0) | 2024.06.11 |
---|---|
[Java] 싱글톤 패턴(Singleton), 빌더 패턴(Builder) (0) | 2024.06.08 |
lombok 자바 라이브러리, Intellij (1) | 2024.05.31 |
[JAVA] ch.18 스레드 (1) | 2024.04.10 |
[JAVA] 람다식, 함수형 인터페이스 (0) | 2024.04.10 |
- Total
- Today
- Yesterday
- 배열
- 자바 출력문
- 서식문자
- 변수
- 깊은복사
- 얕은복사
- this
- getter
- 부호 연산자
- 논리 연산자
- 자료형
- dbms
- 삼항 연산자
- 복합 대입 연산자
- 제어문자
- 자바 자료형
- 메서드
- 오라클
- 비트 연산자
- 생성자
- Arrays클래스
- SETTER
- 관계 연산자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |