Development 8

[객체지향의 사실과 오해] 7. 함께 모으기

코드와 모델을 밀접하게 연관시키는 것은 코드에 의미를 부여하고 모델을 적절하게 한다.- 에릭 에반스 객체지향 설계는 세 가지 관점으로 바라볼 수 있다. 이 세 가지 관점들을 통해 클래스를 어떻게 설계해야 하는지 힌트를 얻을 수 있다.개념 관점 (Conceptual Perspective)도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다.사용자가 도메인을 바라보는 관점을 반영한다.실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심이다.명세 관점 (Specification Perspective)개발자의 관점으로, 객체가 협력을 위해 ‘무엇’을 할 수 있는가에 집중한다.인터페이스와 구현을 분리하고, 인터페이스를 설계하여 객체의 책임을 명확하게 설정한다.구현 관점 (Implementation..

Development/서적 2025.06.28

[객체지향의 사실과 오해] 6. 객체 지도

유일하게 변하지 않는 것은 모든 것이 변한다는 사실뿐이다.- 헤라클레이토스 이번 장은 소프트웨어를 구조 중심으로 설계해야 한다는 점을 강조한다. 구조를 중심으로 설계하면범용적이고,재사용성이 높으며,변경에 안정적인 모델을 만들 수 있다.위와 같은 특징이 중요한 이유는 사람들의 요구사항이 계속 변하기 때문이다.구조가 아닌 기능에 집중하여 설계하는 순간 위 장점들을 모두 잃게 된다. 기능 중심과 구조 중심의 설계를 길을 찾는 경우에 빗대어 설명해보자면,기능 중심: A에서 B로 가기 위한 경로를 방향을 비롯하여 랜드마크들을 사용하여 상세하게 설명한다.구조 중심: 지도 상에서 A에서 B로 연결된 경로를 따라 이동한다.경로를 설명하는 경우, A와 B 사이에 경로만 포함하기 때문에 재사용이 제한된다.이와 반대로, 구..

Development/서적 2025.06.17

[객체지향의 사실과 오해] 5. 책임과 메시지

의도는 “메시징”이다. 휼륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 소통하는가에 달려있다.- 엘런 케이 📌 자율적인 책임설계의 품질을 좌우하는 책임객체지향 공동체를 구성하는 기본 단위는 ‘자율적’인 객체다.자율적인 객체란 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체다.자율성: 자기 스스로의 원칙에 따라 어떤 일을 하거나 자신을 통제해서 절제하는 성질이나 특성타율성: 자신의 의지와 관계없이 정해진 규율이나 원칙에 따라서만 움직이는 성질객체가 어떤 행동을 하기 위해서는 다른 객체로부터 요청을 수신해야 하고,수신한 요청을 처리하기 위해 수행하는 행동을 책임이라고 한다.적절한 책임을 객체에 할당하여 자율적인 객체를 만들고,..

Development/서적 2025.06.01

[객체지향의 사실과 오해] 4. 역할, 책임, 협력

우리 모두를 합친 것보다 더 현명한 사람은 없다. - 켄 블랜차드 이번 장은 1982년에 독일의 베르너 귀스 교수가 실시한 “최후통첩 게임” 실험에 대한 이야기로 시작한다. 이 실험에서는 참가자를 ‘제안자’와 ‘응답자’ 무리로 나눈다. 제안자에게는 일정한 금액이 주어지며, 제안자는 받은 금액의 일부를 응답자에게 나눠줘야 한다. 이 때 제안자가 응답자에게 제시하는 금액의 비율은 직접 정하면 되는 것이다.응답자는 제안자의 제안을 수용하거나 거부할 수 있다. 만약 응답자가 제안을 승낙하면 제안자와 응답자 모두 제시한 비율에 따라 금액을 나누어 가질 수 있다. 하지만 응답자가 제안을 거부하게 되면 둘 다 한 푼도 건질 수 없게 된다.이 게임의 룰만 들었을 땐 제안자는 최소 금액을 응답자에게 제안하는 이기심을 보..

Development/서적 2025.05.11

[객체지향의 사실과 오해] 3. 타입과 추상화

일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해진다. 과거 초기의 지하철 노선도는 도시의 지형 정보를 포함하도록 설계되어 이동이라는 주요 목적과 역에 대한 정보를 파악하기 힘들었다. 하지만 현대 지하철 노선도의 경우, 출발지부터 도착지까지 어떤 역을 거쳐야 가장 빠르고 쉽게 도달할 수 있는지를 직관적이고 단순하게 보여주도록 설계돼있다. 지하철 이용객들이 알고 싶어하는 정보만 골라서 표현한 것이다. 현대 지하철 노선도는 영국의 해리 벡이란 사람이 만들었다. 그는 전기회로 도면과 지도를 융합한, 실용적인 지하철 노선도를 만들어냈다.해리 벡은 지역과..

Development/서적 2025.04.22

[객체지향의 사실과 오해] 2. 이상한 나라의 객체

객체지향과 인지 능력도로 위의 자동차, 거리를 거니는 사람 등의 존재를 인간은 당연하게 독립적인 객체로 인식한다. 즉, 인간은 본능적으로 세상에 존재하는 다양한 객체를 식별하고 분류하여 세상을 이해하는 인지 능력을 보유하고 있는 것이다. 인간의 인지능력은 구체적인 경계를 지닌 구체적인 사물을 객체로 인식하는 것을 넘어, 추상적인 사물까지도 객체로 인식할 수 있다. 예를 들어 주문 내역이나 계좌 내역 같은 개념적인 내용을 인간은 독립적인 객체로 인식할 수 있다. 즉, 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이라고 볼 수 있다. 객체지향 패러다임은 현실 세계를 모방한, 현실 객체들의 집합이라는 개념으로 시작됐지만, 현실 세계와 소프트웨어 세계의 객체 간에는..

Development/서적 2025.04.05

[객체지향의 사실과 오해] 1. 협력하는 객체들의 공동체

객체지향에 대한 오해객체지향에 대해 설명할 때, 설명의 편의성을 위해 “객체지향 소프트웨어는 실세계의 투영이며, 객체란 현실 세계에 존재하는 사물에 대한 추상화”라고 설명하곤 한다. 하지만 객체지향의 실제 목표는 실세계를 모방하는 것이 아니다. 버트란드 마이어라는 프랑스 개발자는 “소프트웨어 시스템이 해결하려고 하는 실재는 잘해봐야 먼 친척밖에는 되지 않는다”라고 했다고 한다. 즉 실세계와 소프트웨어의 세계 간 연관성은 희미하다는 것이다. 그럼에도 객체지향을 설명할 때 현실 세계에 빗대어 설명하는 이유는 객체지향의 핵심 사상인 “연결완전성”을 설명하는 데 적합한 틀을 제공하기 때문이다. 현실 세계 사람들은 목표를 달성하기 위해 암묵적인 약속과 명시적인 계약을 기반으로 협력하는데, 이를 메시지를 주고받으며..

Development/서적 2025.03.18

[객체지향의 사실과 오해] 0. 들어가며

최근에 프로젝트 팀원들과 안드로이드의 테스트코드에 대한 스터디를 시작해보고자 했다. 팀원 중 한 명이 기업 면접에서 테스트코드에 대한 질문이 받았다는 것이 계기였다. 본인도 라이브러리를 만들고 배포하던 과정 속에서 테스트코드 작성에 대한 선망이 생겨나고 있었던 찰나였기에 스터디 제안을 흔쾌히 받아드렸었다. 하지만 테스트 코드의 세계는 너무나도 방대했고, 잘 정리된 참고자료는 찾아보기 힘들었다. 여러 명의 팀원들과 어떻게 스터디를 진행할지 감이 안섰다. 각자 테스트코드를 알아보고, 작성해보고 발표하는 방향으로 어찌저찌 흘러갔지만, 틀의 부재는 스터디의 속도와 우리들의 의욕을 감퇴시켰다. 그날도 프로젝트 회의 후 테스트코드 스터디를 진행 중이었다. 스터디장을 맡은 친구는 테스트 스터디가 흘러가는 방식에 ..

Development/서적 2025.03.17