안녕하세요, 강의 잘 듣고 있습니다. 객체 비교에 대한 설명 중, ‘동일성(identity)’과 ‘동등성(equality)’ 의 개념이 일반적인 프로그래밍 용어와 다르게 설명된 부분이 있는 것 같아 확인 요청드립니다. 강의에서 설명된 내용은 다음과 같습니다: (4-1, 4-2에서) 속성 기반 ‘동일성(equality)’ 모든 변수가 동일한 객체 참조 -> ‘동등성(identical)’ 하지만 일반적으로 다음과 같이 구분됩니다: 동일성: 참조가 같다, identical, 메모리 상에서 같은 객체를 가리킴 동등성: 값이 같다, equality, 서로 다른 객체여도 내용이 같다. 한 번 확인해주시면 감사드리겠습니다. 감사합니다!
안녕하세요. 강의 너무 잘 듣고 있습니다. 궁금한 점이 생겨 질문을 드리게 되었는데요. 3-1강의 1:00에서 데이터가 하나의 모듈 안에 모여있으면 코드를 수정하기가 어렵다고 하셨는데, 이 부분이 잘 이해가 되지 않습니다. 지금까지 데이터와 프로세스를 서로 다른 모듈로 분리시킨 절차적인 방식에서 프로세스 로직을 데이터를 구현한 모듈로 이동시켜 하나의 모듈 안에 넣는 작업을 했는데, 이와 모순되는 것 같아서 혼동이 왔습니다. 말씀하신 내용이 모든 로직과 데이터를 설계없이 하나의 모듈에 모두 넣은 경우를 말씀하시는 걸까요? 감사합니다 :)
같은 요청이 여러 번 들어와도 한 번만 처리하는 것. 여러 번의 요청이 들어왔을 때 이 요청이 '같은 요청' 이라는 것을 정확하게 판단할 수가 있을까요? 예를 들어 똑같은 점포의 똑같은 POS에서 똑같은 액수의 포인트 적립/사용이 두 번 들어왔을 때, 이 두 요청이 각자 다른 요청인지? 클라이언트 단의 문제로 인해 같은 요청을 두 번 보낸 것인지? 정확하게 판단할 수 있는 걸까요? 두 요청의 도착 시간 간격이 매우 짧을 때 -> 일반적인 상황에서 같은 동작이라고 판단할 수야 있겠지만.. 매우 빠르게 요청을 계속해서 받아야 하는 상황이라면? 도메인 특성에 따라 같은 요청임을 판단할 수 있는 기준이나 상황이 달라지기야 하겠지만 정확하게 보장 받을 수 있는 기준은 존재하기 어렵지 않나 하는 생각이 듭니다. 실제 사례를 통해 예시를 들어주실 수 있는 게 있을까요?
이 그림 자체의 문제라기보다 도출되는 과정의 문제인데요. 과정을 보면 JsonReader와 CsvReader의 코드를 관찰한다. 공통점을 발견한다. 상위모듈에 그 공통점을 기술한다. 이렇게 했단 말이죠. 헌데 이건 하위모듈의 구현상의 공통점으로 xml리더나 html리더를 만들 때도 그 공통점이 일어난다고 보장할 수는 없을 거에요. 특히 이 코드는 전적으로 로컬파일시스템에서 읽을 때나 readLines가 일치하지 원격파일 리소스에서 읽어 들일 때는 그렇지도 않죠. 즉 하위 구현에서 얼마든지 공통점은 달라질 수 있는데 그걸 단단한 상위모듈에 모아서 정의해도 되냐는 것입니다. 저는 인터페이스까지는 몰라도 추상클래스는 하위모듈에 있어야한다고 생각이 듭니다.
이걸 정말 실무에서 실현하시는지 궁금해요. 이건 뭐랄까 정말 이론적인 얘기 같아요. 이 예제가 아주 적절한데, 보통 저런 구조의 별도 모듈에 구현되는 하위수준의 기능은 라이브러리이거나 스탠드얼론 생태계를 갖는게 일반적이죠. 이건 실무적으로 보면 잭슨이 우리회사 인터페이스에 따라서 만들어져야한다 라고 말하는 것에 가까운 느낌이랄까, 저는 실무적에서 기능 모듈의 인터페이스가 도메인 모듈에 소속되게 만든 경험이 아예 없는 거 같아요. 소시적에 이론 따라 몇 번 해봤는데 완전 별로였거든요.
5-1. 객체 구현하기 (2:16) 질문: reserve 함수 구현 시 Movie가 아래 처럼 전달될 수 도 있다고 생각했습니다. 생각 1 (함수 인자로 Movie 전달): public Reservation reserve (Movie movie...) { ... } 생각 2 (Movie Id를 전달 받고, 함수 내부에서 Movie 검색) 설계 관점에서 이러한 구현과 기존 구현은 어떻게 다르다고 이해할 수 있을까요? 감사합니다. 참조 (기존 구현된 코드): public class Screening { private Movie movie; public Reservation reserve (Customer customer, int audienceCount) { Money fee = movie.calculateFee(this).times(audienceCount); return new Reservation(customer, this, audienceCount, fee); } }
2-3. 데이터와 프로세스 통합하기 6페이지 동영상 강의 1:25 원문: Shift or Responsibility 제안: Shift of Responsibility 영상의 흐름과 내용에서 중요한 부분은 아니지만, 정말 훌륭한 강의 자료에 조금이나마 기여하고 싶은 마음에 제보 드립니다. 감사합니다.
player.currentRoom() 까지는 디미터 위반이 아니지만 player.currentRoom().name()이나 description()은 디미터 위반인거 같아요. 특히 그 다음 장표에서 player의 내부 생태계에 Room을 포함한 그림이 나오는데 Room의 변화가 Game의 수정을 유발하니까요.