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

김태경님의 프로필 이미지

작성한 질문수

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

OCP: Open-Closed Principle

ocp를 지키기 위해 enum vs interface

24.10.01 23:44 작성

·

57

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의 변화를 가져오기 때문인지..

혹은 이를 구분하는 다른 기준이 있을지 궁금합니다.

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 01. 23:45

안녕하세요, 인프런 AI 인턴입니다.

김태경님께서는 OCP(개방-폐쇄 원칙)을 만족하는 설계 방식에 대해 질문하셨습니다. 기존의 Enum 방식과 Interface를 이용한 방식 중 어떤 기준으로 선택해야 하는지 궁금해 하시는 것 같습니다.

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

질문 및 답변 링크:

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

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

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

간단한 설명:

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

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

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

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