컴파일 시 타입을 체크해준다.
제너릭을 사용함으로써 잘못된 타입이 사용되는 문제를 컴파일 단에서 막을 수 있다. 실행 시 에러가 나는 것보다 컴파일 시에 미리 타입을 체크하는 것이 좋다.
또한 제너릭은 타입 변환이 필요없어 프로그램 성능이 향상된다.
ArrayList list = new ArrayList(); //제너릭 사용x
list.add("test");
String temp = (String)list.get(0); //타입변환 필요
ArrayList<String> list2 = new ArrayList(); //제너릭 사용
list2.add("test2");
temp = list2.get(0); //타입 변환 불필요
class ExClassGeneric<T> {
private T t;
public void setT(T t) {
this.t = t;
}
public T getT() {
return t;
}
}
클래스 설계시 구체적 타입을 명시하지 않고 타입 파라미터로 넣어두면 ExClassGeneric exGeneric = new ExClassGeneric<>(); 이런 식으로 타입 변환을 최소화 시킬 수 있다.
인터페이스 또한 마찬가지이다.
멀티 타입으로 <K, V> 두 개 이상의 파라미터도 가능하다.
제너릭 메소드는 컴파일러에게 제너릭이라는 것을 알려야한다. 따라서 제너릭 타입에 대한 정의가 반드시 필요하다.
public class ExClassGenericMethod {
public <T> void showGenericInfo(T info) {
System.out.println(info.getClass().getName() + ": " + info.toString());
}
}
이렇게 제너릭 클래스가 아니더라도 메서드에 제너릭 타입을 사용할 수 있다.
public static void main(String[] args) {
ExClassGenericMethod exGM = new ExClassGenericMethod();
exGM.showGenericInfo("Hello");
exGM.showGenericInfo(10);
exGM.showGenericInfo(10.5);
}
와일드 카드<.?>
이번 프로젝트에서 처음 본 녀석이다. 상속에서 유용하게 사용했다
열거형 enum은 상수를 의밉별로 묶어 사용할 때 쓴다. 요일별로 일, 월, 화, 수...를 묶던지 mbti를 ENTJ, ENFF 등 으로 묶을 수 있다.
데이터 값의 의미를 명확히 하는 장점이 있다.
클래스처럼 변수와 메소드는 가질 수 있지만, 상속이나 인스턴스는 생성이 불가하다. 그리고 enum값은 상수로 public, static, final 속성을 갖고 있어 변경될 수 없다.
열거형은 보통 첫 글자를 대문자로 하여 시작한다.
enum Week{SUN, MON, TUE ... }
자바에서 enum은 단순히 클래스이다. enum에서의 상수는 자신의 public static final 인스턴스를 갖는 것이다.
❗ ordinal() 사용을 자제하자.(그냥 없는 것으로 생각하라는 글도 있다.)
ordinal()메소드 enum상수의 위치를 나타낸다. 이는 enum이 변경되지만 않으면 상관없다. 하지만 유지보수 관점에서는 끔찍한 결과를 불러올 수 있다.정 위치값이 필요하다면 enum {SUN(0), MON(1) ...} 이런식으로 객체 필드에 별도로 정의하자!
출처: TCPschool