3주차의 과제 

https://github.com/woowacourse-precourse/javascript-lotto

 

GitHub - woowacourse-precourse/javascript-lotto: 로또 미션을 진행하는 저장소

로또 미션을 진행하는 저장소. Contribute to woowacourse-precourse/javascript-lotto development by creating an account on GitHub.

github.com

 

완전 단방향으로 진행되는 게임이라서 예외처리 할만한게 많이 없었다고 해야할까요.

우테코 과정을 하면서 느끼는 거지만 전체적인 프로그래밍을 두서 없이 기능만 만들고 있다는게 많이 느껴졌습니다.

일단 배웠던 점을 간단히 적어보겠습니다. 

 

OOP의 개념

상태를 관리해야하는 3가지의 상태를 나눠서 의인화와 단일책임원칙을 생각하면서 클래스로 나눠보았습니다.  이 게임에서는 Player, Lotto, Machine으로 나누었고 각각 캡슐화를 적용해서 상태를 getter와 setter로만 접근할 수 있도록 했습니다. 

 

 

정적메소드 

그리고 정적메소드라는 개념을 알게됬는데, 딥다이브에서 본 것 같지만 잘 기억은 못했던거 같습니다. 

즉 메소드앞에 static을 붙이게 되면 해당 메소드는 프로토타입 체인에 속해있지 않고 해당 클래스에 속하게 됩니다. 

그래서 우리가 흔히 아는 Math.max() 같은 메소드들도 다 정적 메소드라고 할 수 있다고 한다고 하더라고요.

그래서 저는 일단 제 모든 유틸 메소드들은 Static으로 고정했습니다. 

 

Error 커스터마이징 

2주차에서는 예외처리 상황마다 throw new Error(Message) 형태로 던져주었다면 이번에는 Error 객체를 상속받아서 예외처리를 손쉽게 제 입맛대로 바꿀 수 있었습니다. 그래서 이번에는 접두사 "[ERROR]"를 메세지에 하드코딩해서 넣어주는 것이 아닌 이런식으로 진행을 하였습니다. 

 

https://ko.javascript.info/custom-errors

 

커스텀 에러와 에러 확장

 

ko.javascript.info

 

 

이번에 우테코 측에서 강조한 학습 목표 두가지가 있었습니다. 

 

 

일단 저는 앞서 말했듯이 의인화를 통해 클래스 3개를 나눈 상태였고, 로또 게임 자체에서 유틸의 성격을 가진 기능들을 합치도록 했습니다. 그리고 같은 유틸끼리는 같은 폴더에 넣어서 index로 묶어서 한번에 가져올 수 있도록 구성을 해보았습니다. 그리고 2주차때 제대로 상수를 객체화하여 사용 못했던것이 계속 기억에 남아서 더 이상 하드코드 하지않도록 constants도 만들어보았습니다. 

 

 

 

그리고 두번째 학습목표였던 도메인 로직에 대한 단위 테스트 작성은 처음에 어떤 말인지 잘 이해가 안갔었는데,

깃헙 디스커션에서 블로그 글을 공유해주셔서 잘 봐서 이해가 어느정도 갔었다.

 

https://velog.io/@eddy_song/domain-logic

 

비즈니스 로직, 도메인 로직이 도대체 뭐지?

🙄 내 앱은 아직 비즈니스가 아닌데요...?

velog.io

 

내가 이해하기로는 이번에 우테코 측에서는 Console.print에 찍혀나오는 그런 진행결과로써의 테스트말고, 어떤 값을 집어넣고의 발생할 수 있는 예외처리와 관련된 즉 '도메인' 로직을 단위테스트 하기를 원했던 것 같다.  또 나는 그게 유효성 검사라고 보기 때문에 이런식으로 작성을 했었습니다. 

 

 


 

3주 차 공통 피드백

비즈니스 로직과 UI 로직을 분리한다

비즈니스 로직과 UI 로직을 한 클래스가 담당하지 않도록 한다. 단일 책임의 원칙에도 위배된다.

 

 

이번주차에서는 이런 로직분리를 잘 해내지는 못한것 같다. 4주차부터는 최대한 MVC패턴에 따른 코드를 짜보려고 해야할 것같다. 
 
테스트 코드도 코드다

테스트 코드도 코드이므로 리팩터링을 통해 개선해나가야 한다. 특히 반복적으로 하는 부분을 중복되지 않게 만들어야 한다. 예를 들어 단순히 파라미터의 값만 바뀌는 경우라면 아래와 같이 테스트할 수 있다.

반복되는 코드가 많았었던 내 테스트 코드.. 다음 도메인 로직 테스트코드에서는 함수로 만들어 활용해보도록 하자.. 

 

 

아쉬운 점 

 

디자인 패턴을 인지하고 개발을 아직 잘 못하고 있습니다. 흔히들 MVC패턴으로 OOP에서 많이 작업하는 거 같은데, 역시 OOP 자체를 많이 접해보지 못한 저로써는 굉장히 아쉬움이 많은 주차였습니다. 자바스크립트에 관련해서 레퍼런스도 많이 없고 해서, 저 나름 대로 나눠본다고 나눴는데 점점 익숙한 함수형으로 가는 것 같아서 뭔가 쎄함을 계속 느끼네요. 

 

그리고 리팩토링 과정에서  한 부분이 막혀서 리팩토링을 하면 다른쪽이 가독성이 떨어지거나 계속 그러다보니까, 코드가 너무 지저분해 보인다는 점 ...?