Skip to content

Conversation

@Mo-bile
Copy link

@Mo-bile Mo-bile commented Dec 9, 2025

안녕하세요? 리뷰요청드립니다

프로그래밍 요구사항대로 하면서 점점 실무와 연결되는 느낌이 있었습니다! 좋은 과정 감사드립니다
요구조건이 몇 부분 모호해서 그런지(실무도 사실 그렇죠 😂) 개발하면서 생각보다 많은 시간이 소요되었네요
일단은 한번이라도 더 리뷰 요청드리고 다시 리팩터링 하는것이 바람직하다고 생각들어서 요청드립니다

다만 개발을 하면서 가장 고민되는 부분이 있었습니다.

  1. 무료인 경우와 유료인 경우를 구분하는 것인데요
    특히 무료인 경우 수강료와 정원을 0 으로 두어야할지 고민이 되었습니다.
    0 으로 두기에는 객체에 대한 도메인을 오염시킨다는 생각이 들었습니다.

그래서 null 이라는 것이 프로그램적으로는 위험할 수 있지만, 의미 그대로 존재하지 않는다 생각해서 null 로 이용했습니다
혹시 이렇게 접근하는게 괜찮을까요?

  1. 무료 유료를 구분하면서 ProvidePolicy 를 초기화 하는데 new ProvidePolicy() 빈 생성자인 경우를 무료로 정의했습니다.
    유료인 경우는 new ProvidePolicy(x, y) 인자가 있는 경우로 정의 했습니다.
    이렇게 접근하는 것이 개발하는 과정에서 계속 불편했는데요 이렇게 접근이 괜찮을까요?

아니면 고민하다가 전략패턴으로 도전해볼까 고민했는데, 오버엔지니어링이라 생각들어서 일단 시도 하지 않았습니다.

  1. 상위 객체 메서드부터 여러 단계의 하위 객체의 메서드까지 파라미터 터널링 이 몇부분 보이는데요 이부분도 걱정이됩니다.

감사합니다 👍

모재영 added 20 commits December 7, 2025 19:12
1. amount, pay 관련 자료형 int 에서 Long으로 변경
2. Session 에 session 찾는 메서드 추가
Copy link
Contributor

@javajigi javajigi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2단계는 역시나 테이블과 매핑하지 않아 작은 단위의 여러 객체로 분리 👍
전체적인 객체 설계와 단위 테스트 구현 잘 했네요.
그럼에도 불구하고 한번 더 고민해 봤으면 하는 부분이 있어 피드백 남겨요.

Q1. 무료인 경우와 유료인 경우를 구분하는 것인데요
특히 무료인 경우 수강료와 정원을 0 으로 두어야할지 고민이 되었습니다.
0 으로 두기에는 객체에 대한 도메인을 오염시킨다는 생각이 들었습니다.

그래서 null 이라는 것이 프로그램적으로는 위험할 수 있지만, 의미 그대로 존재하지 않는다 생각해서 null 로 이용했습니다
혹시 이렇게 접근하는게 괜찮을까요?

A1. null로 구현하기보다 null을 추상화한 Null Object를 추가해 보는 것은 어떨까요?
AI에게 Null Object에 대해 질문해 보고 피드백을 받아 적용해 볼 것을 추천합니다.

Q2. 무료 유료를 구분하면서 ProvidePolicy 를 초기화 하는데 new ProvidePolicy() 빈 생성자인 경우를 무료로 정의했습니다.
유료인 경우는 new ProvidePolicy(x, y) 인자가 있는 경우로 정의 했습니다.
이렇게 접근하는 것이 개발하는 과정에서 계속 불편했는데요 이렇게 접근이 괜찮을까요?

아니면 고민하다가 전략패턴으로 도전해볼까 고민했는데, 오버엔지니어링이라 생각들어서 일단 시도 하지 않았습니다.

A2. 무료 유료 구분에 따른 구분은 ProvideType 값에 따라 결정되어야 하지 않을까요?
생성자 유무로 판단하는 것은 적절해 보이지 않은 것 같아요.

Q3. 상위 객체 메서드부터 여러 단계의 하위 객체의 메서드까지 파라미터 터널링 이 몇부분 보이는데요 이부분도 걱정이됩니다.

A3. 피드백에도 남겼는데요.
상위 객체의 필드도 private으로 구현하고 메서드를 통해 접근할 것을 추천합니다.

모재영 added 9 commits December 10, 2025 09:41
1. Base를 추상 클래스로 구현하여 상속전용으로만 하고 직접 생성은 자식이 못하게 막음 (도메인 객체처럼 사용할 우려 막음)
2. Base 의 필드를 private 로 변경해 직접 수정 못하게 막음
1. type 검증은 enum 내부에서 직접 하게 변경
2. boolean 타입이 아닌데 is 로 시작한 메서드명 변경
1. 객체의 역할과 책임을 명확히 인지하기 위해 객체명 변경
2. Session 객체 필드 일부를 EnrollmentPolicy로 이관
모재영 added 2 commits December 12, 2025 22:06
@Mo-bile
Copy link
Author

Mo-bile commented Dec 12, 2025

안녕하세요?
알려 주신 부분을 숙지하고 이해하고 한땀한땀 적용하고 고민한다고 금번 피드백 요청은 시간이 소요된 것 같습니다.

말씀주신 Null object, 테스트 픽스쳐 줄이는 방법을 적용했습니다.
그러면서 롬복으로만 사용하던 빌더패턴을 구현해보면서 구체적으로 어떤 것인지 깨달았고, 팩토리 메서드의 중요성도 깨닫고, Null Object를 활용하면서 인터페이스 활용도 익힌것 같습니다. 감사합니다

질문 드립니다.
질문드리고 나서 혼자서 고민하다가 Builder 디렉토리 내 Free, Paid로 유사한 코드가 반복되는것을 통합하여 질문을 해결했습니다.
1. Bulder 디렉토리 내 Free, Paid로 나누어져 유사한 코드가 반복적으로 나오는데 괜찮을까요?
복잡한 객체의 테스트 데이터를 생성을 위해 Builder 디렉토리 안에 있습니다.
그런데 유료, 무료인 경우에 따라서 유사한 파일이 두개로 갈라지는데요
유사한 코드가 Free, Paid로 반복적으로 나오는데 괜찮을까요?

Copy link
Contributor

@javajigi javajigi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

피드백 반영 👍
도메인 객체 설계부터 접근하다보니 정말 많은 도메인 객체가 추가되었네요.
이 객체들이 어떻게 db와 매핑될지 궁금하네요.
가능하면 도메인 객체를 유지한 상태로 db와 매핑하는 것에 도전해 보면 좋겠습니다.

@javajigi javajigi merged commit fa5f35f into next-step:mo-bile Dec 13, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants