💎제네릭(Generic)💎
데이터의 타입을 일반화하는 것
클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법
필요에 따라 여러 자료형으로 바꿀 수 있게! 어떤 참조 자료형이 아닌 여러 참조 자료형을 사용할 수 있도록!
💎제네릭의 필요성
1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있음.
2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있음
+ Object 사용하면?
Object는 모든 클래스의 최상위 클래스이므로 모든 클래스는 Object로 변환할 수 있음.
하지만 하위 클래스로 변환할 때는 직접 형 변환을 해야 하는 단점이 있음.
💎제네릭 쓰기
선언시 클래스 또는 인터페이스 이름 뒤에 “<타입 파라미터>”
+ <> 다이아몬드 연산자
public class 제네릭클래스<T>{
private T 변수;
public T getter메소드(){
return 변수;
}
public T setter메소드(T 변){
this.변수 = 변;
}
}
//public interface InterfaceName<T> { ... }
//사용할 때
제네릭클래스<사용하고픈 자료형> 인스턴스명 = new 제네릭클래스<사용하고픈 자료형>();
💎타입 파라미터(자료형 매개변수,제네릭 타입,일반화시킨 타입)
컬렉션의 요소는 객체들만 가능!(int,double,..불가)
제네릭 클래스 내에서 제네릭 타입의 객체 생성 불가(new 불가)
💎타입 파라미터(자료형 매개변수,제네릭 타입,일반화시킨 타입) 많이 쓰이는 것
T
E : element
K : key
V : value
+💎Static 변수/ 메소드에서
타입 파라미터가 정해지는 순간은 제네릭 클래스의 인스턴스가 생성되는 순간이다.
Static 변수나 메서드는 인스턴스가 생성되기 이전에 생성되므로
여기에서 제네릭을 사용할 수 없다.
단 클래스에 제네릭 쓸 때!
메소드 단독으로 쓸 때는 Static 써도 된다.
+💎제네릭에서 대입된 자료형을 명시하지 않는 경우
컴파일 오류는 아님
하지만 컴파일러가 어떠한 자료형을 사용한 것인지 알 수 없으므로 강제 형변환이 필요
+💎여러 개 가능~
< T, V >...
+💎제네릭 타입 상속
타입 파라미터는 자식 클래스에도 기술해야 함 (+ 추가적인 타입 파라미터 가능)
+💎제너릭 인터페이스
구현한 자식 클래스도 제네릭 타입으로
+💎제너릭 배열
제네릭 클래스/인터페이스 타입의 배열 선언 불가
제네릭 타입 배열 선언은 허용
💎<T extends 클래스> 쓰기
T 자료형에 사용할 자료형을 제한함
제네릭 클래스에 사용할 자료형의 클래스들을 하나의 추상 클래스(A)에서 상속받게 한 후,
public class 제네릭클래스<T extends A>{
//코드
}
이러면 A라는 클래스를 상속받지 않은 클래스를 자료형으로 쓸 시(T) 오류 발생
+ 원래 제네릭을 사용한 클래스에서는
T를 이용해서 Object 클래스의 멤버밖에 못 썼지만,
상속 이용 시 A클래스의 멤버도 이용 가능
+💎와일드카드 타입

💎제네릭 메서드
접근제한자 <자료형 매개변수> 반환형 메서드명(자료형매개변수..){}
이 자료형은 메소드 내에서만 사용
+
정적 클래스(Static Class)
정적 클래스는 new 키워드를 사용해서 인스턴스를 만들 수 없음/정적 클래스는 생성자를 포함할 수 없음
정적 클래스의 모든 멤버는 static으로 선언되어야 함
정적 클래스는 객체들이 처음 호출될 때 생성되고 프로그램이 종료될 때 해제됨 - 정적 클래스는 어디서든 접근 가능
+
내부(중첩) 클래스
클래스 내부에 선언된 또 다른 클래스
보통 사용자 클래스 자료형이 필요할 때 클래스 내에 선언되어 사용
보통 두 클래스가 서로 긴밀한 관계가 있거나, 하나의 클래스 또는 메소드에서만 사용되는 클래스일 때 이용
+
자바7부터
Vector<Integer> v = new Vector<>(); //자동추론!
자바 10부터
var v = new Vector<Integer>(); //자동추론!
'💾 Backend > 자바' 카테고리의 다른 글
💗자바 ArrayList 클래스💗 (1) | 2023.05.26 |
---|---|
💖자바 컬렉션 🎞🚶♀️프레임워크💖 (1) | 2023.05.24 |
💖자바 예외‼️ 처리💖 (0) | 2023.05.11 |
💕객체 지향 공부 - 시나리오 작성💕 (2) | 2023.05.09 |
💖자바 JDK 제공 기본 클래스💖 (1) | 2023.05.09 |