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

2023. 10. 21.·🤓 기술 학습 & 공부 기록/컴퓨터 일반

1. 협력하는 사람들

📍 커피 공화국의 아침

역할, 책임, 협력이 모든 곳에 존재

예) 카페에서

- 캐시어: 손님에게 커피가 준비됐음을 알리는 역할

- 손님: 커피를 받아서 돌아가는 역할

 

📍 요청과 응답으로 구성된 협력

요청

- 손님 -> 캐시어: 커피 주문 요청

- 캐시어 -> 바리스타: 커피 제조 요청

 

응답

- 바리스타 -> 캐시어: 커피 제조 완료 응답

- 캐시어 -> 손님: 커피 준비 완료 응답

 

 

📍 역할과 책임

역할: 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무

예)

- 손님: 커피를 주문하는 임무

- 캐시어: 손님으로부터 주문을 받는 임무

- 바리스타: 주문된 커피를 제조할 책임

 

역할은 책임을 내포

- 예) 범죄자를 검거할 책임을 거부하면 경찰이 아니다

 

역할의 특징 4가지

1) 여러 사람이 동일한 역할을 수행할 수 있다

- 손님은 어떤 캐시어가 주문을 받는지 상관없음(캐시어의 역할 수행만 잘 하면 아무나 됨)

 

2) 역할을 대체 가능성을 의미

- 손님 입장에서 캐시어는 대체 가능함(substitutable)

 

3) 책임을 수행하는 방법은 자율적으로 선택할 수 있다

- 바리스타가 커피 만드는 순서나 방법을 다르게 할 수 있다. 결과물만 제대로 나오면 됨

- 다형성(polymorphism): 동일한 요청에 대해 서로 다른 방식으로 응답하는 능력

 

4) 한 사람이 동시에 여러 역할을 수행할 수 있다

- 한 사람이 캐시어도 하고 바리스타도 할 수 있음

 

2. 역할, 책임, 협력

📍 기능을 구현하기 위해 협력하는 객체들

앞선 카페 예시에서

사람→객체,

요청→메시지,

요청 처리 방법→메서드 로 바꾸면 객체지향 개념이 완성됨

 

📍 역할과 책임을 수행하며 협력하는 객체들

- 애플리케이션의 기능은 책임 단위로 잘게 쪼개져 분할됨

- 책임은 적절한 역할을 수행할 수 있는 객체에 의해 수행됨

 

시스템

- 역할과 책임을 수행하는 객체들로 구성됨

 

시스템의 기능

- 객체간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구현됨

 

객체지향 설계

- 적절한 객체에게 적절한 책임을 할당하는 것에서 시작

- 책임을 명확하게 하는것이 중요

 

객체의 역할 특징 4가지

1) 여러 객체가 동일한 역할을 수행할 수 있다

2) 역할은 대체 가능성을 의미

3) 각 객체는 책임을 수행하는 방법(메서드)를 자유롭게 선택 가능

4) 하나의 객체가 동시에 여러 역할을 수행할 수 있다

 

3. 협력 속에 사는 객체

객체의 덕목

1) 객체는 협력적이어야 한다

- 혼자 모든 것을 해결하는 전지전능한 객체는 필요 없다

 

2) 객체는 자율적이어야 한다

- 협력에 참여하는 방법을 스스로 결정할 만큼 자율적이어야 함

- 객체의 사적인 부분은 외부에서 간섭하면 안됨

 

📍 상태와 행동을 함께 지닌 자율적인 객체

객체의 정의

- 상태(state)와 행동(behavior)을 함께 지닌 실체

- 상태와 행위를 하나의 단위로 묶는 자율적인 존재

 

전통적인 개발 vs 객체지향 개발

- 과거의 전통적인 개발 방법은 데이터와 프로세스를 엄격하게 구분

- 객체지향에서는 데이터와 프로세스를 객체라는 하나의 틀 안에 함께 묶음으로써 객체의 자율성 보장

 

📍 협력과 메시지

메시지

- 객체지향에서의 의사소통 방법

 

📍메서드와 자율성

메서드

- 객체가 수신된 메시지를 처리하는 방법

- 객체지향 프로그래밍 언어에서 메서드는 클래스 안에 포함된 함수 또는 프로시저를 통해 구현됨

 

📍 객체지향 언어 vs 절차적 언어

- 객체지향에서는 메시지를 수신한 객체가 런타임에 메서드를 선택할 수 있음

- 절차적 언어에서는 프로시저 호출에 대한 실행 코드를 컴파일 시간에 결정

 

4. 객체지향의 본질

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

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

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

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

 

📍 객체를 지향하라

- 클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과

- 객체지향의 핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것. 클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중해야 함

'🤓 기술 학습 & 공부 기록/컴퓨터 일반' 카테고리의 다른 글
  • 1. 코드 퀄리티
  • <객체지향의 사실과 오해> 2.이상한 나라의 객체
  • 프로그래머의 뇌 - 8. 명명을 잘하는 방법
  • 프로그래머의 뇌 - 7. 생각의 버그
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (516)
      • 🎨 프론트엔드 공부 (253)
        • JS & TS (92)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
<객체지향의 사실과 오해> 1.협력하는 객체들의 공동체
상단으로

티스토리툴바