전체 글

항상 부족합니다. 목표를 이룰 때 까지 계속 달리겠습니다.
서론우아한 테크코스 프리코스 미션을 하면서 테스트 코드를 작성하던 도중, 테스트 코드를 다음과 같이 작성했었습니다. (최종 코드는 검증 로직을 다르게 했기 때문에 지금은 이 테스트 코드가 아예 있지 않습니다.)@Test@ParameterizedTest@ValueSource(strings = {"崔はлن", "?-bob"})void 한글과_알파벳_숫자를_제외한_모든_문자는_안된다(final String value) { // given & when Throwable exception = Assertions.assertThrows(IllegalArgumentException.class, () -> { Name name = Name.from(value); }); // then ..
서문 전통적인 경제학 > 인간은 이기적이며 합리적인 행동을 한다. 실제 실험 결과 > 인간은 이기적이며 합리적인 행동을 하지만, 다른 사람들과의 관계를 맺는 과정 속에서 인간은 본연의 특성을 배제하고 자신의 이익을 최소화하는 불합리한 선택을 한다. 즉 중요한 것은 인간 본연의 특성이 아니라 인간이 처한 환경 (타인과의 협력)이다. 객체지향의 세계에서도 협력이 객체의 행동 방식을 결정한다. 중요한 것은 객체들 간에 이뤄지는 협력이다. 협력 실제 상황에서의 협력은 다음과 같다. - 협력은 한 사람이 다른 사람에게 요청할 때 발생하게 된다. - 요청을 받은 사람은 자신의 방식으로 응답하게 된다. - 이때 요청을 받은 사람은 자신 말고도 다른 사람을 필요로 할 수도 있다. 그때는 그 사람에게도 새로운 요청이 전..
서문 시간이 지나도 사람들이 지하철을 문제없이 다닐 수 있는 이유는 직관적인 지하철 노선도가 있기 때문이다. 해리 벡 (Harry Beck)은 지하철을 이용하는 승객의 목적을 정확히 파악했다. (하나의 역에서 다른 역으로 이동하는 것) 해리 벡의 가장 위대한 업적은 지하철 노선을 추상화한 것이다. 추상화를 통한 복잡성 극복 현실에 있는 것들과 상호작용하기 위해서는 현실을 먼저 이해해야 하지만, 현실은 복잡한 것투성이다. 따라서 인간은 본능적으로 현실을 분해하고 단순화하는 전략을 따른다. 해리 벡의 지하철 노선도처럼 진정한 의미에서의 추상화는 현실에서 출발하되, 불필요한 부분을 도려가면서 사물의 놀라운 본질을 드러나게 하는 과정이다. 또한, 목적에 부합하여야 한다. 현상은 복잡하다. 법칙은 단순하다. 버릴..
서문 아기들의 막대기 실험 > 두 개의 막대기를 하나인 것처럼 보이도록 실험 사람은 태어난 지 얼마 안 된 시기부터 뚜렷한 경계를 가지고 함께 행동하는 물체를 하나의 개념으로 인지한다. 객체지향과 인지 능력 인간은 세상을 독립적으로 식별 가능한 객체의 집합으로 바라보기 때문에, 객체지향 또한 이해하기 쉬운 패러다임이다. 객체지향은 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다. 인간은 구체적인 것을 넘어서서 추상적인 것 까지도 객체로 인식할 수 있다. 오늘의 주문 내역과 어제의 주문 내역을 쉽게 구분할 수 있다. 인간은 최대한 더 단순한 객체들로 주변을 분해함으로써 세상을 이해하려고 노력한다. 따라서 객체는 인간이 분명하게 인지하고 구별할 수 있는 물리적, 개념적 경계를 지닌 것이다. 그러나 1..
서론 원시값 포장은 객체지향 생활체조로 유명한 소트웍스 앤솔러지에도 기록되어 있는 내용입니다. 원시값 포장을 하면 더욱 객체지향적으로 설계할 수 있다는데, 왜 그런 것일까요? 먼저 원시값 포장을 하기 전의 코드를 보겠습니다. public class Car { // 상수 등 기타 필드 private final String name; private Car(final String name) { this.name = name; } // 정적 팩터리 메서드 등 기타 다른 메서드들 public boolean isNameEqualTo(final String name) { return name.equals(this.name); } public String getName() { return this.name; } } 예..
DTO와 VO의 혼용 사례와 원인 구글링을 해 보면 사람들이 DTO와 VO를 혼용하여 쓰는 경우가 많습니다. 원인 core J2EE Patterns 책의 1판에서는 데이터 전달용 객체를 VO로 정의했지만, 2판부터는 혼동의 여지 때문에 TO로 재정의하였기 때문으로 추측됩니다. 그리고 현재 데이터 전달용 객체의 정의는 D를 붙여 DTO로 정의하고 있습니다. 혼동의 여지가 있어 수정한 정의가 오히려 혼동을 초래했습니다. 이름이 다른 만큼 구별해 보겠습니다. 결론 먼저!! DTO는 데이터 전달용이며, VO는 값 표현용입니다. DTO란? 정의 Data Transfer Object 데이터를 전달하기 위해 사용하는 객체 (계층 간 데이터를 전달)입니다. 데이터를 담아서 전달하는 바구니입니다. 특성 오직 getter..
dev_writer
Always Be Curious