902 단어
5 분
Object
2025-01-17

오브젝트#

클래스가 아니라 객체에 초점을 맞춰야함#

  1. 어떤 클래스가 필요할지를 고민하기 전에 어떤 객체가 필요한지 고민 → 객체를 중심으로 설계

    1. 어떤 객체들이 어떤 상태와 행동을 가지는지 결정
  2. 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원

    1. 객체는 홀로 존재하는 것이 아니라 다른 객체에게 도움을 주거나 의존하면서 살아감 → 유연한 설계, 확장 가능성
  3. 객체의 모양과 윤곽을 잡음 → 공통된 특성과 상태를 가진 객체들은 타입으로 분류 → 타입을 기반으로 클래스 구현.



클래스의 경계를 구분 짓는 것이 필요#

  1. 어떤 부분을 외부에 공개하고 어떤 부분은 감출지 결정한다.

  2. 경계의 명확성이 객체의 자율성을 보장



자율적인 객체#

  1. 객체는 상태와 행동을 함께 가지는 존재

  2. 객체가 스스로 판단하고 행동하는 자율적인 존재

  3. 외부의 관섭을 최소화

  4. 외부에서는 객체가 어떤 상태인지 알아서는 안되고 결정에 직접적인 개입을 하면 안된다

  5. 객체에게 원하는 것을 요청하고 객체 스스로 최선의 방법을 결정할 것이라고 생각해야함

  6. 객체의 상태는 숨기고 행동만 외부에 공개

    → 스스로 상태를 관리하고 판단하고 행동하는 자율적인 객체들의 공동체를 구성하는 것이 목표

캡슐화와 접근제어#

  1. 외부에서 접근 가능한 부분으로 퍼블릭 인터페이스(public interface)라고 함

    1. public 메서드
  2. 외부에서는 접근이 불가능하고 오직 내부에서만 접근 가능한 부분을 구현(impleentation)이라고 함

    1. private, protected 메서드

    → 인터페이스와 구현의 분리



프로그래머의 역할#

  1. 클래스 작성자(class creator)
    1. 새로운 데이터 타입을 추가
  2. 클라이언트 프로그래머(client programmer)
    1. 클래스 작성자가 추가한 데이터 타입을 사용

구현 은닉(implementation hiding)#

클래스 작성자는 클라이언트 프로그래머에게 필요한 부분만 공개하고 나머지는 숨겨야 한다. 클라이언트 프로그래머가 접근해서는 안되는 데이터에 접근할 수 없도록 방지한다. 클라이언트 프로그래머에게 영향을 끼치지 않고 내부 구현을 마음대로 변경할 수 있게 된다.

→ 클래스를 개발할 때마다 인터페이스와 구현을 분리해야함

객체지향의 장점은 객체를 이용해 도메인의 의미를 더 잘 표현할 수 있다는 것이다. 따라서 의미를 좀 더 명확하게 표현할 수 있으면 객체를 사용해서 개념을 구현하는 것이 좋다.



협력하는 객체들#

  1. 먼저 협력의 관점에서 어떤 객체가 필요한지를 결정해야 한다.
  2. 객체들의 공통된 상태와 행위를 구현하기 위해 클래스를 작성한다.

Template Method Pattern#

부모 클래스에 기본적인 알고리즘의 흐름을 구현 해놓고, 중간에 필요한 처리의 구현을 자식 클래스에게 떠넘긴다.

Object
https://realits.me/posts/오브젝트/
저자
realitsyourman
게시일
2025-01-17
라이선스
CC BY-NC-SA 4.0