게시글
질문&답변
(질문 글) Movie와 Customer의 위치
김태호님 안녕하세요.좋은 질문 남겨 주셔서 감사합니다. 🙂아래에 답변 드릴게요. 메서드 인자로 Movie 전달메서드 인자로 Movie를 전달받는 경우에는 메서드를 호출하는 클라이언트쪽에서 Movie를 조회해서 전달해줘야 합니다.만약 Screening 클래스 안에서 Movie를 인자로 전달받는 메서드가 많아진다면 Screening을 사용하는 클라이언트에서 맡아야 하는 책임이 늘어나겠죠.Screening의 메서드를 호출하는 모든 클라이언트에 조회 로직을 추가해야하기 때문에 Screening 클래스의 사용성이 저하되게 됩니다.Screening이 Movie와 빈번하게 협력해야 한다면 Screening이 Movie의 참조를 포함하도록 결합도를 높여서 Screening과 Movie 객체 그룹의 사용성을 높일 수 있을 겁니다.반면에 Screening의 메서드에서 Movie에 메시지를 전송하는 경우가 빈번하지 않고 결합도를 낮추는게 사용성 관점에서 더 중요하다면 말씀하신 것처럼 Movie를 인자로 전달하는 방법을 선택할 수 있습니다.이 경우에는 어떤 참조는 끊고 어떤 참조는 연결할 지에 대한 고민이 필요합니다. 메서드 인자로 id 전달메서드 인자로 id를 전달하면 Screening에서 Movie를 조회해야 합니다.이를 위해 Screening에 Movie를 조회하는 책임을 담당하는 객체를 의존성 주입하거나 서비스 로케이터 형태로 객체를 조회해야 합니다.이 경우 Screening이 조회를 위한 객체에 불필요하게 의존하게 되어 결합도가 높아지고, 결과적으로 단위 테스트 작성이 어려워지게 됩니다.따라서 가급적이면 도메인 로직을 처리하는 클래스에서 조회 로직을 분리하시는게 좋습니다. 예제의 경우처럼 Screening이 Movie를 꼭 참조로 연결할 필요는 없지만 응집도와 결합도 측면에서 트레이드오프를 하시는게 좋습니다.답변이 되었는지 모르겠네요. 🙂감사합니다.
- 1
- 2
- 12
질문&답변
(오타 제보) 2-3 문서 내 문구 수정 제안
김태호님 안녕하세요.강의에 대해 좋게 평가해 주시고 오타 제보해주셔서 감사합니다. 🙂제보해주신 내용 바탕으로 우선 pdf 학습 자료 수정해서 업로드해 두었습니다.동영상 인코딩은 조금 시간이 걸릴것 같은데 최대한 빠르게 수정해 두도록 하겠습니다.강의의 품질을 높이는데 도움주신 점 감사드립니다!
- 1
- 2
- 15
질문&답변
6-2 명령이라도 성공여부는 어떻게 하는 게 좋을까요
클라이언트 입장에서 메서드 실행이 종료되면 정상적으로 객체의 상태가 변경된 것입니다.Player 클래스의 move 메서드를 참고해 주세요. 🙂
- 0
- 2
- 33
질문&답변
6-1 room을 노출한 것도 디미터 위반 아님?
6-1 강의 후반부에 디미터 법칙의 의도 부분을 보시면 질문하신 내용이 나옵니다.강의 내용을 참고해주세요. 🙂
- 0
- 2
- 30
질문&답변
6-1 11:25초에 슬라이드가 뭔가 돌아간듯
확인헤 볼게요. 🙂
- 0
- 2
- 20
질문&답변
5-4 명령객체를 enum으로 하지 않을 이유가..
예제에서는 사용자가 입력하는 명령어와 다양하게 변할 수 있는 파라미터를 함께 처리헤야 하기 때문에 가변 데이터를 포함할 수 있는 record를 사용하고 있습니다.record를 사용할 때의 이점은 다음과 같습니다.데이터만 다르고 행동은 동일할 경우 하나의 record를 이용해서 로직을 통일할 수 있습니다.go north와 go east는 좌표만 다를 뿐 캐릭터를 이동시키는 로직은 동일합니다. 단지 방향에 따라 좌표에 더하거나 빼주는 값만 다릅니다. 따라서 direction을 속성으로 가지는 Move 레코드를 사용해서 이동 로직을 하나의 조건문으로(예제에서는 패턴 매칭을 사용했습니다) 처리하는게 유리하겠죠.텍스트 어드벤처 게임에서 다양한 사용자 입력을 처리하기에 유리합니다.record는 변하는 데이터를 포함할 수 있기 때문에 go north, go east, go west, go south처럼 다양하게 변하는 데이터를 포함하기에 좋습니다. Move라는 레코드를 선언하고 방향을 데이터로 포함하는게 동일한 로직으로 분기처리하게 되는 MOVE_NORTH, MOVE_EAST, MOVE_WEST, MOVE_SOUTH를 선언하는 것보다 수월합니다. 변경의 관점에서 다양한 사용자 입력 명령어를 처리하고 명령어별로 동일한 행동을 처리해야 한다는 점에서 enum보다 유리하다고 보시면 될것 같아요(이건 뒤의 아이템 처리 부분을 보시면 이해가 되실겁니다). 사용자가 명령어를 입력한다는 텍스트 어드벤처 도메인의 특성에 맞게 설계했다고 보시면 됩니다.패턴 매칭에 유리합니다.앞의 두 가지를 조합하면 명령어를 처리하기 위해 record와 가변 데이터를 조합하면 패턴 매칭을 이용해 로직을 편하게 처리할 수 있습니다.그리고 말씀하신 직렬화 이슈는 제가 정확하게 알지 못하지만 현재의 도메인에서는 직렬화에 대한 요구사항이 없기 때문에 불필요한 고려사항입니다.코드를 작성할 때마다 불필요한 제약을 고려해서 설계를 하게되면 코드가 필요 이상으로 복잡해지고 오버엔지니어링으로 이어진다는 점을 기억해 주세요. 🙂
- 0
- 2
- 33
질문&답변
3-2 roomAt추출 버그아닌가요
깃헙 소스와 동일하게 아래와 같이 수정했어요.private Room roomAt(int x, int y) { return rooms[x + y * width]; }동영상과 강의자료 모두 편집해서 다시 업로드했습니다.제보해 주셔서 감사합니다. 🙂
- 0
- 2
- 27
질문&답변
4-2강 음량 작음
4-2의 경우에는 편집 프로그램으로 4-1, 4-2와 비교해봤을 때 음량이 크게 차이는 없는데 이상하네요...일단 새로 인코딩해서 다시 올렸어요. 제보해 주셔서 감사합니다. 🙂
- 1
- 3
- 22
질문&답변
4-2 머니클래스의 사용 질문
조금 더 구체적으로 질문해 주시면 좋겠습니다. 🙂강의에서는 환율에 대한 요구사항이나 다른 통화를 처리해야 한다는 국제화에 대한 제약사항을 언급하지 않은 상태에서 한국에 대한 원화를 처리하는 값 객체로 구현한 상태인데요질문에서 궁금한 부분에 대해 답변을 주시면 제 의견을 말씀드릴게요.환율에 대한 요구사항이 없는 상황에서(currency라는 속성도 없구요) 환율과 무관한 won이라는 static 메서드를 사용하는게 어떤 문제가 있을까요?Money.doubleValue를 이용해서 won을 통해 Money를 만들었을 때의 구체적인 문제가 무엇이라고 생가하시나요?Money.value(long)라는 메서드를 사용하는게 값과 참조에 더 집중하게 만든다고 생각하시는 이유가 무엇일까요? ceil 메서드에서 won 메서드 대신 new Money를 사용한 것은 일관성 측면에서 제가 놓친것 같지만, 일관성을 제외하고 new Money를 직접 호출했을 때의 문제점이 어떤 것일까요?아마 질문 안에 담지 않으신 Hika Maeng님이 여러가지 가정이 있으실것 같은데요.제가 질문하신 내용에서 이런 부분을 정확하게 이해하지 못한 상태라 답변을 드리기 어렵습니다. 이 부분에 대해 답변 주시면 해당 문제점에 대한 제 생각을 말씀드릴 수 있을것 같아요. 🙂
- 1
- 3
- 37
질문&답변
4-2강 음량 작음
먼저 강의별로 음령을 조절한 이유는 목 상태가 좋지 않아서(조만간 치료를 받을 예정입니다 ㅠㅠ) 강의별로 목소리 톤이나 상태가 조금씩 다른데, 이 부분을 보정하려고 강의별로 조금씩 다르게 음성을 보정하다보니 강의별로 차이가 생겼습니다.볼륨을 크게 잡을 경우 듣기에 거북한 부분이 있더라구요.(변명은 안되겠지만... ㅠㅠ) 몇달에 걸쳐 재녹음을 반복했음애도 강의별로 목 상태에 따라 음량이 조금씩 다르게 나와 현재 상태로 출시할 수 밖에 없었네요개별 강의 단위는 괜찮으나 여러 강의를 연속적으로 들으시는 분들 입장에서 불편한 감이 있으실 수도 있어 이 부분은 전체적으로 다시 한번 보고 조정해 보겠습니다.강의를 들으실 때 불편하게 해드려 죄송합니다. ㅠㅠ아래 답변에서 말씀드린 것처럼 영상 재편집이 필요한 부분은 하나의 스레드에 모아 주시면 좋겠어요.여기에 답변으로 달아 놓으셔도 저한테 알람이 와서 확인이 가능합니다.편집에 대한 부분을 제보해주시는건 감사한 일이나 이후로 나오는 모든 이슈들을 생각나실 때마다 그때그때 개별 잘문으로 적어주시면 강의 내용에 대한 질문과 편집 이슈가 게시글 단위로 뒤섞여 유용한 정보를 찾으시는 분들께도 좋지 않은 경험을 제공하게 될것 같습니다. 이 부분은 정중히 부탁 드릴게요. 😃
- 1
- 3
- 22