
내일배움캠프 33일차 TIL : Java - Generic, Interface
인터페이스는 다음과 같은 장점이 존재한다.
- 다형성 : 다양한 클래스들이 동일한 방식으로 동작할 수 있게 (제한) 할 수 있다.
- 코드 재사용성 : 공통 기능을 한 곳에 정의하고 여러 클래스에 재사용하게 하여 중복을 줄일 수 있다.
- 유지보수성 : 코드의 구조를 명확히 하여 각 클래스가 어떤 기능을 제공하는지 쉽게 이해할 수 있다.
- 의존성 감소 : 클래스 간의 의존성을 감소할 수 있다.
- 다중 상속 : 자바에서 제공하지 않는 다중 상속을 인터페이스를 사용하여 구현할 수 있다.
제네릭 없이 다형성만을 활용하여 코드를 작성한다면 코드의 중복을 제거하여 기존 코드의 재사용성을 높일 수 있다.
하지만, 다형성만을 사용한다면 타입 안정성에 문제가 발생한다.
타입 안정성 문제를 해결하기 위해 제네릭을 사용한다.
- 제네릭은 특정 타입에 제한되지 않고, 범용적으로 사용할 수 있다.
- 제네릭 클래스는 타입을 미리 결정하지 않고 실제로 생성되는 시점에 타입을 결정한다.
public class GenericStore<T> {
private T field;
public void setField(T field) {
this.field = field;
}
public T getField() {
return field;
}
}
public class Main {
public static void main(String[] args) {
// T의 Type이 결정되는 순간
GenericStore<Integer> integerStore = new GenericStore<Integer>();
// Compile 오류 발생
integerStore.setField("Sparta");
integerStore.setField(1000);
}
}
제네릭은 컴파일러가 T에 대한 타입 정보를 작성한 코드에 맞춰 적용한다.