반응형
Notice
Recent Posts
Recent Comments
Link
«   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
Tags
more
Archives
Today
Total
관리 메뉴

배움과 기록의 장

[Java] 제네릭 본문

backend/java

[Java] 제네릭

chaeunii 2025. 4. 8. 20:18

2023.1.4 작성

 

🔸 제네릭과 제네릭의 장점

-클래스나 메서드의 코드를 작성할 때, 타입을 구체적으로 지정하는 것이 아니라, 추후에 지정할 수 있도록 일반해두는 것, 특정 데이터 타입에 얽매이지 않게!

-c++ 할 때 배운 템플릿 같은 거임

-제네릭에 들어가는 타입으로 기본 타입이 아닌 래퍼클래스로 들어간다. int는 기본타입이고, int의 래퍼클래스는 Integer이므로 int가 아닌 Interger로 들어간다.

-래퍼클래스(wrapper class)에 대한 자세한 내용은 검색해보기~ 100을 참조변수로 참조하며 객체의 값으로 받는 느낌?

 

🔸 제네릭 클래스 정의와 사용

-정의 예시

  타입 매개변수는 임의의 문자로 지정
  자주 사용하는 타입 매개변수 T:Type, K:Key, V:Value, E:Element, N:Number, R:Result

class Example<T>{
	private T item;
    
    public Example(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }

    public void setItem(T item) {
        this.item = item;
    }
}

-사용 예시

Example<String>  ex1 = new Example<String>("Hello");
Example<Integer> ex2 = new Example<Integer>(10);
Example<Double>  ex3 = new Example<Double>(3.14);

-클래스 변수 또는 클래스 메서드에는 타입 매개변수를 사용할 수 없음. 인스턴스 별로 클래스변수의 타입이 달라지는 상황이 생기기 때문에

-제한된 제네릭 클래스

 특정 클래스를 상속받은 클래스 또는 특정 인터페이스를 구현한 클래스만 타입으로 지정할 수 있도록 제한 할 수 있음

class Example<T extends ClassName & InterfaceName> { // 클래스가 인터페이스보다 앞에와야함
    private T item;
		...
}

 

🔸 제네릭 메서드 정의 및 활용

-클래스 내부의 특정 메서드만 제네릭으로 선언 가능

class Example {
		...
		public <T> void add(T element) {
				...
		}
}

-제네릭 클래스와 달리 제네릭 메서드에서는 static 메서드에서도 선언하여 사용가능

-제네릭 메서드는 메서드가 호출되는 시점에서 제네릭 타입이 결정되어 정의하는 시점엔 타입을 모른다. 

 따라서 element.length()와 같은 String클래스의 메서드를 사용할 수 없음

 모든 자바 클래스의 최상위 클래스인 Object클래스의 메서드는 사용가능함 ex. element.equals(), element.toString() 

 

4.와일드카드란?

- 자바의 제네릭에서 어떠한 타입으로든 대체될 수 있는 타입 파라미터, 기호는 ?

-일반적으로 extends와 super키워드를 조합하여 사용

<? extends T>
<? super T>

-<? extends T> 는 와일드 카드에 상한제한을 두는 것, T와 T를 상속받는 하위 클래스 타입만 타입파라미터로 받을 수 있음

-<? super T> 는 와일드카드에 하한제한을 두는 것, T와 T의 상위클래스만 타입 파라미터로 받을 수 있도록 지정

-잘모르겠음.. 제한된 제네릭 클래스랑 뭔 차이지? 다른 자료도 찾아보면서 공부 더 해봐야할듯

 

 

 

반응형

'backend > java' 카테고리의 다른 글

[Java] Stringifyjson  (0) 2025.04.09
[Java] 예외 처리  (0) 2025.04.09
[Java] Enum  (0) 2025.03.23
[Java] 배열의 요소와 값, 배열과 주소값  (0) 2023.01.12