java generics/ enum/ annotation

cornpip·2023년 5월 15일
0

자바

목록 보기
15/19

Generics

와일드 카드

ArrayList<? extends Product> list = new ArrayList<Tv>();
ArrayList<? extends Product> list = new ArrayList<Audio>();

제네릭에 다형성을 적용한다.
제네릭 타입 명시를 안 할수도 있는데 해야한다면 제네릭 범위를 2개 이상으로 좁혀두고 싶을 때 사용하는 듯 하다. 예시는 인자로 받는 상황을 보여줬다. page 470

제네릭 메서드

static <T extends Fruit> Juice makeJuice(FruitBox<T> box){
	String tmp = "";
    for(Fruit f : box.getList()) tmp += f+" ";
    return new Juice(tmp);
}

메서드 선언부에 제네릭 타입을 지정할 수 있다.
메서드 제네릭은 제네릭 클래스에 정의된 T와 별개로 지역적으로 사용된다.
메세드 제네릭을 사용하면 static 메서드에 타입을 선언하고 사용할 수 있다.

enum

멤버 추가하기

enum Direction2 {
    EAST(1, ">"), SOUTH(2,"V"), WEST(3, "<"), NORTH(4,"^");
    private final int value;
    private final String symbol;


    Direction2(int value, String symbol) { // 접근 제어자 private이 생략됨
        this.value  = value;
        this.symbol = symbol;
        System.out.printf("initial : %d=%s\n", value, symbol);
    }

    public int getValue()     { return value;  }
    public String getSymbol() { return symbol; }
}

class Main {
    public static void main(String[] args) {

        for(Direction2 d : Direction2.values())
            System.out.printf("%s=%d%n", d.name(), d.getValue());
    }
}
결과
initial : 1=>
initial : 2=V
initial : 3=<
initial : 4=^
EAST=1
SOUTH=2
WEST=3
NORTH=4

생성자가 private이라는 것도 그렇고 enum을 사용하는 시점에 자동으로 생성되는 듯 하다.
main에서 enum을 사용하지 않으면 초기화x

annotation

자바에서 제공하는 표준 annotation
@Override, @Deprecated, @SuppressWarnings, @FunctionalInterface.....
표준 annotaion은 컴파일러에게 유용한 정보를 제공한다. 이름 틀린 Override 잡아주기, 경고 무시, 함수 인터페이스 적절한지 등을 봐준다.

profile
https://cornpip.tistory.com 티스토리로 이전했습니다!

0개의 댓글