엔지니어링/설계
오브젝트 1장
오브젝트 1장
2024.01.10정리 1장 '객체, 설계’에서는 티켓 판매 시스템이라는 간단한 도메인을 예로 들어 책의 전체적인 주제를 함축해서 전달한다. 1장에서 소개하는 용어와 개념들이 이해되지 않더라도 너무 걱정하지 않았으면 한다. 이어지는 장들을 읽다 보면 자연스럽게 1장에서 소개한 내용들이 익숙하게 느껴질 것이다. 인상적인 부분 아무것도 없는 상태에서 이론을 정립하기 보다는 실무를 관찰한 결과를 바탕으로 이론을 정립하는 것이 최선이다. (p7) -> 이론만 배워서는 이해할 수 있는 것에 한계가 있다. 이론 학습없이 실무만 한다면 누군가 동일한 문제를 이미 겪고 여러 해결 방법을 시도하여 얻은 꿀팁들을 얻지 못한채로 우물 안 개구리처럼 일할 것이다. 그래서 실무와 이론 학습은 항상 병행되어야 한다고 생각한다. 객체는 다른 객체와..
디미터 법칙(Law of Demeter)과 묻지 말고 시켜라(Tell, Don’t Ask)
디미터 법칙(Law of Demeter)과 묻지 말고 시켜라(Tell, Don’t Ask)
2022.03.13💡 Oreilly의 Implementing Domain-Driven Design, 조영호님의 객체지향의 사실과 오해, 로버트 C. 마틴의 Clean Code을 인용하여 두 원칙을 설명하고 있습니다. 자세한 출처는 포스팅 하단에 적어두겠습니다. 이 글은 킹갓제너럴 동료 조셉님이 인싸이트를 제공해주어 작성하게 되었습니다 (🙌 감사) 디미터 법칙(Law of Demeter [Appleton, LoD]) 과 묻지 말고 시켜라(Tell, Don’t ASK [PragProg, TDA] 은 Aggregates 을 구현할 때 사용할 수 있는 설계 원칙이며, 두 가지 원칙 모두 메시지를 먼저 결정하고 객체가 메시지를 따르게 하도록 설계하여 정보 은닉을 강조한다. 송신자는 수신자가 어떤 객체인지 모르지만 자신이 전송한 메..
객체지향 도메인 모델 설계와 멘탈 모델의 연관성
객체지향 도메인 모델 설계와 멘탈 모델의 연관성
2020.12.12최근에 객체지향의 사실과 오해(조영호) 이라는 책을 읽던 중 도메인 모델 설계을 멘탈 모델(심성모형)을 통해 설명하는 부분에서 충격을 받았다. 어떻게 이 두 개념의 연관을 이렇게 지을 수 있었을까? 멘탈 모델(심성모형) 나는 인간중심디자인(Human Centered Design)이라는 수업에서 멘탈모델에 대해 배웠었고, DB 모델링이나 프로그래밍을 통해 설계도 조금은 익숙한데 이 두 개념을 전혀 연관을 짓지 못했다. 멘탈모델에 대해 다시 알아보고 싶어서 구글링을 하던 중 귀여운 사례로 멘탈 모델에 대해 설명하는 글을 발견했다. 아래 글을 요약하자면 멘탈 모델이란 어떤 사물이 어떻게 동작할 것이라는 믿는 사고 방식이고, 개개인마다 동일한 사물에 대해서도 멘탈 모델이 다르기 때문에 발생한 귀여운 해프닝에 대..
[책] 객체지향의 사실과 오해 요약(5)
[책] 객체지향의 사실과 오해 요약(5)
2020.10.105. 책임과 메시지 자율적인 책임 설계의 품질을 좌우하는 책임 자신의 의지에 따라 증언할 수 있는 자유 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다. (어떤 책임이 있는 지 구체적으로 세세하게 정하지 말라는 뜻) 너무 추상적인 책임 어떤 책임이 자율적인지를 판단하는 기준은 문맥에 따라 다르다는 사실에 유의하라. 재판이라는 협력 안에서는 '증언하라'라는 책임이 무자 장수의 자율권을 보장하는 가장 적절한 수준의 책임이지만 다른 상황에서는 오히려 '설명하라'라는 책임이 자율권을 보장하는 최선의 선택이 될 수 있다. 어떤 책임이 가장 적절한가는 설계 중인 협력이 무엇인가에 따라 달라진다. 성급한 일반화의 오류를 피하고 현재의 문맥에 가장 적합한 책임을 선택할 수 있는 날카로운..
[책] 객체지향의 사실과 오해 요약 (4)
[책] 객체지향의 사실과 오해 요약 (4)
2020.10.104장 역할, 책임, 협력 최후 통첩 게임을 통해 인간이 어떤 본직절인 특성을 지니고 있느냐가 아니라 어떤 상황에 처해있느냐가 인간의 행동을 결정한다는 것을 설명한다. 즉, 각 개인이 처해 있는 정황 또는 문맥(context)이 인간의 행동 방식을 결정한다는 것이다. 여기서 인간의 행동을 결정하는 문맥(context)는 타인과의 협력이다. 가장 흔한 실수는 문맥을 고려하지 않은 채 객체가 가져야 할 상태와 행동부터 고민하기 시작하는 것이다. 객체의 행동(책임)보다는 협력을 먼저 고민하라. 훌륭한 객체지향 설계자는 객체들 간의 요청과 응답 속에서 창발하는 협력에 초점을 맞춰 설계한다. 협력이 자리를 잡으면 저절로 객체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다. 어떤 협력에 참여하는 지가 객체에..
[책] 객체지향의 사실과 오해 요약 (3)
[책] 객체지향의 사실과 오해 요약 (3)
2020.10.093장 타입과 추상화 해리 백이 창조한 지하철 노선도의 핵심은 지도가 당연히 가져야 한다고 생각되는 정확성을 버리고 목적에 집중한 결과다. 승객이 꼭 알아야 하는 사실만 정확하게 표현되고 몰라도 되는 정보는 무시함으로써 이해하기 쉽고 단순하며 목적에 부합하는 지하철 노선도를 창조해낸 것이다. 해리 벡의 가장 위대한 업적은 지하철 노선도를 추상화한 것이다. 추상화를 통한 복잡성 극복 추상화의 정의 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다. 추상화는 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 본질에 집중하여 복잡성을 극복한다. 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이다. 복잡성..
[책] 객체지향의 사실과 오해 요약 (2)
[책] 객체지향의 사실과 오해 요약 (2)
2020.09.27이상한 나라의 객체 객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제이다. - 레베카 워프스브록 객체지향 패러다임 객체지향 패러다임은 실세계와 같이 소프트웨어 세계 역시 인간이 인지할 수 있는 다양한 객체들이 모여 이루어져 있다는 믿음에서 출발한다. 하지만 현실세계와 소프트웨어 세계의 유사성은 여기까지이다. 객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아니라 그를 기반으로 새로운 세계를 창조하는 것이다. 객체 객체란 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별 ..
[책] 객체지향의 사실과 오해 요약 (1)
[책] 객체지향의 사실과 오해 요약 (1)
2020.09.26조영호님의 책 객체지향의 사실과 오해를 통해 그 동안 맹신에 가까웠던 객체지향에 대한 미신을 되짚어 보고, 진정한 객체지향이란 무엇인가에 대한 생각의 실마리를 열어 준다. 기존에 객체지향을 설명할 때 들었던 붕어빵 틀(클래스)과 붕어빵(객체)라는 것에서 벗어나보자. 총 7장으로 이루어져있으며, 각 장별 내용을 요약하여 실제 코딩할 때에도 객체지향적으로 설계할 수 있도록 연습할 계획이다. 1장 협력하는 객체들의 공동체 객체지향의 목표 : 실세계를 모방하는 것이 아니라, 고객과 사용자를 만족시킬 수 있는 새로운 세계를 창조하는 것 객체 지향을 설명할 때 실세계를 비유하는 이유? 실세계 모방이라는 개념은 실무적으로 부적합하지만, 객체지향이라는 용어에 담긴 기본 사상을 이해하고 학습하는 데는 효과적이기 때문이다..