반응형
Enum의 경우 컴파일 타임에 수행되는 기능이므로, Enum을 직접 동적으로 처리하도록 할 수는 없다. 해결책은 Enum과 비슷한 또 다른 클래스를 작성하는 것!
Enum은 그 자체가 클래스이다.
그래서 Enum의 기능을 모방하지만 일반 클래스이므로 상속을 받아 Dynamic 한 기능을 하게 해도 록 해줘야 함.
만드는 방법은 Enum에 클래스를 상속받도록 해주면 된다. 내가 만약 IResult라는 Enum을 만들었다면 이러한 IResult를 상속받아 처리해주면 된다.
Enum<? extends IResult>
가령 위의 코드처럼 작성해주면 된다.
여기서? 는 자바의 와일드카드라고 할 수 있는데. 제네릭에서 나오는 기호이다. 자바의 제네릭에서는 물음표(?) 기호를 사용하여 이러한 와일드카드를 사용할 수 있다.
<?> //타입 변수에 모든 타입을 사용할 수 있음.
<? extends T> //T타입과 T타입을 상속받는 자손 클래스 타입만을 사용할 수 있음.
<? super T> // T타입과 T타입이 상속받은 조상 클래스 타입만을 사용할 수 있음.
그렇다면 와일드카드를 왜 사용하는 것일까?
앞서 말했듯이 Enum의 기능을 모방하지만 상속을 받아 사용해야 동적 즉, Dynamic 하게 그 기능을 사용할 수 있다.
이름에서부터 느껴지지 않나.. 와일드카드란 "파일을 지정할 때, 구체적인 이름 대신에 여러 파일을 동시에 지정할 목적으로 사용하는 특수 기호" 즉, (1) Enum의 경우는 동적 기능을 하기 위해 Enum의 기능을 모방하는 클래스를 상속받아야 하고 (2) 여러 파일을 동시에 지정할 목적으로 사용해야 되기 때문
따라서 맨 위에 코드처럼 Enum을 작성해주는 게 올바른 방식이라고 할 수 있다.
반응형
'Spring Boot' 카테고리의 다른 글
Exception : Invalid bound statement (not found) (0) | 2022.08.18 |
---|---|
Cookie (0) | 2022.08.18 |
Mapper 파일 생성 (0) | 2022.08.14 |
SMTPSendFailedException (0) | 2022.07.31 |
Establish ssl connection without server's identity verification is not recommended (0) | 2022.07.21 |