til-20171109

2017.11.09 (목) 오늘의 T.I.L.

  • DI, Container 기반 로또 완성.
    • 잘 한 건지 못 한 건지…..
    • 게임 구현에 필요한 모든 객체를 LottoContainer에서 관리하고, LottoApplication에서 LottoContainer.execute() 를 실행하면 그 어떠한 추가 구현도 필요 없이 게임이 실행됨.
    • 재밌게 코딩한 과제였다. 지금까지 배운 모든 디자인 패턴과 DI 등의 개념을 집대성해본 재밌는 경험이었다.

로또 코드 중에서… 로또 숫자 입력을 인터페이스로 구현하고 Lotto 객체를 만들 때 해당 인터페이스를 주입시켰다. (맞는 표현인지?)

즉 아래와 같은 구현이 가능해졌다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@PurchaseStrategy
public class AutoLottoPurchaseStrategy implements LottoPurchaseStrategy{

@Override
public List<Integer> selectNumbers(Scanner scn) {
List<Integer> returnList = RandomUtils.getRandomLottoList(new Random());
Collections.sort(returnList);
System.out.println("자동선택 번호 : " + returnList);
return returnList;
}

@Override
public boolean supports(InputTypes type) {
return InputTypes.AUTO == type;
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class UserLotto {

private List<Integer> numbers;
private LottoPurchaseStrategy lps;
private Scanner scn;

private UserLotto() {}

public UserLotto(LottoPurchaseStrategy lps, Scanner scn) {
this.scn = scn;
this.lps = lps;
}

public List<Integer> getNumbers() {
return numbers;
}

public void setNumbers() {
this.numbers = lps.selectNumbers(scn);
}
}

이와 같이 중복코드를 엄청나게 줄이면서도 사용자의 입력에 따른 분기 처리를 else if나 switch 없이 구현할 수 있었다.
무엇보다 코딩량이 꽤 줄어들었고, 자동 / 수동 외에 다른 방식의 로또 생성 로직이 생긴다 해도 UserLotto는 한 줄도 건드리지 않은 채 구현을 바꿀 수 있게 되었다.

이번 구현을 통해 배운 점은 별도의 포스팅으로 정리할 예정.

  • REST API, 내일 포비와 즐겁게 이야기 나누기 위해 알고 있던 개념 정리하고 몇 가지 개념 더 잡아봄.

  • 니꼴라스의 React Native 강의, Redux 사용법 배움.

    • React Native 처음 배우면서 Props를 주고받는 방법을 접했을 때, 아 이거 애플리케이션의 복잡도가 높아지면 분명히 문제가 되겠구나 생각했는데, 역시 해결해주는 라이브러리가 있었다.

내일이면 벌써 4주차 마지막 날, 개인적으로는 다음주 수요일 즈음엔 트렐로 프로젝트에 진입할 수 있었으면 하는 바램이다.
언제 어떻게 쓰일지는 모르겠지만 자기소개서와 이력서도 말끔하게 한 번 써보고 심신을 가다듬는 계기로(….) 삼고자 한다.