[오브젝트 02] 객체지향 프로그래밍

초보개발·2022년 11월 30일
0

오브젝트

목록 보기
5/6

협력, 객체, 클래스

클래스를 결정하고 클래스의 속성과 메서드를 고민하는 것이 아닌 객체에 초점을 맞추어라
이 것을 위해 두가지에 집중해야함
1. 어떤 클래스가 필요한지 고민하기 전, 어떤 객체들이 필요한지 고민하라
클래스: 공통적인 상태와 행동을 공유하는 객체들을 추상화한 것
따라서 클래스의 윤곽을 잡기 위해 어떤 객체들이 어떤 상태와 행동을 갖는지 먼저 결정해야 함
"객체를 중심에 두는 접근 방식은 설계를 단순하고 깔끔하게 만듦"
2. 객체를 독립적인 존재가 아니라 기능 구현을 위해 협력하는 공동체의 일원으로 봐라
각 객체는 다른 객체에게 도움을 주거나 의존하면서 살아가는 협력적인 존재임 -> 설계를 유연하고 확장 가능하도록 만듦

객체들의 윤곽이 잡히면 공통된 특성과 상태를 가진 객체들을 타입으로 분류하고 이 타입을 기반으로 클래스를 구현해라.

도메인의 구조를 따르는 프로그램 구조

도메인(domain)?
문제 해결을 위해 사용자가 프로그램을 사용하는 분야를 도메인이라고 함

객체지향 패러다임이 강력한 이유?
요구사항을 분석하는 초기 단계부터 프로그램을 구현하는 마지막 단계까지 객체라는 동일한 추상화 기법을 사용할 수 있기 때문
요구사항과 프로그램을 객체라는 동일한 관점에서 바라볼 수 있기 때문에 도메인을 구성하는 개념들이 프로그램의 객체와 클래스로 매끄럽게 연결 가능

클래스의 내부와 외부를 구분해야 하는 이유?
경계의 명확성이 객체의 자율성을 보장하기 때문이며, 더 중요한 이유로 개발자에게 구현의 자유를 제공함

자율적인 객체

  1. 객체는 상태와 행동을 함꼐 가지는 복합적인 존재임
  2. 객체가 스스로 판단하고 행동하는 자율적인 존재임

객체지향은 객체 안에 데이터와 기능을 한 덩어리로 묶어 문제 영역의 아이디어를 적절하게 표현할 수 있게 했으며 이처럼 데이터와 기능을 객체 내부로 함께 묶는 것을 캡슐화라고 함

접근 제어

  • 외부에서의 접근을 통제
  • 접근수정자(public, protected, private)를 이용하여 접근 제어

객체 내부에 대한 접근을 통제하는 이유: 객체를 자율적인 존재로 만들기 위해서
객체가 자율적으로 존재하기 위해서 외부의 간섭을 최소화해야 함
외부에서는 객체가 어떤 상태인지 어떤 생각을 하는지 알아서는 안되며 결정에 직접적으로 개입하려고 해서도 안됨

캡슐화와 접근 제어는 객체를 두 부분으로 나눔

  • 외부 접근 가능한 부분: 퍼블릭 인터페이스(public interface)
  • 내부에서만 접근 가능한 부분: 구현(implementation)

일반적으로 객체 상태는 숨기고 행동만 외부에 공개해야 함

  • 클래스의 속성: private
  • 외부에 제공해야하는 일부 메서드: public
  • 서브클래스나 내부 접근 가능 메서드: protected, private

private, protected: 구현, public: 퍼블릭 인터페이스

프로그래머의 자유

개발자의 역할을 클래스 작성자와 클라이언트 개발자로 구분하는 것이 유용함

  • 클래스 작성자: 새로운 데이터 타입을 프로그램에 추가함
    - 목표: 클라이언트 개발자에게 필요한 부분만 공개하고 나머지는 숨겨 마음대로 접근할 수 없도록 방지함으로써 클라이언트 개발자에 대한 영향을 걱정하지 않고 내부 구현을 변경할 수 있음(구현 은닉)
  • 클라이언트 개발자: 클래스 작성자가 추가한 데이터 타입을 사용
    - 목표: 필요한 클래스들을 엮어 애플리케이션을 빠르고 안정적으로 구축

구현 은닉
클라이언트 개발자는 내부 구현을 알 필요없이 인터페이스만 알고 있어도 클래스를 사용할 수 있음
클래스 작성자는 인터페이스를 바꾸지 않는 한 외부에 미치지 않는 영향을 걱정하지 않고도 내부 구현을 변경할 수 있음(즉, public 영역을 변경하지 않는다면 코드를 자유롭게 수정할 수 있음)

따라서 클래스를 개발할 때마다 인터페이스와 구현을 깔끔하게 분리하기 위해 노력해야 함

0개의 댓글