본문 바로가기

OOP8

클래스는 개념, 명세, 구현 관점에서 검토한다 공부 내용 : 객체지향의 사실과 오해 7장 공부 기간 : 2022년 11월 23일 수요일 기억하고 싶은 것 변경에 유연하게 대응할 수 있는 객체를 작성하는 가장 빠른 방법은 클래스가 개념, 명세, 구현 관점을 명확하게 드러내도록 하는 것이다. 개념은 도메인 모델로부터, 명세는 메시지(안정적인 영역)로부터, 구현은 클래스의 가변적 영역을 드러낸다. 객체지향 시스템을 설계할 때, 도메인 모델을 우선 표현해야 한다. 그리고 객체의 협력 관계를 만들어 인터페이스를 얻는다. 첫 메시지는 기능으로부터 얻고, 객체의 선택은 도메인 모델을 바탕으로 한다. 객체가 수행할 수 없는 책임이 등장하면 그때 다른 객체를 선택한다. 객체 협력 관계가 완성되면 정적 타입으로 분리해 클래스를 작성한다. 인터페이스와 내부 구현을 명확.. 2023. 1. 12.
안정적인 구조에 기능을 종속시켜라 공부 내용 : 객체지향의 사실과 오해 6장 공부 기간 : 2022년 11월 23일 수요일 기억하고 싶은 것 설계의 목적은 변화를 수용하는 여지를 남기기 위함이다. 기능이 안정적인 구조를 따라야 변경을 수용할 수 있는 소프트웨어가 된다. 요구사항에 비해 잘 변하지 않는 개념(멘탈 모델)을 표현하는 도메인 모델은 안정적인 구조를 제공한다. 사용자가 도메인에 기대하는 기능은 유스 케이스로 서술한다. 책임 주도 설계는 도메인 모델을 바탕으로 시스템의 책임을 객체에 분배하고, 기능을 바탕으로 책임을 파악한다. 질문 왜 기능이 구조를 따라야 하는가? 기능과 구조의 목표는 무엇인가? 구조는 어떻게 얻을 수 있으며, 이렇게 얻은 구조가 안정적인 이유는 무엇인가? 기능은 어떻게 표현하는가? 책임 주도 설계는 구조와 기능.. 2023. 1. 12.
메시지에 따라 객체지향을 설계하라 공부 내용 : 객체지향의 사실과 오해 5장 공부 기간 : 2022년 11월 22일 화요일 기억하고 싶은 것 객체지향이 유연한 설계와 재사용성을 높일 수 있는 이유는 협력을 수행하는 방법으로 메시지를 선택하기 때문이다. 메시지는 협력의 문맥에서 객체의 내부와 외부를 구분한다. 따라서 객체는 자율적인 책임을 지니게 된다. 캡슐화, 다형성, 낮은 결합도와 높은 응집도 등의 장점을 자율적인 책임에서 얻을 수 있다. 따라서 객체지향 시스템을 설계할 때는 협력의 문맥에서 메시지(what)을 결정하고 해당 책임을 수행할 객체(who)를 정한다. 객체를 설계할 때도 외부에 오픈할 메시지를 담는 인터페이스와 내부 구현(상태, 행동)을 구분해야 한다. 질문 자율적인 책임은 무엇을 정의하는가? 다형성 지탱하는 것은 무엇인가.. 2023. 1. 12.
역할, 책임, 협력의 관점에서 애플리케이션 설계하기 공부 내용 : 객체지향의 사실과 오해 4장 공부 기간 : 2022년 11월 20일 일요일 질문 객체지향 설계의 품질을 결정하는 것은 무엇인가? 협력은 무엇으로 구성되는가? 책임과 메시지의 차이는 무엇인가? 역할을 사용하여 얻을 수 있는 장점은 무엇인가? 책임 주도 설계는 무엇인가? 디자인 패턴은 왜 사용해야 하는가? 테스트 주도 개발과 객체 지향은 어떤 관련이 있는가? 기억하고 싶은 것 객체지향 설계란 애플리케이션의 기능을 구현하기 위한 협력 관계를 고안하고, 협력에 필요한 역할과 책임을 식별한 후 이를 수행할 수 있는 적절한 객체를 선택하는 과정이다. 핵심은 올바른 책임을 올바른 객체에게 할당하는 것이다. 협력은 요청과 응답으로 이루어지고, 객체는 자신의 책임을 수행하며 다른 객체에게는 메시지를 통해 .. 2023. 1. 12.
객체는 행동으로 추상화한다 공부 내용 : 객체지향의 사실과 오해 3장 공부 기간 : 2022년 11월 16일 수요일 기억하고 싶은 것 추상화는 현실의 복잡성을 극복하기 위한 인지 수단이다. 객체를 개념에 따라 분류하여 일반화하고 단순화할 수 있다. 소프트웨어에서 개념은 타입이며, 타입을 결정하는 것은 객체의 행동이다. 행동은 다형성, 캡슐화, 상속을 설명한다. 타입은 객체의 동적인 상태 변화를 정적으로 추상화하며, 클래스는 타입을 구현하는 수단이다. 질문 추상화는 무엇이고 그 목적은 무엇인가? 개념에 의한 분류는 추상화를 어떻게 적용하는가? 소프트웨어에서 객체 분류의 기준인 개념은 무엇인가? 타입을 결정하는 것은 무엇인가? 다형적인 객체는 왜 동일한 타입인가? 객체를 행동에 따라 분류하려면 객체는 어떤 모습이어야 하는가? 슈퍼타입.. 2023. 1. 12.
객체는 협력하기 위해 존재한다 공부 내용 : 객체지향의 사실과 오해 2장 공부 기간 : 2022년 11월 15일 화요일 질문 객체는 무엇인가? 객체는 무엇으로 구성되며, 각 구성 요소는 왜 필요한가? 객체는 어떻게 협력에 참여하는가? 객체를 왜 캡슐화하는가? 객체 설계에 있어 중요한 것은 무엇인가? 왜 객체 지향은 현실 세계의 모방이 아닌가? 기억하고 싶은 것 객체는 협력하기 위해 존재한다. 자율적인 책임을 가진 객체가 협력에 참여할 수 있는 유일한 방법은 행동이다. 객체지향 설계에서는 어떤 책임과 이를 수행할 행동이 필요한지 정의한 후 상태를 결정해야 한다. 1. 객체는 무엇인가? 객체란 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 예를 들어 앨.. 2023. 1. 12.