조종 다음은 개발
article thumbnail

 

서론

 

드디어 마지막, 4주 차 미션이 종료되었다.🥳🥳

 

이번 4주 차 미션은 크리스마스였다.

개인적으로 4주간 미션 중 가장 재미있었던 미션인 것 같다.🤩

요구사항이 많아서 조금 까다롭긴 했지만 메일 형식으로 미션을 주면서

실제 현업에 있는 개발자가 되어 요구사항을 파악하고 기능을 구현하는 느낌이 들었다.

그래서 시간 가는 줄도 모르고 기능을 구현했던 것 같다. 

 

https://github.com/woowacourse-precourse/java-christmas-6

 

GitHub - woowacourse-precourse/java-christmas-6

Contribute to woowacourse-precourse/java-christmas-6 development by creating an account on GitHub.

github.com

 

내가 작성한 미션은 비공개로 되어 있어서 어떻게 공유해야 할지는 아직 모르겠다..(코수타에서 알려준다고 했는데 아직 시간이 안 됐다.)
추후 방법이 생각나면 올려야겠다.

 

이번 4주 차에서는 지난 주차들과는 달리 디스코드에 코드 리뷰 글을 작성하지 않았다.


왜냐하면 미션 구현 전부터 밀린 코드 리뷰 요청글에 대한 압박 때문에 제대로 된 코드 리뷰를 드리지 못하고 있다고 생각했기 때문이다.
내 코드를 봐주기 위해 시간을 써주시는 분들한테 제대로 된 시간도 할애 못하고 대충 피드백을 드리는 것은 안드리는 것만 못하다고 생각했다.


그래서 이번에는 4주 차 미션 기능을 구현 완료한 이후에 리뷰 요청글을 올려주신들을 찾아서 리뷰를 드렸다.

 

아무튼 각설하고 이제 4주 차 미션에 대한 회고록을 작성해 보자 잇!

🤪 DTO가 있었는데요 없었습니다.

이번 4주 차의 학습 목표는 3주 차에서 이어서 클래스(객체) 분리였다.

DTO 를 활용하여 뷰와 도메인의 분리

특히 UI(뷰)와 도메인 로직을 분리하는 것이 핵심이었다.

public DecemberDate {
    private int dateAmount;

    public DecemberDate(int dateAmount) {
        this.dateAmount = dateAmount;
    }

    ...

    public int dateAmount() {
        return this.dateAmount;
    }
}

(실제로 코드랑은 차이가 있지만 DecemberDate를 간단하게 표현하면 위와 같다.)

이벤트 안내 메시지를 출력하는 메서드인데 예약 날짜가 필요했다.

그런데 내가 작성한 코드를 살펴보니까 OutputView에서 도메인 객체인 DecemberDate를 파라미터로 받아서 사용하고 있었다. (위 메서드를 호출하면 12월 26일에 우테코 식당에서 받을 이벤트 혜택 미리 보기! 와 같이 예약 날짜와 함께 이벤트 안내 메시지가 출력된다.)

 

아무튼, 위와 같이 UI에서 도메인을 가지고 출력하고 있는 것이다.
나는 이러면 도메인과 UI 가 분리되어 있지 않다고 생각했다.
왜냐하면 도메인 객체가 변경된다면 UI 도 같이 변경되어야 하기 때문이다.

public DecemberDate {
    private Date date;

    public DecemberDate(Date date) {
        this.date = date;
    }

    ...

    public Date getDate() {
        return this.date;
    }
}

예를 들어서 위와 같이 DecemberDate 가 가지고 있던 인스턴스 변수 타입이 int에서 Date로 변경된다면 어떨까?

변경된 도메인 객체에 맞게 OutputViewprintEventPreMessage 메서드도 코드의 수정이 필요하다.


즉, 도메인과 UI 가 분리되어 있다고 보기 힘든 것이다.

 

그래서 이를 해결하기 위해 DTO에 대해 알아보았고 정리해서 글을 포스팅도 해보았다.
DTO를 활용하면 도메인과 뷰의 의존성을 느슨하게 해 줄 수 있다는 것을 알게 되었다.

 

DTO 를 활용하지 않은 이유

그러면 이제 DTO를 활용해 볼까?? 했지만..

결론적으로 나는 DTO를 사용하지 않았다.

이유는 다음과 같다.

  1. 학습 목표는 UI와 도메인 '로직'의 분리이지 도메인 객체와 완전히 분리하는 것이 아니었다.
  2. 요구사항이 변경되지 않는 상태에서 DTO 객체의 등장은 코드 복잡성만 야기할 것 같았다.

학습 목표를 다시 한번 살펴보니까 도메인 객체와 분리하라는 말은 없었다.
도메인 로직은 도메인 객체 안에 있기 때문에 지금 상태로도 UI와 분리되어 있다고 볼 수 있다고 생각했다.
그리고 요구사항이 변경되지 않는 상태에서 DTO 객체의 등장은 오히려 코드의 복잡성만 올라가 가독성을 해칠 염려가 있다고 느껴졌다.

 

그래서 나는 DTO를 사용하지 않기로 결정했다..

 

물론 이게 정답은 아니라고 생각한다.
지금 상태로는 도메인 객체의 변경으로 뷰가 변경된다.
또한 DTO를 사용하는 이유로 도메인과 뷰의 의존성을 줄이는 것 외에도 민감한 데이터를 보호하는 등의 이유도 있다.
그래서 DTO를 사용하는 게 더 옳은 답일 수 있다.

 

그런데도 나는 가독성을 더 중요하게 생각해서 DTO를 사용하지 않는 방식을 선택했다.
다른 사람들은 어떻게 생각하는지 코드 리뷰를 통해 들어봐야겠다!ㅎㅎ😭

https://flight-developer-stroy.tistory.com/53

 

DTO 를 사용하는 이유

🎯 DTO 란?? DTO는 Data Transfer Object의 약자이다. DTO는 계층 간 데이터를 전달하기 위한 단순한 객체를 말한다. 계층 간 데이터를 전달하는 객체?? 이게 무슨말일까? MVC 패턴으로 애플리케이션을 개

flight-developer-stroy.tistory.com

 

🥸 제네릭과 함수형 인터페이스 활용

이번 주차에서는 제네릭과 함수형 인터페이스를 활용해 보았다.
3주 차 과제부터 프로그래밍 요구사항에 입력 과정에서 에러 발생 시 다시 입력받아야 했었다.

3주차 로또 미션 중 에러 발생시 재귀로 재입력 처리

그래서 3주 차 미션에서는 입력하는 함수마다 try-catch 문으로 감싸주었고 에러 발생 시 재귀로 처리해 주었다.

그런데 매번 입력 때마다 try-catch 문을 반복해서 적어주는 것이 여간 귀찮은 일이 아니었다.
그러다가 디스코드에서 현준님이 정리해 주신 함수형 인터페이스에 대해 알게 되었고 이를 4주 차에서 활용해기로 했다.

함수형 인터페이스를 활용하니까 하나의 try-catch 문으로 입력에 대한 예외 처리를 해줄 수 있었다.
아직 익숙하지는 않지만 앞으로도 자주 활용해 봐야겠다!ㅎㅎ😁

https://flight-developer-stroy.tistory.com/54

 

자바 - 제네릭(Generic)에 대해

⚽️ 제네릭(Generic) 이란? 제네릭이란 데이터 형식의 의존하지 않고 하나의 값이 여러 타입을 가질 수 있도록 하는 방법이다. 어떤 타입의 데이터를 사용할지는 외부에서 지정해 주면 된다. 이게

flight-developer-stroy.tistory.com

핵심 기능을 한 줄로!

혹시 준 코치님은 이 책을 읽으신건가??

4주 차 미션을 시작하기 앞서, 코수타에서 준 코치님이 한 줄로 핵심 기능을 정리해 보고 가장 핵심이 되는 기능부터 구현해 보라는 말씀을 해주였다. 그래서 나는 4주 차 기능 구현 목록들을 작성하고 나서 핵심 기능이 무엇일지 고민해 보았다.


내가 생각한 핵심 기능은 "이벤트 기간 동안 할인된 금액으로 고객의 예약을 처리한다."였다.

 

핵심 문장을 정하고 난 뒤 여기서 또 핵심 기능을 파악했다.
나는 할인된 금액을 계산하는 게 핵심 기능이라고 생각했다.

그래서 이 기능부터 구현하고 이후 추가적으로 다른 기능들을 덧붙여 갔다.

 

그런데 지금 와서 보니까 "예약을 처리한다" 보다는 “예약에 대한 할인 금액을 출력한다” 가 더 핵심 기능일 것 같다..ㅎㅎ😭
아직은 핵심 기능을 정리해 보는 실력이 부족한 것 같다.
계속해보면서 실력을 늘려가야겠다!

👍 최종 회고 👍

 

4주간의 프리코스가 이제 마무리되었다.
한 달간 정말 많은 것을 배우고 경험할 수 있었다.

코드 리뷰를 통해 서로의 코드를 피드백해 주고, 고민하고 있는 내용을 같이 나누고,  회고록을 통해 서로를 공감하고 격려하는 경험은
정말 소중한 경험이었다.

 

무엇보다 좋은 동료들을 만날 수 있는 것이 너무 좋았다.
역시 혼자 공부하는 것보다는 같이 공부하는 것이 최고인 것 같다.
만약 지금까지 혼자 공부하고 있던 사람들은 프리코스를 통해서 동료들의 중요성을 배울 수 있으면 좋을 것 같다.

 

한 달간 힘들면서도 가장 재미있었던 시간이었던 것 같다.
우테코에 들어간다면 이러한 경험을 더욱 진하게 할 수 있다니 너무 부러운 것 같다.


이 길에 나도 함께 한다면 좋겠다. 제발 제발🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏

 

한 달간 프리코스를 같이했던 동료분들과 운영진분들에게도 감사에 말씀드립니다!🙇‍♂️

profile

조종 다음은 개발

@타칸

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!