티스토리 뷰

3주차 미션은 로또 미션이였다

 

자세한 미션의 내용과 필자의 소스를 보고싶다면 하단의 링크를 참조하면 된다.

 

https://github.com/0bliviat3/java-lotto-6

 

GitHub - 0bliviat3/java-lotto-6: 로또 미션을 진행하는 저장소

로또 미션을 진행하는 저장소. Contribute to 0bliviat3/java-lotto-6 development by creating an account on GitHub.

github.com

 

소스의 디렉토리 트리는 다음과 같다.

 

src  
├─main
│  └─java
│      ├─config
│      │      CountMessage.java
│      │      ErrorMessage.java
│      │      GameConfig.java
│      │      GameLauncher.java
│      │      LottoConst.java
│      │      OutputMessage.java
│      │      
│      ├─controller
│      │      GameController.java
│      │      
│      ├─domain
│      │      Lotto.java
│      │      WinningLotto.java
│      │      
│      ├─exception
│      │      InputException.java
│      │      
│      ├─lotto
│      │      Application.java
│      │      
│      ├─service
│      │      LottoService.java
│      │      
│      ├─util
│      │      LottoUtil.java
│      │      
│      ├─view
│      │      GameView.java
│      │      InputView.java
│      │      
│      └─VO
│              UserLottoVO.java
│              
└─test
    └─java
        ├─exception
        │      ExceptionTest.java
        │      
        ├─lotto
        │      ApplicationTest.java
        │      LottoTest.java
        │      WinningLottoTest.java
        │      
        ├─util
        │      LottoUtilTest.java
        │      
        └─view
                ViewTest.java

 

 

로또 미션을 진행하면서 가장 고민했던 부분들은 다음과 같다.

 

  • 예외 처리
  • 일급컬렉션
  • 객체 주입

 

1. 예외 처리

 

요구사항에 명시되어있듯 입력 중 예외상황이 발생하면 예외를 발생시킨뒤,

발생시점에서 다시 입력을 받도록한다라는 부분이 처음엔 많이 당황스럽게 했다.

 

그동안의 미션에서는 예외상황이라면 프로그램을 종료시키도록 미션이 주어졌는데

이번에는 예외를 발생시키고 다시 입력을 받아주어야 하기때문에 예외를 발생시키는 부분과

입력을 다시 받도록하기 위해 예외를 처리하는 부분을 고민해야 했기 때문이다.

 

한가지 예시를 들자면 로또 번호를 입력받을 때 입력형식에 어긋난다면 입력부에서 예외를 발생시키고

로또번호가 중복되게 입력을 받는다면 로또번호를 검증하는 부분에서 예외를 발생시키는게 맞단

생각이 들기 때문에 이런 고민을 하게되었던거 같다.

 

프로그램의 흐름이 입력을 받으면 컨트롤러에서 서비스로 넘기고 서비스에서 도메인으로 가는 흐름이고

예외처리후 다시 입력을 받기위해 입력부에서 예외처리를 진행했기 때문에 도메인 로직에서

예외가 발생한다면 입력부까지 예외를 던져줄수 있도록 설계해주어야 했다.

 

이런 세세한 부분들에서 고민을 많이 하고 그간 가볍게 사용해왔던 예외처리 구문에 대해 깊게 생각해볼

기회가 될수 있었던거 같다.

 

2. 일급 컬렉션

 

그동안 코드리뷰에서 심심치 않게 등장하던 일급컬렉션을 직접 미션에서 적용해야 했기 때문에

과연 일급컬렉션이 뭐고 왜 사용하는지에 대해 공부하는 시간을 가져야 했다.

 

간단히 내가 공부한 부분을 적어보자면 일급컬렉션을 사용하는 가장 큰 이유는 데이터의 불변성을

보장해주기 때문에 일급컬렉션을 사용한다는 것이였다.

 

개발트렌드는 점점 데이터의 불변성을 보장하는 방향으로 나아가고 있기때문에 반드시 숙지하면

좋을 내용이라 공부하고 적용하는것에 시간이 꽤 들었던거 같다.

사실 공부하고나서도 많이 모호한 부분들이 있었는데 미션을 진행하며 일급컬렌션이 어떤식으로

적용이 되는건지 알게 될수 있어 좋았던거 같다.

 

 

3. 객체 주입

 

지난 주차 미션의 코드리뷰에서 피드백을 받았던 내용이라 이번엔 반드시 적용해보자란 생각으로

객체주입에 대해 공부를 진행했었다. 그동안 흔히들 말하는 '돌아가는 쓰레기'를 만들땐 의존성을 전혀

생각하지 않은 개발을 진행하며 미션을 진행해왔다.

 

하나의 객체안에서 멤버변수로 인스턴스 변수를 갖게되는 상황이라면 객체를 메소드 내부에서

생성해 사용하는 방식을 고수해왔는데 이는 의존성을 높이는 개발이란걸 알게 되었고

의존성 주입이란 부분을 공부하며 객체주입 방식엔 여러가지가 있고 그중에서 생성자를 통한

객체주입 방식을 사용해야겠단 생각으로 인스턴스 변수가 있다면 최대한 생성자를 통해

주입받아 사용할수 있도록 설계후 하나의 객체 내부에서 모두 싱글턴 패턴을 적용해 주입받을수 있도록

설계해주었다.

사실 아직도 너무 어렵고 난해한 개념이라 제대로 구현한건지는 너무 의심스럽지만

그래도 이전에 비해 조금 나아진거 같단 생각이 든다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함