Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 우아한테크코스
- 리스코프치환원칙
- Oracle JDK와 OpenJDK의 차이
- 자바로 만들수 있는 것
- 테스트 성능 개선
- Getter Setter
- 우테코4기
- 제임스고슬링
- 백준
- throw 와 throws 차이
- 자바의 종류
- 인수테스트
- ServiceTest
- 우테코
- 상근날드
- JXM
- 상수와 Enum
- 방어적 복사
- JDK
- 윤년계산하기
- java 1000번 A+B
- 프로젝트 패키지 구조
- 자바 4334
- There isn't anything to compare.
- PR 오류
- 자판기미션
- 자바 버전 다운 그레이드
- 객체지향적인 설계
- ControllerTest
- 블랙잭 회고
Archives
- Today
- Total
개발새발
Enum을 사용하는 이유가 뭘까? 본문
Enum 클래스를 사용하기 전
Enum 타입의 클래스가 있다는 것은 알고 있었지만, 막상 활용해본 적은 없었다.
그런데 고정 클래스로 Enum type 의 클래스로 Coin 이 있는게 아닌가???
왜 static final 상수로 고정하지 않고 amount 를 return 받도록 했을까? 유추 해봤다.

고정 시키기 위해
동전 타입을요구조건을 보면 500원, 100원, 50원, 10원만 사용이 가능하게 해두었다.
이번 미션에서 코인 타입별 갯수를 관리하기 위해 CoinType 이라는 클래스를 만들었다.
만약 Coin 이 그냥 상수였다면 여기서 코인 타입을 300원 으로 넣어도 생성될 것이다.
public class CoinType {
private final int type; // 아무 숫자나 다 들어올 수있음
private int amount;
public CoinType(int type, int amount) {
this.type = type;
this.amount = amount;
}
Enum 을 사용해서 타입 고정
public class CoinType {
private final Coin type; // 여기는 무조건 500,100,50,10 원만 들어올 수 있음
private int amount;
public CoinType(int Coin, int amount) {
this.type = type;
this.amount = amount;
}
관련 자원에 대한 추가 로직 생성 가능
Enum은 클래스이기 때문에 추가 로직이 생성 가능하다.
상태와 행위 관리를 한 곳에서 할 수 있게 된다.
Coin 을 위해 조작할 내용을 해당 클래스에 작성할 수 있다.
public static List<Integer> toList() {
return Arrays.stream(Coin.values()).map(Coin::getAmount)
.collect(Collectors.toList());
}
Enum 에서 지원하는 기본 메서드 사용 가능
Enum 클래스는 자체적으로 지원하는 메서드가 있어 추가 구현 없이 사용이 가능하다.
따라서 이 메서드를 사용할 수 있도록 하려고 Enum 클래스를 던져준 것이 아닐까.. 유추해본다.
- values() 열거 타입을 배열로 만들어 리턴
- ordinal() 해당 메서드는 해당 Enum 객체가 몇 번째에 있는지 ? 배열 index 를 리턴한다.
- valueOf() 매개 값으로 동일한 값을 가진 Enum 객체를 리턴한다.
- name() 열거 객체가 가진 문자열을 리턴한다.
느낀점
처음 구현을 할 때는 익숙하지 않아서, Enum Class 의 장점을 활용하지 못한채
구현했었는데, 관련 자료를 찾아보고 공부하다보니 타입 고정, 메서드 활용 등 장점이 많음을
알게 되었고, 많은 상수들을 효과적으로 관리 할 수 있음을 알게 되었다.
아직 많이 파악하진 못해서 활용도가 떨어지지만, 이 부분도 많이 사용해보면서 감을 익혀야 할 것 같다.
참고
'우아한테크코스' 카테고리의 다른 글
객체, 설계 (0) | 2022.08.24 |
---|---|
JDBC와 JDBC Template (0) | 2022.04.27 |
MVC 패턴 (0) | 2022.02.20 |
오류와 예외는 같은걸까? (0) | 2022.02.20 |
Mac에서 JAVA 버전 확인과 IntelliJ 에서 JDK 변환하기 (0) | 2022.02.20 |