Enum 클래스가 등장한 배경과 사용 이유 #18
Replies: 4 comments
Enum이 등장하게 된 배경이 무엇인지 설명하고, (힌트: 타입안정성 보장)Enum이 나오기 전에서는 서로 관련된 상수들을 표현할 때 보통 이런 식으로 정수 상수를 사용했다. 이 방식은 다음과 같은 문제들이 있다.
이런 한계를 해결하기 위해 Java 5에서 enum 키워드가 정식도입되었고, 단순 상수 집합을 "타입 안전한 하나의 자료형"으로 다룰 수 있게 되었다. Enum을 사용할 때의 장단점을 서술해주세요.[ 장점1. 타입 안정성(Type Safety) ] [ 장점2. 가독성 향상 ] [ 장점3. 네임스페이스 제공 ] [ 장점4. switch문과의 자연스러운 결합 ] [ 장점5. 상수별 동작 구현 가능 (Java) ] [ 장점6. 싱글턴 패턴 구현에 유리 ] [ 장점7. Collection과의 연동 (Java) ] [ 단점1. 유연성 부족 (동적 확장 어려움) ] [ 단점2. 상속 불가 (Java) ] [ 단점3. 직렬화/역직렬화 시 주의 필요 ]
[ 단점4. 상수 개수가 많아지면 관리 부담 ] [ 단점5. 메모리에 상주 ] [ 단점6. 언어별 지원 범위 차이 ] |
Enum이 등장하게 된 배경이 무엇인지 설명하고, (힌트: 타입안정성 보장)(Enum 이전의 방식과 한계)
public static final int MONDAY = 1;
public static final int TUESDAY = 2;
public static final int APPLE = 1; // 과일의 '사과'도 우연히 1일 수 있음
//타입이 다른 과일과 요일에 저장된 숫자가 같아서 발생한 문제이다.(타입 안전성 없음) 컴파일러는 에러 잡지 못한다.
public static final String MONDAY = "MONDAY";
public static final String MONDAY_TYPO = "MONDAYY"; // 오타 가능성
//오타 가능성이 있으며, 오타가 발생해도 컴파일 시점에는 알 수 없고, 런타임에 문제가 생김
//문자열 비교 연산(equals)을 사용해야 하므로 정수 비교보다 성능 저하
//상수를 모아두는 용도로 인터페이스가 오용됨.위 방식의 한계점을 개선하기 위해 enum을 도입하기 시작했고, enum은 특정 범위의 값이 아니라면 컴파일 에러를 우선적으로 띄워버려서 런타임 예외를 줄일 수 있어, 타입안정성을 보장한다. // Enum 정의
public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
//사용 예시
public class Main {
public static void main(String[] args) {
Day today = Day.MONDAY;
// 타입 안정성 보장: Day 타입 외의 다른 값은 대입할 수 없음
if (today == Day.MONDAY) {
System.out.println("한 주가 시작되었습니다!");
}
}
}Enum을 사용할 때의 장단점을 서술해주세요.Enum을 사용할 때의 장담점은 다음과 같은 5가지가 대표적이다. 허용된 값 외의 잘못된 값이 입력되는 것을 컴파일 시점에 차단하여 타입 안정성이 보장되며, 직관적인 이름을 사용하여 가독성 및 명확성을 향상시킬 수 있다. 네임스페이스를 제공하며 (예: Fruits.APPLE과 Company.APPLE을 완벽히 구분), 단순한 상수 모음을 넘어 객체지향에 맞게 상태/행위 관리가 가능하며(예: 상태 코드별 메시지 매핑), 상수의 이름을 리펙토링 할때 용이하다.
public void orderMenu(MenuType menu) {
switch (menu) {
case HAMBURGER:
System.out.println("8900원입니다.");
break;
case GIMBAP:
System.out.println("5400원입니다.");
break;
case STEAK:
System.out.println("35000원입니다.");
break;
default:
throw new IllegalArgumentException("Invalid menu: " + menu);
}
} |
Enum이 등장하게 된 배경이 무엇인지 설명하고, (힌트: 타입안정성 보장)개발자가 작성하는 코드에서 특정 값이 여러가지 상태를 가질 수 있는 경우가 있다. (ex. public class Mode{
private Mode(){}
public static final int rentBook = 1;
public static final int returnBook = 2;
public static final int rentHistory = 3;
public static final int returnHistory = 4;
}근데 이 코드에도 문제가 있다. 첫 번째 문제는 위의 상태가 int 값을 가지는 데, int 값이기만 하면 userInput 이 어떤 값인지 컴파일 단에서 검증할 방법이 없다. 이런 문제를 해결하기 위해 enum 이 도입되었다. public enum Mode{
rentBook,
returnBook,
rentHistory,
returnHistory
}도입된 enum 클래스를 사용하면 위의 문제를 해결할 수 있는데, Enum을 사용할 때의 장단점을 서술해주세요.enum의 등장 배경에서 장점을 기반으로 설명을 하였다.
enum 의 단점
|
1. Enum이 등장하게 된 배경이 무엇인지 설명하고, (힌트: 타입안정성 보장) Enum을 사용할 때의 장단점을 서술해주세요.자바에서 Enum의 등장 배경은 타입 안정성 부족, 오타 취약성, 디버깅 불편할을 해소하기 위해 등장했습니다. Enum은 관련있는 상수들의 집합을 정의하는 특별한 클래스 입니다. Enum 등장 전에는 예를 들어 상수 동서남북을 정수로 관리한다면 public static final int NORTH = 0;
public static final int EAST = 1;
public static final int SOUTH = 2;
public static final int WEST = 3;이런 식으로 하고 이런 방식에는 int myDirection = dir.NORTH;
myDirection = 999;해도 문법적 에러가 생기지 않고, 디버깅 과정에 sout(dir.NORTH); 해도 출력에는 0이 출력되기에 디버깅에 불편합니다. public static final int NORTH = "north";
public static final int EAST = "east";
public static final int SOUTH = "south";
public static final int WEST = "west";이런식으로 하게 되고, 여기엔 "noth"와 같이 오타에 취약해집니다. 이렇게 상수 정의에 대해 발생하는 문제점을 해결하기 위해 등장했습니다. 이런 Enum을 사용하면 변경 없이 정해진 데이터 타입에 대해선 타입 안정성과 가독성에 큰 장점이 있지만 컴파일 타임에 상수가 고정되기에 유연성이 부족하고 다른 클래스 상속 불가 등의 단점이 있습니다. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
📆 일자: 26년 7월 23일(목)
오늘의 질문
Enum이 등장하게 된 배경이 무엇인지 설명하고, (힌트: 타입안정성 보장)
Enum을 사용할 때의 장단점을 서술해주세요.
All reactions