인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

spacebar님의 프로필 이미지
spacebar

작성한 질문수

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

OCP: Open-Closed Principle

리팩토링과 기능 추가에 대한 질문

해결된 질문

작성

·

132

0

게임의 난이도를 추가하는 부분에서

행과 열의 사이즈가 상수로 고정되어 있기 때문에 확장에 닫혀있어 OCP가 충족되지 않는 상태라고 하셨는데

기능 추가와 리팩토링에 대해 질문이 있습니다.

1) GameLevel인터페이스와 각각의 난이도별 클래스를 작성하는 과정은 OCP를 만족하는 코드로 바꾸는 과정이니까 '리팩토링으로 기능 추가를 용이하게 하는 과정'이라고 봐야하나요?

 

2) 사용자에게 난이도를 선택할수 있게 물어보는 부분을 작성한다면 그 과정을 기능 추가로 보고 그 이전 단계까지는 리팩토링인건가요?

 

3) 보통 리팩토링과 기능 추가가 자연스레 같이 이뤄지는 경우에는 커밋을 분리하는지 한 번에 하는지도 궁금합니다.

 

답변 2

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, spacebar 님!

 

1) GameLevel인터페이스와 각각의 난이도별 클래스를 작성하는 과정은 OCP를 만족하는 코드로 바꾸는 과정이니까 '리팩토링으로 기능 추가를 용이하게 하는 과정'이라고 봐야하나요?

네, 맞습니다. 기존 기능이 변경되지 않았으니, 리팩토링이 맞아요 ㅎㅎ

 

2) 사용자에게 난이도를 선택할수 있게 물어보는 부분을 작성한다면 그 과정을 기능 추가로 보고 그 이전 단계까지는 리팩토링인건가요?

넵 기존에 없던 새로운 기능이니, 기능 추가가 맞습니다.

 

3) 보통 리팩토링과 기능 추가가 자연스레 같이 이뤄지는 경우에는 커밋을 분리하는지 한 번에 하는지도 궁금합니다. 

상황에 따라 다를 수 있지만, 원칙적으로는 구분해서 커밋하는 것이 좋습니다.
기능 추가를 위한 어쩔 수 없는 리팩토링이라면 같은 커밋으로 묶는 것이 자연스러울 때도 있고요. 반대로 리팩토링 자체가 너무 영향범위가 클 경우, 끊어서 가는 것도 중요합니다.

도움이 되셨기를 바랍니다.
감사합니다 🙂

0

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

리팩토링과 기능 추가에 관한 질문을 주셨네요. 이러한 프로세스에 대해 이해하기 위해 유사한 질문과 답변을 찾아보았습니다. 또한, 질문의 핵심에 대한 간단한 설명도 드리겠습니다.

질문에 대한 간단한 설명:

  1. OCP를 만족하는 코드로의 리팩토링:

    • GameLevel 인터페이스와 난이도별 클래스를 추가하는 것은 확장 가능한 구조를 만들기 위한 리팩토링의 일환입니다. 이를 통해 새로운 난이도를 추가할 때 기존 코드를 수정할 필요 없이 클래스를 추가하기만 하면 되므로 OCP(개방-폐쇄 원칙)를 만족합니다. 이는 리팩토링을 통해 향후 기능 추가가 용이하게 하는 과정입니다.
  2. 사용자 인터페이스 부분의 기능 추가:

    • 사용자가 난이도를 선택할 수 있는 기능 구현은 순수한 기능 추가로 볼 수 있습니다. 리팩토링은 기능의 변화를 가져오지 않으면서 기존 코드를 개선하는 것이 목적이기 때문에, 사용자가 난이도를 선택하는 로직은 기능 추가에 해당합니다.
  3. 리팩토링과 기능 추가의 커밋 관리:

    • 일반적으로 리팩토링과 기능 추가는 별도의 커밋으로 관리하는 것이 좋습니다. 이렇게 하면 코드의 변화를 추적하기 쉽고, 문제가 발생했을 때 수정하기 용이합니다. 리팩토링은 코드의 구조 변경에 집중하고, 기능 추가는 기능의 유효성과 동작에 집중하는 것이 바람직합니다.

관련 질문:

이와 같은 실천을 통해 코드 관리가 보다 효율적이고 안정적으로 이루어질 수 있습니다. 위 링크된 질문과 답변도 도움이 될 수 있으니 참고해 보시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

spacebar님의 프로필 이미지
spacebar

작성한 질문수

질문하기