ocp를 지키기 위해 enum vs interface
260
작성한 질문수 2
안녕하세요. 테스트 강의부터 좋은 강의 감사합니다.
강의를 보던 도중에 궁금한 점이 생겨서 질문드립니다.
OCP를 만족하는 GameLevel을 만들기 위해 enum도 비슷한 역할을 할 수 있는데 interface를 사용한 이유가 궁금합니다 !
@Getter
public enum GameLevel {
BEGINNER(...),
MIDDLE(...)
private final int rowSize;
private final int colSize;
private final int landMineCount;
}enum으로 구현 시 새로운 레벨의 추가가 GameLevel의 변화를 가져오기 때문인지..
혹은 이를 구분하는 다른 기준이 있을지 궁금합니다.
답변 2
0
안녕하세요, 김태경 님!
물론 Enum도 가능합니다 ㅎㅎ
특별한 이유가 있는 것은 아니고, 강의 커리큘럼을 이래저래 고민하다보니 인터페이스로 결정하게 되었어요.
결과적으로 놓고 보면 GameLevel은 크게 변하지 않고, 외부에서 사용하려는 값이 어느정도 정해져 있기 때문에 Enum이 더 어울리겠다 싶네요 ㅎㅎ
감사합니다 🙂
0
안녕하세요, 인프런 AI 인턴입니다.
김태경님께서는 OCP(개방-폐쇄 원칙)을 만족하는 설계 방식에 대해 질문하셨습니다. 기존의 Enum 방식과 Interface를 이용한 방식 중 어떤 기준으로 선택해야 하는지 궁금해 하시는 것 같습니다.
강의와 관련된 주제에 대해 유사한 질문과 답변들이 있으며, 이를 통해 특정 상황에서의 판단 기준을 이해하실 수 있을 것 같습니다.
질문 및 답변 링크:
메서드 네이밍 관련해서 질문 있습니다!:
이 답변에서는 코드 네이밍과 관련된 이야기지만, 네이밍과 추상화가 주석 대신 코드 자체를 더 명확하게 만드는 중요한 방법이라는 것을 시사합니다.추상화 레벨:
이 답변에서 코드를 추상화하는 여러 방법과 그 기준에 대해 설명합니다.Beverage 인터페이스:
Interface와 Abstract 클래스의 선택 기준에 대해 설명합니다. 해당 질문은 강의와 조금 다르지만, Interface 사용의 이유와 장점에 대해 잘 설명하고 있습니다.
간단한 설명:
Enum vs Interface:
Enum은 고정된 상수 집합을 표현하는데 적합하지만, 새로운 상수를 추가하려면 해당 Enum 클래스 자체를 수정해야 합니다. 반면, Interface는 확장에 유리하며 새로운 구현체를 추가할 때 기존 코드를 수정하지 않고 확장이 가능합니다.- OCP 원칙:
OCP 원칙에 따르면, 소프트웨어 개체는 확장에 열려 있어야 하며 변경에는 닫혀 있어야 합니다. 즉, 새로운 기능을 추가할 때 기존 코드를 수정하지 않고도 기능을 확장할 수 있어야 합니다. Interface를 사용하면 새로운 GameLevel을 추가할 때 각 구현체를 별도로 추가할 수 있어 OCP 원칙을 더 잘 만족할 수 있습니다.
- OCP 원칙:
참고 링크들을 살펴보신 후에도 궁금한 점이나 더 알고 싶은 내용이 있으시면 추가로 질문해 주세요!
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
[강의 질문] 메서드 선언부
0
90
1
[강의 질문] 메서드와 추상화
0
61
2
DIP 개념에 대한 질문입니다.
0
64
1
만약 보드를 이용한 게임의 종류가 더 다양해진다면 어떻게 될 수 있을지에 대한 고민
0
86
2
DIP 설명 후반부에 IOC에 대한 질문 드립니다.
0
80
2
안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?!
0
71
1
안녕하세요 메서드명 때문에 고민이 있어서 질문드립니다.
1
64
2
자바 record 사용에 대해서 질문 드립니다!
0
128
2
강의 내용 정리 및 자료 제작 툴 문의 드립니다.
0
136
2
사용할 변수 가깝게 선언하기 질문
0
93
1
오버 엔지니어링
0
151
2
학습용 java/spring 오픈소스 추천
1
368
2
중복된 메서드 줄이는 방법
0
185
2
MarketPlace에서 Sonarlint 검색이 안됩니다.
0
417
3
isLandMineCell() 메서드 질문
0
209
1
Cell[][]BOARD 매개변수받기
0
153
2
ConsoleInputHandler에서 왜 final붙여야 하는지
0
194
1
정적 생성자 메서드 of, from
0
265
2
Getter관해서
0
148
3
이름 바꾸기
0
129
2
stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??
0
164
2
현업에서 ISP를 도입하려는데 인터페이스 설계에 있어서 의문이 있습니다.
0
208
2
null을 가질 수 있는 값을 인자로 넘겨야 하는 경우
0
253
3
리팩토링을 하고 난 뒤 다시보면 오히려 더 복잡해 보이는것 같은 느낌입니다..
0
255
2





