리팩토링과 기능 추가에 대한 질문
게임의 난이도를 추가하는 부분에서
행과 열의 사이즈가 상수로 고정되어 있기 때문에 확장에 닫혀있어 OCP가 충족되지 않는 상태라고 하셨는데
기능 추가와 리팩토링에 대해 질문이 있습니다.
1) GameLevel인터페이스와 각각의 난이도별 클래스를 작성하는 과정은 OCP를 만족하는 코드로 바꾸는 과정이니까 '리팩토링으로 기능 추가를 용이하게 하는 과정'이라고 봐야하나요?
2) 사용자에게 난이도를 선택할수 있게 물어보는 부분을 작성한다면 그 과정을 기능 추가로 보고 그 이전 단계까지는 리팩토링인건가요?
3) 보통 리팩토링과 기능 추가가 자연스레 같이 이뤄지는 경우에는 커밋을 분리하는지 한 번에 하는지도 궁금합니다.
답변 2
0
안녕하세요, spacebar 님!
1) GameLevel인터페이스와 각각의 난이도별 클래스를 작성하는 과정은 OCP를 만족하는 코드로 바꾸는 과정이니까 '리팩토링으로 기능 추가를 용이하게 하는 과정'이라고 봐야하나요?
네, 맞습니다. 기존 기능이 변경되지 않았으니, 리팩토링이 맞아요 ㅎㅎ
2) 사용자에게 난이도를 선택할수 있게 물어보는 부분을 작성한다면 그 과정을 기능 추가로 보고 그 이전 단계까지는 리팩토링인건가요?
넵 기존에 없던 새로운 기능이니, 기능 추가가 맞습니다.
3) 보통 리팩토링과 기능 추가가 자연스레 같이 이뤄지는 경우에는 커밋을 분리하는지 한 번에 하는지도 궁금합니다.
상황에 따라 다를 수 있지만, 원칙적으로는 구분해서 커밋하는 것이 좋습니다.
기능 추가를 위한 어쩔 수 없는 리팩토링이라면 같은 커밋으로 묶는 것이 자연스러울 때도 있고요. 반대로 리팩토링 자체가 너무 영향범위가 클 경우, 끊어서 가는 것도 중요합니다.
도움이 되셨기를 바랍니다.
감사합니다 🙂
0
안녕하세요, 인프런 AI 인턴입니다. spacebar님.
리팩토링과 기능 추가에 관한 질문을 주셨네요. 이러한 프로세스에 대해 이해하기 위해 유사한 질문과 답변을 찾아보았습니다. 또한, 질문의 핵심에 대한 간단한 설명도 드리겠습니다.
질문에 대한 간단한 설명:
OCP를 만족하는 코드로의 리팩토링:
- GameLevel 인터페이스와 난이도별 클래스를 추가하는 것은 확장 가능한 구조를 만들기 위한 리팩토링의 일환입니다. 이를 통해 새로운 난이도를 추가할 때 기존 코드를 수정할 필요 없이 클래스를 추가하기만 하면 되므로 OCP(개방-폐쇄 원칙)를 만족합니다. 이는 리팩토링을 통해 향후 기능 추가가 용이하게 하는 과정입니다.
- GameLevel 인터페이스와 난이도별 클래스를 추가하는 것은 확장 가능한 구조를 만들기 위한 리팩토링의 일환입니다. 이를 통해 새로운 난이도를 추가할 때 기존 코드를 수정할 필요 없이 클래스를 추가하기만 하면 되므로 OCP(개방-폐쇄 원칙)를 만족합니다. 이는 리팩토링을 통해 향후 기능 추가가 용이하게 하는 과정입니다.
사용자 인터페이스 부분의 기능 추가:
- 사용자가 난이도를 선택할 수 있는 기능 구현은 순수한 기능 추가로 볼 수 있습니다. 리팩토링은 기능의 변화를 가져오지 않으면서 기존 코드를 개선하는 것이 목적이기 때문에, 사용자가 난이도를 선택하는 로직은 기능 추가에 해당합니다.
- 사용자가 난이도를 선택할 수 있는 기능 구현은 순수한 기능 추가로 볼 수 있습니다. 리팩토링은 기능의 변화를 가져오지 않으면서 기존 코드를 개선하는 것이 목적이기 때문에, 사용자가 난이도를 선택하는 로직은 기능 추가에 해당합니다.
리팩토링과 기능 추가의 커밋 관리:
- 일반적으로 리팩토링과 기능 추가는 별도의 커밋으로 관리하는 것이 좋습니다. 이렇게 하면 코드의 변화를 추적하기 쉽고, 문제가 발생했을 때 수정하기 용이합니다. 리팩토링은 코드의 구조 변경에 집중하고, 기능 추가는 기능의 유효성과 동작에 집중하는 것이 바람직합니다.
- 일반적으로 리팩토링과 기능 추가는 별도의 커밋으로 관리하는 것이 좋습니다. 이렇게 하면 코드의 변화를 추적하기 쉽고, 문제가 발생했을 때 수정하기 용이합니다. 리팩토링은 코드의 구조 변경에 집중하고, 기능 추가는 기능의 유효성과 동작에 집중하는 것이 바람직합니다.
관련 질문:
이와 같은 실천을 통해 코드 관리가 보다 효율적이고 안정적으로 이루어질 수 있습니다. 위 링크된 질문과 답변도 도움이 될 수 있으니 참고해 보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
[강의 질문] 메서드 선언부
0
90
1
[강의 질문] 메서드와 추상화
0
61
2
DIP 개념에 대한 질문입니다.
0
64
1
만약 보드를 이용한 게임의 종류가 더 다양해진다면 어떻게 될 수 있을지에 대한 고민
0
86
2
DIP 설명 후반부에 IOC에 대한 질문 드립니다.
0
79
2
안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?!
0
71
1
안녕하세요 메서드명 때문에 고민이 있어서 질문드립니다.
1
64
2
자바 record 사용에 대해서 질문 드립니다!
0
128
2
강의 내용 정리 및 자료 제작 툴 문의 드립니다.
0
136
2
사용할 변수 가깝게 선언하기 질문
0
93
1
오버 엔지니어링
0
149
2
학습용 java/spring 오픈소스 추천
1
367
2
중복된 메서드 줄이는 방법
0
184
2
MarketPlace에서 Sonarlint 검색이 안됩니다.
0
417
3
isLandMineCell() 메서드 질문
0
209
1
Cell[][]BOARD 매개변수받기
0
153
2
ConsoleInputHandler에서 왜 final붙여야 하는지
0
193
1
정적 생성자 메서드 of, from
0
264
2
Getter관해서
0
148
3
이름 바꾸기
0
129
2
stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??
0
164
2
현업에서 ISP를 도입하려는데 인터페이스 설계에 있어서 의문이 있습니다.
0
208
2
null을 가질 수 있는 값을 인자로 넘겨야 하는 경우
0
252
3
리팩토링을 하고 난 뒤 다시보면 오히려 더 복잡해 보이는것 같은 느낌입니다..
0
254
2





