오늘은 강의 내용을 바탕으로 개인 과제를 진행했다.
가장 신경을 쓴 부분은 최대한 객체지향을 이용해서 개발해보는 것이었다.
"최대한 객체지향을 이용해보자"라는 데서 출발을 했지만 여전히 버릇이 안 고쳐졌다.
안 좋은 버릇이 있다는 걸 깨달았다.
구현할 기능이 있으면 그 기능에 대해서 읽어보고 바로 개발하려고 한다.
성격이 급함.
이 버릇이 코딩테스트할 때만 문제인 줄 알았는데, 개발하다보니 전반적으로 적용하는 치명적인 문제점이었다.
과제 대부분이 그렇듯 기초 기능이 있으면 이걸 발전시키는 등의 과제가 있다.
기초 기능 구현에서 끝이 아니라 이 기능을 확장하거나 재사용 가능하도록 설계했는지 보는 과제인 것이다.
오늘 맞이한 문제는 그제와 어제 빠르게 만들었던 기초 기능을 재사용 가능하도록 바꿔줘야 했다.
첫 번째 씬에서 쓰던 것을 두 번째 씬에서도 쓸 수 있도록 해야했다.
물론 설계에 따라서 공통으로 쓰게할 수도 있겠지만 문제를 다시 보니 첫 번째와 두 번째 사용 방법이 미미하게 달랐다.
재사용 가능하도록 작업을 하다가 깨달은 점은
기존에 코딩 습관이 하나의 클래스에 너무 많은 기능을 갖도록 하고 있었다.
씬을 관리하는 기능을 하나 두고 여기에 작은 기능들을 같이 넣어둔 것이다.
당시에는 너무 작은 기능인데 굳이 분리해야하나 하고 작성한 것이 오늘 발목을 잡았다.
이렇게 구분이 안 된 기능들은 이 클래스 내에서 은연 중에 데이터와 로직이 매우 높은 결합도를 가졌다.
오전동안 이 코드들을 구분하고 분리하고 새로 설계하는데 시간을 다 썼다.
OOP에서 좋은 모듈은 낮은 결합도와 높은 응집도를 갖는다고 배웠다. (자격증 시험에서)
공부하는 중에는 되게 원론적이라고 생각하고 그냥 외웠는데 오늘 이 말의 의미를 깨달았다.
코드를 분리하다가 필드, 프로퍼티는 물론이고 메서드들도 서로 얽혀 있다는 걸 발견했다.
그러면서 데이터 파트 설계와 클래스 간의 관계를 더 정리하는 과정을 거쳤다.
물론 이렇게 분리 과정을 거쳐도 여전히 지저분한 느낌이 컸다.
저 커밋을 하는데 불필요한 에셋 지우는 걸 제외하고 33개의 스크립트와 프리팹이나 오브젝트를 만져댔다.
문제는 그러고도 이것저것 설계가 미완성된 부분이나 얽혀있던 부분들을 정리하는데 20개 이상 고쳤다.
고친 걸 또 고치는 등의 작업도 있었다.
명확한 해결법이 아직은 떠오르지 않는다.
다만 오늘 하면서 느낀 방향은 있어서 써본다.
뭘 만들지만 보지말고 이게 어떻게 이어질지, 연계되는 기능은 없는지 확인해봐야 한다.
확인이 끝나면 대략적으로라도 필요한 클래스를 두고 어떤 책임을 둬야하는지 정리해야한다.
그러다보면 클래스가 어떻게 서로 관계를 맺을지 생각을 정리할 수 있을것 같다.
오전 중에 대략적으로 생각을 정리하면서 써 놓은 메모
결합도가 높았던 이유는 하나의 클래스가 너무 많은 기능이나 책임을 포함했기 때문이다.
이 부분이 구현할 때는 StartScene.cs에 다 들어 있었다.
오전동안 이 클래스를
StartScene.cs, PlayerCharacterSelector.cs, PlayerNameEditor.cs
이렇게 3개로 분리했다.
우선 급한대로 분리하면서 대략적으로 용도를 구분했다.
이 부분은 시간이 나면 튜터님께 여쭤보면서 설계하는 법을 좀 더 배워야겠다.
#내일배움캠프 #스파르타내일배움캠프 #스파르타내일배움캠프TIL