인프런 커뮤니티 질문&답변

김태경님의 프로필 이미지
김태경

작성한 질문수

Readable Code: 읽기 좋은 코드를 작성하는 사고법

OCP: Open-Closed Principle

ocp를 지키기 위해 enum vs interface

작성

·

128

0

안녕하세요. 테스트 강의부터 좋은 강의 감사합니다.

강의를 보던 도중에 궁금한 점이 생겨서 질문드립니다.

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를 이용한 방식 중 어떤 기준으로 선택해야 하는지 궁금해 하시는 것 같습니다.

강의와 관련된 주제에 대해 유사한 질문과 답변들이 있으며, 이를 통해 특정 상황에서의 판단 기준을 이해하실 수 있을 것 같습니다.

질문 및 답변 링크:

  1. 메서드 네이밍 관련해서 질문 있습니다!:
    이 답변에서는 코드 네이밍과 관련된 이야기지만, 네이밍과 추상화가 주석 대신 코드 자체를 더 명확하게 만드는 중요한 방법이라는 것을 시사합니다.

  2. 추상화 레벨:
    이 답변에서 코드를 추상화하는 여러 방법과 그 기준에 대해 설명합니다.

  3. Beverage 인터페이스:
    Interface와 Abstract 클래스의 선택 기준에 대해 설명합니다. 해당 질문은 강의와 조금 다르지만, Interface 사용의 이유와 장점에 대해 잘 설명하고 있습니다.

간단한 설명:

  • Enum vs Interface:
    Enum은 고정된 상수 집합을 표현하는데 적합하지만, 새로운 상수를 추가하려면 해당 Enum 클래스 자체를 수정해야 합니다. 반면, Interface는 확장에 유리하며 새로운 구현체를 추가할 때 기존 코드를 수정하지 않고 확장이 가능합니다.

    • OCP 원칙:
      OCP 원칙에 따르면, 소프트웨어 개체는 확장에 열려 있어야 하며 변경에는 닫혀 있어야 합니다. 즉, 새로운 기능을 추가할 때 기존 코드를 수정하지 않고도 기능을 확장할 수 있어야 합니다. Interface를 사용하면 새로운 GameLevel을 추가할 때 각 구현체를 별도로 추가할 수 있어 OCP 원칙을 더 잘 만족할 수 있습니다.

참고 링크들을 살펴보신 후에도 궁금한 점이나 더 알고 싶은 내용이 있으시면 추가로 질문해 주세요!
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김태경님의 프로필 이미지
김태경

작성한 질문수

질문하기