두 번째 미션 - 로또 미션 회고

Posted by yunki kim on March 11, 2022

1차 미션 - 자동 로또

  • 로또 구입 금액을 입력하면 구입 금액에 해당하는 로또를 발급해야 한다.
  • 로또 1장의 가격은 1000원이다.
  • 실행 결과:

2차 미션 - 수동 로또

  • 현재 로또 생성기는 자동 생성 기능만 제공한다. 사용자가 수동으로 추첨 번호를 입력할 수 있도록 해야 한다.
  • 입력한 금액, 자동 생성 숫자, 수동 생성 번호를 입력하도록 해야 한다.
  • 실행 결과:

  로또 미션을 진행하면서 primitive type에 대한 포장을 처음 해보았다. 값을 포장하더라도 컬렉션의 연산이 올바르게 진행됨을 보장하기 위해 equals와 hashCode 역시 처음으로 override 해보았고 올바른 override를 위해 이펙티브 자바 item10, 11을 읽었다.

  DTO역시 처음 사용해봤다. 리뷰어 한테 MVC에 대해 많은 피드백을 받아 이들을 수정하기 위해 많은 시간을 투자했고 결과적으로 좀 더 웹 MVC다운 구조를 갖게 되었다.

  전략패턴과 정적팩토리메서드를 기존에도 알고는 있었지만 실제로 적용해 본것은 이번이 처음이다. 이번 미션에서 이들을 실제로 활용해 보면서 해당 패턴 내용에 대해 한번 더 돌아보는 계기가 되었다. 또 한, Integer 내부에서 값을 관리하는 방식을 찾아보라는 피드백을 받아 Integer내부를 봤더니 -128~127 까지는 캐싱을 해서 사용하고 있더라. Double, Float, Boolean을 제외한 나머지 primitive type의 래퍼클래스 역시 Integer 처럼 해당 범위의 값을 캐싱해 사용하고 있다. 다만, Integer는 캐싱하는 최댓값을 vm option을 통해 설정할 수 있어 다른 래퍼클래스가 수행하는 캐싱 로직에 비해 좀 더 복잡하다.

  enum에 대해서도 공부를 했다. 기존에 사용하던 C++같은 언어에서도 enum이 존재하긴 했지만 단순히 상수를 정의하는 정도의 역할만 했었다. 하지만 자바의 enum은 그 자체가 객체고 java.lang.Enum<E> 클래스를 상속하기 때문에 enum 값과 관련된 여려 연산을 진행할 수 있다.

  마지막으로 스트림의 forEach의 올바른 사용에 대해서도 알게 되었다. 스트림은 본질적으로 함수형 프로그래밍을 위해 도입되었기 때문에 순수 함수를 사용해야 한다. 따라서 forEach는 단순히 값을 출력하는 용도로 사용해야지 외부의 값을 변경하는 용도로 사용하면 안된다.

  결과적으로 참 많은 것을 돌아보고 또 새로 배운 미션이였다. 두 번째 미션도 이리 배울게 많은데 나중에 가면 체화 시켜야 될 지식이 많아져서 체하진 않을까 걱정된다...

 

DTO:

https://tecoble.techcourse.co.kr/post/2021-04-25-dto-layer-scope/

 

DTO의 사용 범위에 대하여

1. DTO란? DTO(Data Transfer Object)란 계층간 데이터 교환을 위해 사용하는 객체(Java Beans)입니다. 간략하게 DTO의 구체적인 용례 및 필요성을 MVC 패턴을 통해 알아볼까요? ? 1.1. MVC 패턴 MVC…

tecoble.techcourse.co.kr

equals:

https://iskull-dev.tistory.com/260

 

Item 10. equals는 일반 규약을 지켜 재정의하라

  equals 메서드는 재정의하기 쉬워보이지만 잘못 정의하면 큰 문제가 된다. 따라서 문제를 회피하는 가장 쉬운 방법은 재정의를 하지 않는 거다. 그러면 euqals의 메서드 원형은 다음과 같기 때문

iskull-dev.tistory.com

hashCode:

https://iskull-dev.tistory.com/264

 

Item 11. equals를 재정의하려거든 hashCode도 재정의하라

equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. 그렇지 않으면 클래스 인스턴스를 HashMap 같은 컬랙션의 원소로 사용할 때 문제가 발생한다. 자바 레퍼런스의 Object에 있는 hashCode의

iskull-dev.tistory.com

forEach:

https://iskull-dev.tistory.com/263

 

Item 46. 스트림에서는 부작용 없는 함수를 사용하라

스트림 패러다임의 핵심은 계산을 일련의 변환(transformation)으로 재구성하는 것이다. 여기서 각 변환은 가능한 이전 단계의 결과를 받아서 처리하는 순수 함수여야 한다. 이를 위해서는 스트림

iskull-dev.tistory.com

enum:

https://iskull-dev.tistory.com/259

 

enum

자바 5 이전에는 enum이 존재하지 않았기 때문에 interface를 사용해 이를 대체했다. 하지만 이 방식은 다음과 같이 잘못된 연산을 할 수 있는 문제를 가지고 있었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17.

iskull-dev.tistory.com

정적 팩토리 메서드:

https://iskull-dev.tistory.com/222?category=904213 

 

팩토리 패턴(Factory Pattern)

팩토리 패턴은 인스턴스를 만드는 절차를 추상화한 패턴이다. 팩토리 패턴은 생성 패턴 중 하나로 생성패턴은 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해 준다. 생성

iskull-dev.tistory.com