woowacourse 5기

[우아한테크코스] 3주차 블랙잭 회고

자바생 2023. 3. 25. 22:04
728x90

객체지향적인 설계 도전

 

블랙잭 미션을 시작하기 전에 `객체지향의 사실과 오해(이하 객사오)`라는 책을 다 읽었습니다.

그래서 이번 미션에서는 객사오에서 읽은 "객체지향적인 설계를 최대한 실천해보자"라는 다짐을 하고 미션에 임했습니다.

패드와 칠판에 요구사항을 작성하고 분석하며, 필요한 메시지 목록들, 즉, 퍼블릭 인터페이스를 적었습니다. 그리고 해당 메시지를 처리할 수 있는 적절한 역할과 책임을 가진 객체들에게 할당했습니다.

가끔 "구현은 어떻게 하지?"라는 생각을 했습니다. 책에서는 구현 부분에 대한 것은 나중에 생각하고 먼저 메시지들을 정의하고 적절한 객체에 할당하는 게 먼저라고 했습니다.

 

그래서 최대한 각 기능에 따라 퍼블릭 인터페이스를 정의하고 구현하기 시작했습니다.

아래 사진은 제가 칠판에 작성했던 설계도(?) 입니다.

 

 

이렇게 설계를 하면서 확실한 장단점을 느낄 수 있었습니다.

 

장점

 

역할과 책임이 적절하게 할당되면서 코드에 대한 방향성을 잃지 않는다.

큰 기능을 구현할 때, 제대로 된 설계 없이 코드를 작성하다가 길을 잃은 적이 많았습니다.

하지만 설계라는 '길'이 있기 때문에 전과 같은 일은 벌어지지 않았습니다.

 

변경에 대한 사이드 이펙트가 최소화된다.

역할과 책임이 객체에게 적절하게 할당돼있고, 최소한의 기능으로 나눠져 있기 때문에 변경에 대한 사이드 이펙트가 최소화됩니다.

그리고 변경할 때, "어느 클래스에서 수정해야 하지?"라는 고민이 전보다 적어졌습니다. 왜냐하면 객체가 어떤 책임을 가지고 있는지 알고 있으니까요.

 

구현 속도가 빠르다.

이번 블랙잭 미션에서는 설계가 제대로 됐는지, 이전보다 설계+구현 속도가 전보다 빨라졌습니다. (굳)

 

단점

 

설계를 자세히 하다 보니 설계 시간이 오래 걸린다.

설계를 자세히 하니 오래 걸리는 건 당연합니다. 하지만 설계+구현 시간에 있어서는 이점이 있으므로 큰 단점이라고 생각 들지 않습니다.

 

구현 중에 설계가 바뀔 수 있다.

머릿속에서 "설계를 하면서 어떻게 구현해야겠다"라는 생각이 바로 떠오르지 않기 때문에 설계가 정확하지 않을 수 있습니다.

그래서 구현하면서 "이거 안 되겠는데?, 이거 맞는데 왜 안 되지?"라는 생각을 자주 하게 됩니다.

구현이 맞으면 좋지만, 만약 오랫동안 구현해 놓은 것이 마지막에 아닌 것을 알게 되면 시간이 배로 걸리게 됩니다.

설계 다시 -> 구현,,

 

느낀 점

 

객체지향 설계를 통해 느낀 점은 책임과 역할을 적절한 객체에 할당하는 행위는 바람직하다고 생각합니다. 

왜냐하면 '객체지향'이기 때문이죠.

 

처음에 책 읽을 땐 "무슨 소리지,,?"라는 생각을 자주 했습니다. 하지만 우테코 미션을 하면서 책에 있는 내용을 코드에 적용해 보니 점점 책과 제 자신이 소통하는 듯한 느낌을 받았습니다

. 책에서 "~~ 한 점이 힘들다, ~~한 설계가 중요하다"라고 하면,

혼자서 "맞다. 그랬었지. 나도 그때 좋았는데, 힘들었는데"라며 공감할 수 있었습니다.

 

"남들이 책 좋다고 해서 그렇게 느끼는 거 아냐?"라고 하실 수 있습니다. 솔직하게 말하면 전 객사오 책을 완독 하는데 3번 실패했습니다.

4장 역할, 책임, 협력 단원이 이해되지 않더니, 5장에 들어서면서 항상 포기했습니다. 제대로 이해되지 않은 상태로 5장에 넘어가서 내용이 겉돌았기 때문입니다.

 

이번 4번째 도전에서는 우테코에서 진행한 자동차 경주, 사다리 게임에서 경혐했던 점을 객사오와 공감하며,

블랙잭에 적용함으로써 객사오의 책 내용을 "일부" 흡수했다고 생각합니다.

 

점점 저만의 객체지향 세계를 짓고 있는 느낌이 듭니다. 그래서 세계를 완공하기 위해 오브젝트 책을 읽고 있습니다.

 

마지막으로 블랙잭 미션을 하면서 리뷰어님의 칭찬 글입니다!! 굳

728x90