DevBoi

[Java] Enum 추상 클래스 본문

Language/[Java]

[Java] Enum 추상 클래스

HiSmith 2022. 4. 5. 16:38
반응형

프로그램에서 미리 정해놓아야할 값들, 상수값들이 존재할때 사용한다.

 

특정 enum에 대한 값을관리할 수도있고

클래스로 빼서 생성자를 호출해서, 값을 지정, 저장 할 수도 있다.

 

 

상수를 해당 과 같이 정의 한다고 가정해보자

메인에서는 각 상수 타입별로, 할당된 값을 가지고 사용하면 되기 떄문에,

타입이 변경되거나, 로직이 변경된다고 해도, 값이 변경되지 않아도 된다.

또한 타입에 대한 별도 if 로직을 작성하지 않아도 된다.

 

 

이런 방식으로, 해당 값에 대한 배열 형태로 가져와서 출력 할 수도있고

해당 상수에 대한 별도 메서드를 만들어서 뿌려줄 수도 있다.

무튼, 특정 상수에 대해서 미리 정의 해놓고, static 하게 값을 관리할 수있다.

 

 

또한 추상 메서드를 기점으로, 위와 같이 개발 로직을 설계할 수도있다.

 

한번 정리를 해보자면,

  • Enum은 클래스처럼 보이게 하는 상수이다
  • 서로 관련있는 상수들끼리 모아, 상수들을 대표할 수 있는 이름으로 타입을 정의 하는 것이다.
  • Enum 클래스 형을 기반으로 한 클래스형 선언이다.

 

 

 

실전 예를 들어보자

 

해당과 같이 값에 따른 다른 값을 return하는 로직이 있다고하자

해당 값은 어떻게 보면 하드코딩이라고 할 수 있다.

사실 상수는 하드코딩 되어있는 것이긴 하지만, 확장성 측면에서 너무 하드코딩이다.

예를 들어서, Y가 return 3으로 되어야 한다고 하면, 일일히 다 바꿔야 하고 값의 연관관게를 알기 어렵다

 

 

 

위와 같이 코드를 바꾼다면?

Y의 상수 값에 두가지의 변수 값이 존재하고, 생성자는 이 두개의 값을 전달 받아 세팅한다.

상수를 쓸때 사용 메서드로, 각 테이블의 값을 return해줄 수있는 코드를 가지고있다.

 

 

또한 Enum은, 각 함수메서드를 인자로받아서, 계산해 줄 수도있다.

 

이렇게 사용한다면, 해당 값을 넘겨받아서 각 상수값별로 어떤 함수가 실행되는지를 보다 명확하게 알 수 있다는 

장점이 있다.

 

제일 큰 장점이라고 생각되는 부분은 여러가지 상수에 대한 값을 공통으로 처리하는 로직에서

변경이나 추가되면, 항상 조건문을 추가해야한다.

 

위와 같이된다면, 별도 독립적으로 수정 확장에 운영할때 코드가 지저분해질 가능성이 높다.

 

 

 

 

 

또한 위와 같이 Bean으로 등록했을 경우에는, 어디서든 주입받아서, 사용이 가능하다는 장점이 있다.

 

 

Enum 타입을 사용하면 장점은 이렇다.

도대체 이코드가 어디에서 쓰이는 것인지, 어떤 값들만 허용가능한 것인지, 값들끼리의 차이가 다른 경우에

어떤 값이 문맥상 같은 값인지 알기가 편해진다.

 

가장 좋은 장점은 문맥을 담는 다는 것이다.

다른 값이 여도 같은 맥락인 경우가 있고, 같은 값이여도 다른 맥락인 경우가 있다.

Constants A 의 y 와 B의 y는 같지만 다르지만 Enum은 이를 표현할 수있다.

 

 

물론 수정되거나 변경 시에 배포를 해야한다.

각 플랫폼마다 다르지만, 배포를 자주 할수 없는 환경이라면, DB로, 반대라면 Enum을 사용하는 것이 좋다고 생각한다.

 

반응형

'Language > [Java]' 카테고리의 다른 글

[Java] 예외 전파  (0) 2022.04.06
[Java] CheckedException, UncheckedException  (0) 2022.04.05
[Java] Stream  (0) 2022.04.01
[Java] 옵저버 패턴  (0) 2022.03.30
[Java] 팩토리 디자인 패턴  (0) 2022.03.30