2018-3-28 TIL 객체의 타입에 관한 생각들...

Lotto프로젝트

  • 현재 로또프로그램을 구현을 하고 있다. 로또프로그램을 구현을 하면서 수동구매를 통해서 입력을 받을 때, lottos에 수동구매를 한 값이 Null이 들어가는 데, 그것을 수정하고 느낀점에 대해서 이야기를 하려고한다. ``` public class Lotto { private List lotto; private List right; static ArrayList counts = new ArrayList<>(); static List numbers; static { numbers = init(); }

    public Lotto() { Collections.shuffle(numbers); lotto = new ArrayList<>(); for (int i = 0; i < 6; i++) { lotto.add(numbers.get(i)); } }

    public Lotto(String string) { right = Arrays.asList(string.split(“,”)); lotto = new ArrayList<>(); for (String s: right) { lotto.add(Integer.parseInt(s)); } }

    public static List init() { List values = new ArrayList<>(); for (int i = 1; i < 46; i++) { values.add(i); } return values; }

    public List getLotto() { return lotto; }

    public List getRight() { return right; } }

```

오늘의 느낀점

  • 수동구매를 하면서 아무생각없이?는 아니고 깊이 생각을 안했던거같다. 객체의 타입에 대해서… 왜냐하면 자동구매의 경우 Lotto생성자에서 보듯이 List lotto의 타입으로 값들이 저장이 된다. 하지만 수동구매를 하면 List lottos에 수동구매를 입력한 값들이 들어가지 않았다. 어제 오늘 그것에 대해서 고민을 하다가.. 특히 어제는 그것이 해결이 안되서 많이 고민을 하다가 덮었던 기억이 난다. 그러다가 어제 클래스설계에 관해서 생각을 하면서 곰곰히 Lotto Class를 내가 어떻게 설계를 했는지에 대해서 생각을 하게 됬다. 위에서 보듯이 Lotto클래스는 List lotto와 List right으로 크게 구분을 할 수가 있다. 당첨번호를 입력을 했을때 이전에 이미 Integer.parseInt(right.get(index))를 통해서 lotts에 있는 lottos객체의 값들과 비교를 진행을 했었다. 하지만 수동구매를 하게 되면 Lotto생성자에서 Lotto(String string)을 따라서 로또를 생성을 하게 된다. 그렇게 되면 이전에는 List의 형태로 lotto객체가 생성이 됬기에, List getLotto()를 했을때, 값들이 null이 나왔던것이다. 혹시하는 마음에 생성자를 수정을 하기전에, getLotto()와 getRight() 메소드를 통해서 로또값을 호출을 해봤었다. List이 였기에, 당연히 getLotto() 메소드가 호출이 안됬던 건데... 그걸 왜 안되냐고 .. 한탄을 했으니.. 타입에 관한것을 고려를 안했기때문이다. 나는 단순이 Lotto객체이면 되지라는 생각을 했었지 그 Lotto클래스안에 있는 설계까지는 보지 못했던 것이다. 위와 같이 수정을 하니까 scanner를 통해서 입력을 받는 수동로또가 lottos에 잘 전달이 되었고. 로또프로젝트의 3단계는 우선 구현은 되었다. 로또프로젝트를 하면서 객체지향에 대해서 객체설계에 대해서 고민을 더 많이 하게되는것 같다. 객체지향적으로 점점 고민을 하려고하는 모습은 좋은거같다.
Written on March 28, 2018