TDD 시리즈의 5번째 글이다.
틈틈히 다음 단계의 과제를 진행하고 있는데, 몇일 전 받았던 피드백을 정리해보면 좋을 것 같아서 글을 쓴다.
시간이 많이 없어서 그냥 간단하게 쓰고 넘어가겠음...
이어지는 이전 글
이전 글에서도 작성했지만, 각 객체의 역할과 책임을 위와 같이 나누어놓은게 큰 도움이 되었다. 덕분에 기능을 추가하는데에 있어서 설계의 변경사항이 적었고 거기에 따라 긍정적인 피드백도 들을 수 있었다.
전에 이런 질문을 남긴 적이 있다.
RaceWinners 클래스 생성 시에, RaceRecords.value 대신 RaceRecods 클래스 자체를 넘겨주면 RaceWinners 의 역할이 축소될 것 같다는 의견을 주셨었는데요. 제 생각은 객체 자체를 넘기는게 어떤 면에서 역할을 축소시킬 수 있는 것인지 잘 이해가 되지 않습니다. 오히려 두 객체간의 결합도를 높이는게 아닌가? 라는 생각도 들어서요! 코멘트의 의도를 알 수 있을까요?
RaceWinner 라는 클래스가 있고, RaceRecords 라는 클래스가 있는데, 나는 이 Winner 클래스 생성을 위해 Records 클래스에서 value 를 추출해 넘겨주고 있었다. 여기서 준일님의 피드백은 Winner 클래스에 Records 객체 전체를 넘겨버리면, Winner 의 역할이 축소될 수 있지 않겠느냐는 것이었는데 뭔가 구체적으로 와닿지 않아서 위와 같이 질문을 남겼었다.
그에 대한 답변은 다음과 같다.
instance 자체를 넘기면서 Winners 클래스에서 진행하고 있던 유효성에 대한 검증을 다 제거해도 괜찮을 것 같다는 내용이었다. 처음에는 객체 자체를 의존하게 하는 것 같아서 서로간의 의존성이 높아지는게 아닌가 라는 의문이 들었는데, 답변에서 다 같은 도메인이니 큰 상관이 없을 것 같다는 의견도 주셨다.
하긴 생각해보면 애초에 설계 자체가 '자동차 게임' 이라는 하나의 기능만을 생각하고 고려한 것이기 때문에.. 그리고 RaceWinners 와 RaceRecords 라는 두 클래스가 애초에 서로에게 의존하도록 되어있기 때문에 인스턴스 자체를 넘겨도 크게 무리가 없는 것 같다.
---
어제의 라이브세션은 객체를 객체답게, 함수를 함수답게! 라는 주제로 진행되었다.
일단 콘솔을 기반으로 뷰를 배제한체 로직을 작성하다보니, 나를 포함한 여러 수강생분들이 객체지향, 디자인 패턴에 대해 많은 궁금증을 가지고 리뷰를 진행하고 있는듯 하다.
참고로 나도 준일님께 같은 질문을 여쭤봤었는데, 답은 요구사항에 빠르고 유연하게 대처할 수 있는 소프트웨어를 만드는 것이지 디자인 패턴 자체를 학습하고 적용하는게 목적은 아니니 상황에 맞게 잘 적용하되 기본을 중시히라는 내용이었다. 생각해보니 디자인 패턴도 결국은 어떤 문제를 해결하기 위해 등장한 것이니 만큼 원래의 목적을 생각하면 일단 문제를 해결한다. -> 문제를 잘 해결한다의 순서로 생각하는게 맞는 것 같다.
어제의 세션에서는 객체지향의 큰 특징들, 상속과 조합/ 캡슐화 / 다형성 / 추상화에 관련된 내용들로 하나씩 살펴보면서 진행이 되었다. 그러면서 각 객체가 자율적이고 협력적이게 마치 레고 블록을 조립하는 것과 같이 맞물릴 수 있어야 좋은 설계라는 내용이 나왔다.
또 인상깊었던 부분은 '단일 책임'에 대한 이야기. 이 단일 책임이 꼭 하나의 메서드, 하나의 기능만을 의미하는 것은 아니라는 내용이었다. 주요 동작 혹은 하나의 비즈니스를 책임지는 것이라면, 여러 기능을하는 메서드가 하나의 '비즈니스'라는 책임 아래 단일 책임으로 볼 수도 있다는 것. 이번에 로또 과제에서도 각 클래스들을 설계하면서 도대체 어디까지 역할과 책임을 나누어야 하는지 의문이 들었었는데 이를 비즈니스적인 관점에서 볼 수도 있겠다는 인사이트를 얻을 수 있었다.
그리고 상속과 조합도... 지금까지는 상속보다는 조합을 통해서 구현을 많이 한 것 같은데 뭔가 클래스가 가진 기능을 100% 유연하게 활용하지는 못했다는 생각이 든다. 그래도 생각이 너무 많으면 과제 진도가 안나가기 때문에, 일단 돌아가게 만들고 다른 분들의 코드 그리고 다양한 객체 지향 예제들을 학습하면서 새로운 것들을 받아들일 필요가 있겠다.
'TDD, Cleancode with JavaScript' 카테고리의 다른 글
# 4 / 함께해요, 리팩토링 😇 + 사담 겸 푸념;; (2) | 2023.08.08 |
---|---|
# 3 / 일급 컬렉션이 머에영? (우적우적 🍿) (3) | 2023.08.01 |
# 2 / 어떤 과정으로 문제를 해결해 나갈 수 있을까. (4) | 2023.07.27 |
# 1 / OT. TDD 란 무엇인가. (0) | 2023.07.19 |