공부기록/객체지향 (21) 썸네일형 리스트형 3장 - 역할, 책임, 협력 역할, 책임, 협력 ( 객체지향 패러다임의 관점에서 핵심) 애플리케이션의 구현을 위해 어떤 협력이 필요하고, 협력을 위해 어떤 역할과 책임이 필요한지 고민해야한다. 너무 이른 시기에 구현에 초점을 맞추는 것은 변경하기 어렵고 유연하지 못한 코드를 낳는다. 다양한 객체들 사이에 균형 있게 분배되는 것이 일반적 객체가 협력에 참여하기 위해 수행하는 로직은 책임 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할 책임: 협력에 참여하기 위해 객체가 수행하는 행동 책임은 두가지 분류 : 아는 것과 하는것 하는 것 객체를 생성하거나 계산을 수행하는 등의 스스로 하는 것 다른 객체의 행동을 시작시키는 것 다른 객체의 활동을 제어하고 조절하는 것 아는 것 사적인 정보에 관해 아는 것 관련된 객체에 관해.. 오브젝트 2장 - 객체지향 설계 영화 예매 시스템으로 예시( 충분히 복잡하다고 생각하자) 내부와 외부를 구분해야하는 이유( 멤버변수를 pirvate으로 선언하는 이유) → 객체에게 자율성을 주기 위해서( 남이 못건드리게 하기 위해서) 내부에서만 접근 가능한 것 = 구현 외부에서 접근 가능한 public = 인터페이스 프로그래머의 역할을 클래스 작성자와 클라이언트 프로그래머로 구분하는 것이 유용 → 클래스 작성자는 새로운 데이터 타입을 추가하고, 클라이언트 프로그래머는 클래스 작성자가 추가한 데이터 타입을 사용 클래스 작성자는 클라이언트 프로그래머에게 필요한 부분만 공개하고 나머지는 꽁꽁 숨겨야 한다. Money 클래스, 돈과 관련된 일을 처리해줌. long과 같은 것을 쓸수도 있었겠지만, 도메인의 의미를 풍부하게 해줌 협력의 관점에서 .. 오브젝트 - 1장 객체, 설계(강추) 우선 이챕터는 이해할 수 없을 가능성이 높음. ( 결론적으로 이해하기 매우 쉬웠음-> 객체지향의 사실과 오해를 읽고 와서 그런건지.. 그런데 확실한 것은 그 책보다는 쉬움) 다른 챕터들의 내용을 축약해놓고, 그 다음에 하나씩하나씩 다음 챕터에서 나아갈 것이기 때문. 이론이 먼저인가? 실무가 먼저인가? 로버트 글래스 → 이론이 먼저인가? 실무가 먼저인가? 어떤 분야를 막론하고 이론을 정립할 수 없는 초기에는 실무가 먼저 급속한 발전을 이룬다. 실무가 어느정도 발전학 ㅗ난 다음에야 비로소 실무의 실용성을 입증할 수 있는 이론이 서서히 그 모습을 갖추고, 그 후에 이론이 실무를 추월하게 된다. 소프트웨어 분야 → 실무가 더 앞서있으며, 실무가 먼저 객체지향 프로그램을 설계하고 유지보수하는데 필요한 원칙과 기법.. 객체지향의 사실과 오해 - 다시 읽어보기 "객체지향이란 실세계를 직접이고 직관적으로 모델링할 수 있는 패러다임" 실제로 존재하는 개념이든, 추상적으로 존재하는 개념이든 코드로 옮겼을 때, 해당 개념을 '객체'로 옮길 수 있고, 그렇다면 해당 개념과 코드상에 존재하는 객체가 일치하면 일치할수록 개발자는 코드를 이해하기 쉬워지고, 개발의 속도가 엄청 빨라질 수 있다. 옛날에 읽었을 때는 이해가 잘 안가고, 그냥 그렇구나 했지만, 이제는 이해가 간다. 그러나 이게 다시 유연하고 실용적인 관점에서는 객체지향 분석, 설계를 설명하기에 적합하지 않다구?? 7장에서는 이거라고 했잖아요.. 그렇지만 클린 아키텍쳐책에도 비슷하게 나와있는 걸로 봐서는 실용적인 측면에서는 이렇게 설명하는게 적합하지 않다고 하는 듯하다. 객체지향의 목표는 실세계를 모방하는 것이 아.. 객체지향의 사실과 오해 - Chapter 7 함께 모으기 코드와 모델을 밀접하게 연관시키자 마틴 파울러의 객체지향 설계 안에 존재하는 세 가지 상호 연관된 관점 개념 관점 도메인 안에 존재하는 개념과 개념들 사이의 관계 도메인에 존재하는 문제를 해결하기 위해 개발됨 도메인의 규칙과 제약을 최대한 유사하게 반영 명세 관점 소프트웨어로 초점이 옮겨짐 객체들의 책임에 초점을 맞추게 됨(객체의 인터페이스를 바라봄) 구현 관점 객체들이 책임을 수행하는 데 필요한 동작하는 코드를 작성(how) 개념 관점, 명세 관점, 구현 관점은 동일한 클래스를 세 가지 다른 방향에서 바라보는 것. 클래스는 세 가지 관점을 모두 수용할 수 있도록 개념, 인터페이스, 구현을 함께 드러내야 한다. 목표 도메인 모델에서 시작해서 최종 코드까지의 구현 과정을 간략하게 설명 구현 클래스를 개념 .. 객체지향의 사실과 오해 - Chapter 6 객체 지도 지도는 실세계의 지형을 기반으로 만들어진 추상화된 모델 다양한 목적을 위해 재사용될 수 있음 어떤 목적으로 지도를 사용할지 알지 못한다. 길을 갈 때 → 어떻게 어떻게 가세요 ( 기능) 지도를 보고 감 → (구조와 같음) 소프트웨어 설계에 있어서도 기능보다는 구조를 중시하자 소프트웨어의 특징 → 요구사항은 항상 변한다 → 구조를 잘 잡으면 요구사항(기능)이 변해도 쉽게 풀어나갈 수 있음 구조를 기반으로 모델을 구축하는 편이 좀 더 범용적이고 이해하기 쉬우며 변경에 안정적이다. 안정적인 구조를 따라 역할, 책임, 협력을 구성하라. 전통적인 기능 분해는 자주 변경되는 기능을 중심으로 설계한 후 구조가 기능에 따르게 한다. 객체지향 접근방법은 자주 변경되지 않는 안정적인 객체 구조를 바탕으로 시스템 기능을 객.. 객체지향의 사실과 오해 - Chapter 5 책임과 메시지 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈이 어떻게 커뮤니케이션하는가 명확한 책임과 역할을 지닌 참가자들이 협력에 참여해야 한다는 것 → 부여받지 않은 책임을 기대하기 어려움 자율적인 책임 자율성→ 자기 스스로의 원칙에 따라 어떤 일을 하거나 자신을 통제해서 절제하는 성질이나 특성 타율성→ 자신의 의지와 관계없이 정해진 규율이나 원칙에 따라서만 움직이는 성질 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 수신했기 때문 요청을 처리하기 위해 객체가 수행하는 행동을 책임이라고 함 객체지향의 아름다움이란 적절한 객체에게 적절한 책임을 할당하는 것 책임-주도 설계: 적절한 책임의 선택이 전체 설계의 방향을 결정하기 때문 협력의 의도를 명확하게 표현하지 못할 정도로 추상적인 것 역시 .. 객체지향의 사실과 오해 - Chapter 4 역할, 책임, 협력 인간은 이기적이고 합리적인 존재 → 그러나 관계를 맺는 과정 속에서 인간은 본연의 특성을 배제하고 자신의 이익을 최소화 → 어떤 상황에 처해 있느냐가 인간의 행동을 결정한다. → 인간의 행동을 결정하는 문맥은 타인과의 협력 협력에 초점을 맞춰 애플리케이션을 설계함 → 협력에 무시하는 오만한 객체를 창조X → 조화를 이루며 적극적으로 상호작용하는 협력적인 객체를 창조 협력 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다. 재판 속의 협력 → 재판을 하기 위해, 왕, 토끼, 증인이 협력함 요청과 응답→ 협력에 참여하는 객체가 수행할 책임 책임 어떤 요청에 대해 대답해줄 수 있거나, 적절한 행동을 할 의무가 있는 경우, 해당 객체가 책임을 가진다고 함 객체지향 개발에서 가장 중요한 능력은 책임을 능.. 객체지향의 사실과 오해 - Chapter 3 타입과 추상화 추상화를 통해 타입을 만듬 추상화의 예: 지하철 노선도 ( 목적에 집중하여 필요없는 부분들 삭제) 현상은 복잡하고, 법칙은 단순함 명확하게 이해하기 위해 특정절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법 → 구체적인 사물들 간의 공통점은 취하고, 차이점은 버리는 일반화를 통해 단순화 → 불필요한 세부사항 제거 → 객체라는 추상화를 통해 현실의 복잡성을 극복 그룹으로 단순화하기 → 공통점으로 묶기 : 사람은 본능적으로 공통적인 특성으로 객체들을 여러 그룹으로 묶어 동시에 다뤄야하는 가짓수를 줄여버림 세상에 존재하는 등장인물들을 트럼와 토끼로 나누어서 복잡성을 감소시킴세상에 존재하는 등장인물들을 트럼와 토끼로 나누어서 복잡성을 감소시킴 분류(Classification)을 통해 clas.. 객체지향의 사실과 오해 - Chapter 2 이상한 나라의 객체 사람은 아기 때부터 뚜렷한 경계를 가지고 함께 행동하는 물체를 하나의 개념으로 인지함 =⇒ 객체 선천적으로 타고난 인지 능력을 이용해 세상에 존재하는 다양한 객체를 식별하고 분류함으로써 세상을 이해한다. → 세상을 더 작은 객체로 분해하는 것은 본질적으로 세상이 포함하고 있는 복잡성을 극복하기 위한 인간의 작은 몸부림 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것 객체 지향 패러다임 → 현실 세계를 기반으로 새로운 세계를 창조하는 것 앨리스 객체 앨리스가 한 행동의 결과는 앨리스의 상태에 의존적이다. 행동간의 순서 → 크기를 줄여야 작은 문을 통과할 수 있음 -상태를 가지며 변경 가능 -상태를 변경시키는 것은 앨리스 객체의 행동 행동의 결과는 상태에 의존적이.. 이전 1 2 3 다음