Enum(열거형)
GOALS:
- Enum의 기본적인 개념을 이해하고 설명할 수 있다.
- Enum이 등장하게 된 배경에 대해서 이해하고, 그 장점에 대해 설명할 수 있다.
- Enum의 문법 요소를 이해하고 적절하게 사용할 수 있다.
Enum : enumerated type은 여러 상수들을 보다 편리하게 선언할 수 있도록 함.
자바에서 상수는 final 키워드를 이용하여 선언했었다.
다만 근데 이 키워드로 상수를 할당하면, 상수명이 중복되는 경우가 생긴다.
이렇게 되어 있을 때 일차적으로 interface 키워드를 사용하여 해결할 순 있다.
예를 들어 아래처럼.
다만 이렇게 했을 경우, Season.SPING == Frameworks.DJANGO 가 true가 나와 타입 안정성이 떨어진다.
그래서 객체의 생성으로 방지를 할 수 있지만 코드가 길어져 만들어진 것이 enum 키워드가 생겼다.
예를 들어서
와 같이 코드를 선언시 코드가 간결해진다.
그래서 위와 같이 선언했을 경우를 활용하는 코드를 작성하면,
와 같이 활용할 수 있다.
위의 같은 경우에는 Seasons.SPRING으로 객체를 만들었기에 출력은 봄 이 나온다.
그래서 enum 을 일반화해서 보자면
이 된다. 그렇다면 상수명 또는 정수값은 어떻게 따로따로 받을 수 있을까?
이는 method 형태로 만들어져 있으니 테이블을 통해서 알아보자.
Generic
GOALS:
- 제네릭의 장점을 이해한다.
- 제네릭 클래스를 정의하고 활용할 수 있다.
- 제네릭 메서드를 정의하고 활용할 수 있다.
Generic이라는 단어에서도 느낌이 온 것처럼,
원래 어떠한 method에선 parameter의 타입을 지정해줘야만 했다. 예를 들어
이처럼 Basket은 String 다입의 데이터만 받을 수 있었다.
하지만 제네릭을 사용한다면, Basket의 parameter를 모든 타입으로 받을 수 있다. 예를 들어
이처럼 T 라는 키워드를 데이터 타입 자리에 넣어주면 사용하는 argument에 따라 데이터를 저장해준다.
String이 들어오면 String으로, Integer가 들어오면 Integer로…
이 과정은 객체를 생성할 때 일어난다. 예를 들어
이렇게 argument를 주기 위해 안에 데이터 타입을 넣어 준다.
위와 같이 객체를 생성하면 BasketT
클래스는 아래와 같이 코드가 변환한다.
Integer 말고도, Double, Boolean, String 등등으로 객체를 생성 가능하다. 그래서
static T item2 와 같이 static이 붙은 변수나 method는 argument로 사용할 수 없다.
그리고 클래스에 사용할 때 interface를 사용할 수 있고, 상속 또한 가능하다. 예를 들어
위와 같이 정의할 수 있다. 또한 예상 가능하듯이 method에도 사용 가능하다.