시그마 삽질==six 시그마

객체지향 본문

프로그래밍/Programming stuff

객체지향

Ethan Matthew Hunt 2020. 4. 16. 19:21
우아한 형제들의 조영호 개발실장님의  '객체지향의 사실과 오해'를

구입하시길 추천드립니다.

책 구입을 원하시는분은 요기를 클릭하시면 됩니다.

하단의 내용은 제가  읽었던 내용을 요약 정리한 것입니다.

 

1. 일반적인 객체지향 ,객체의 정의

 

객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임

객체란 현실 세계에 존재하는 사물에 대한 추상화

 

 

2. 저자의 객체지향,객체 정의

 

객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법

자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 실체

객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합

객체는 다른객체와 협력하기 위해 메시지를 전송하고 메시지를 수신한 객체는 메세지를 처리하는데 적합한 메서드를 자율적으로 선택

객체란 특정 개념을 적용할 수 있는 구체적인 사물을 의미. 개념이 객체에 적용됐을 때 객체를 개념의 인스턴스라고 함

 

 

3. 행동

 

객체 자신의 상태변경(행동이 상태를 결정한다!)

행동 내에서 협력하는 다른 객체에 메시지 전송

 

 

 

4. 상태 캡슐화

 

상태를 감추고 행동만 노출

현실세계에서 내가 음료를 마시면 음료는 그냥  수동적인 존재로 없어지는거임.

But 객체지향 세계에서는 객체는 상태를 스스로 관리하는 자율적인 존재로 음료 자신만이 상태 변경을 할 수 있음

내가 음료에게 마셨다는 메시지 전달. 줄일지 말지는 음료객체의 결정사항이고 나와는 무관

 

 

5. 의인화

 

위 음료 이야기처럼 현실속 수동적인 존재가 소프트웨어 객체로 구현될때는 능동적이됨

이런 의미에서 객체지향은 현실 세계의 모방을 넘어서 현실세계가 가지지 못하는 추가적인 능력을 보유하고 의인화가 가능해짐

 

 

 

6. 추상화를 통한 복잡성 극복

 

특정 절차나 물체를 의도적을 생략하거나 감춤으로써 복잡성 극복위해  이해하기 쉬운 수준으로 단순화

 

첫번째는 사물간의 공통점을 취하고 차이점은 버리는 일반화를 통해 단순하게 만듬 (버스,승용차,suv  -->자동차)

두번째는 중요한 부분을 강조하기 위해 불필요한 세부 사항은 제거함으로써 단순하게 만듬(자동차는 엔진,바퀴로 구성됨)

 

 

7. 개념==타입(추상화작업)

 

공통점을 기반으로 객체들을 묶기위한 그릇.

개념을 이용해서 객체들을 분류가능(classification class!! 추상화2단계전부사용)==분류는 객체에 특정한 개념을 적용하는 작업

클래스는 타입을 구현한것임. 타입은 객체를 분류하기 위해 사용함. 클래스는 타입구현 방법 중 하나

 

개념의 3가지 관점

심볼:개념을 가리키는 이름이나 명칭

내연:개념의 정의

외연: 개념에 속하는 모든 객체의 집합

 

 

8. 일반화/특수화 관계

 

일반타입:Super Class

특수한 타입: Sub Class

특수한 타입이란 일반적인 타입이 가진 모든 타입을 포함하지만 거기에  더해 자신만의 행동을 추가하는 타입

 

 

9. 책임

 

하는것+ 아는것

자율적인 책임의 특징은 객체가 어떻게 해야하는가가 아니라 무엇을 해야하는가를 설명

서로 다른 객체들이 다형성을 만족시킨다는 것은 객체들이 동일한 책임을 공유한다는것을 의미(증언하라!)

다형성은 동일한 역할을 수행할 수 있는 객체들 사이의 대체가능성

다형성을 사용하면 메세지를 이해할 수 있는 다른 객체와 협력할 수 있는 확장가능한 구조만들 수 있음

 

 

 

10. 메세지를 따라라

 

객체지향의 강력함은 클래스가 아니라 객체들이 주고받는 메시지로부터 나옴

시스템은 메세지를 주고받는 동적인 객체들의 집합

객체가 메세지를 선택하는게 아니라 메시지가 객체를 선택하게 해야함

책임-주도 설계방법은 what/who 사이클에 따라 협력에 참여할 객체를 결정하기 전에 협력에 필요한 메시지를 먼저 결정

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'프로그래밍 > Programming stuff' 카테고리의 다른 글

Clean Code 요약 (로버트 마틴 밥아저씨)  (1) 2020.09.19
이벤트 소싱  (0) 2020.07.04
몇가지 구현 이야기  (0) 2020.04.12
애플리케이션 아키텍처와 객체지향  (0) 2020.04.12
우아한 객체지향  (0) 2020.04.11
Comments