| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
                            Tags
                            
                        
                          
                          - PCA
 - Classification
 - 머신러닝
 - 지도학습
 - LG Aimers
 - Machine Learning
 - 오블완
 - OpenAI
 - 해커톤
 - LG Aimers 4th
 - GPT-4
 - supervised learning
 - deep learning
 - AI
 - 딥러닝
 - 분류
 - ChatGPT
 - LLM
 - LG
 - 티스토리챌린지
 - gpt
 - 회귀
 - regression
 
                            Archives
                            
                        
                          
                          - Today
 
- Total
 
SYDev
[이것이 자바다] Chapter 13. 제네릭 본문
1. 제네릭이란?
- 제네릭(Generic): 결정되지 않은 타입을 파라미터로 처리하고, 실제 사용할 때 파라미터를 구체적인 타입으로 대체시키는 기능
 - 기본 타입은 타입 파라미터의 대체 타입이 될 수 없음 -> int(X), Integer(O)
 
public class Box <T> {
    public T content;
}
Box<String> box = new<String>();
box.content = "안녕하세요.";
String content = box.content;	// 강제 타입 변환 없이, "안녕하세요"를 바로 얻을 수 있음
2. 제네릭 타입
- 제네릭 타입: 결정되지 않은 타입을 파라미터로 가지는 클래스와 인터페이스
 - 선언부에 '< >'가 붙고, 그 사이에 타입 파라미터들이 위치
 
public class 클래스명<A, B, ...> { ... }
public interface 인터페이스명<A, B, ...> { ... }
- 외부에서 제네릭 타입을 사용할려면 타입 파라미터에 구체적 타입을 지정해야 함, 지정하지 않으면 Object 타입 암묵적 사용
 
public class Product<K, M> {
    // field
    private K kind;
    private M model;
    
    // method
    public K getKind() { return this kind; }
    public M getModel() { return this.model; }
    public void setKind(K kind) { this.kind = kind; }
    public void setModel(M model) { this.model = midel; }
}
3. 제네릭 메소드
- 제네릭 메소드: 타입 파라미터를 가지고 있는 메소드
 - 타입 파라미터가 메소드 선언부에 정의된다는 점에서 제네릭 타입과 차이 존재
 
public <A, B, ...> 리턴타입 메소드명(매개변수, ...) { ... }
4. 제한된 타입 파라미터
- Bounded type parameter: 타입 파라미터를 대체하는 구체적인 타입을 제한
 - ex) 숫자를 연산하는 제네릭 메소드는 Number 또는 자식 클래스(Byte, Short, Integer, Long, Double)로 제한할 필요가 있음
 
public <T extends 상위타입> 리턴타입 메소드(매개변수, ...) { ... }
public <T extends Number> boolean compare(T t1, T t2) {
    double v1 = t1.doubleValue();	// Number의 doubleValue() 메소드 사용
    double v2 = t2.doubleValue();	// Number의 doubleValue() 메소드 사용
    return (v1 == v2);
}
5. 와일드카드 타입 파라미터

리턴타입 메소드명(제네릭타입<? extends Student> 변수) { ... }
리턴타입 메소드명(제네릭타입<? super Worker> 변수) { ... }
리턴타입 메소드명(제네릭타입<?> 변수) { ... }
- Student와 자식 클래만 가능하도록 선언
 - Worker와 부모 클래스만 가능하도록 선언
 - 어떤 타입이든 가능하도록 선언
 
참고자료
728x90
    
    
  반응형
    
    
    
  'Programming Lang > Java' 카테고리의 다른 글
| [이것이 자바다] Chapter 15. 컬렉션 자료구조 (0) | 2025.02.02 | 
|---|---|
| [이것이 자바다] Chapter 14. 멀티 스레드 (1) | 2025.02.01 | 
| [이것이 자바다] Chapter 12. java.base 모듈 (0) | 2025.01.31 | 
| [이것이 자바다] Chapter 11. 예외 처리 (0) | 2025.01.30 | 
| [이것이 자바다] Chapter 9. 중첩 선언과 익명 객체 (0) | 2025.01.30 |