[Java] 제네릭 - 1

2024. 2. 19. 15:11Memorizing/Java

728x90

본 포스팅은 제네릭의 기본 문법과 사용법에 대해 다룹니다.

기본개념

제네릭은 자바에서 데이터 타입을 일반화하여 보다 쉽게 사용할 수 있도록하는 것을 말합니다. 예제 코드는 아래와 같습니다.

아래와 같이 자바는 강타입 언어이기 때문에 메소드나 클래스에서 입력, 반환 데이터 타입을 지정해주어야합니다. 그렇기 때문에 메소드 오버로딩을 사용한다면 아래와 같이 타입별로 메소드를 따로 만들어주어야합니다. 이런 것들을 해결하기 위한 것이 제네릭입니다. 

public class Generic {
    public String plusReturnFunction(int a, int b) { ... }

    public String plusReturnFunction(int a, long b) { ... }

    public String plusReturnFunction(int a, String b) { ... }
}

기본적인 제네릭의 예제코드는 아래와 같습니다. 

아래의 코드에서 제네릭 클래스를 생성할 때, 타입 변수로 String을 넣어주게되면, 모든 "T"값이 String을 넣은 것과 동일하게 동작하게됩니다. 

// 1.
public class Generic<T> {
		// 2.
    private T t;
    // 3.
    public T get() {
        return this.t;
    }

    public void set(T t) {
        this.t = t;
    }

    public static void main(String[] args) {
				// 4.
        Generic<String> stringGeneric = new Generic<>();
				// 5.
        stringGeneric.set("Hello World");
				
        String tValueTurnOutWithString = stringGeneric.get();

        System.out.println(tValueTurnOutWithString);
    }
}

추가 문법

  • 다수의 타입 변수를 사용할 수 있습니다. 타입 변수를 다르게 지정해주면 타입 변수 별로 다르게 클래스가 생성됩니다. 예제 코드는 아래와 같습니다.
public class Generic<T, U, E> {
    public E multiTypeMethod(T t, U u) { ... }
}


Generic<Long, Integer, String> instance = new Generic();
instance.multiTypeMethod(longVal, intVal);
  • 상속과 타입의 관계가 그대로 적용됩니다.
public class ParkingLot<T extends Car> { ... }

ParkingLot<BMW> bmwParkingLot = new ParkingLot();
ParkingLot<Iphone> iphoneParkingLot = new ParkingLog(); // error!

'Memorizing > Java' 카테고리의 다른 글

[Java] 초간단! 쿠키, 세션, 토큰  (0) 2024.02.29
[Java] 제네릭 - 2  (0) 2024.02.19
[Java] 프로세스와 스레드 - 4  (1) 2024.02.17
[Java] 프로세스와 스레드 - 3  (0) 2024.02.17
[Java] 프로세스와 스레드 - 2  (0) 2024.02.17