객체지향 프로그래밍

Jinsung·2022년 2월 7일
0

정의

객체 지향 프로그래밍은 문제를 여러개의 객체 단위로 나눠 작업하는 방식

대표적인 객체지향 프로그래밍 언어 JAVA,C#등이 있다

객체 지향 프로그래밍 특징 및 장점

객체지향 프로그래밍의 가장 큰 특징은 클래스를 이용해 연관 있는 처리부분(함수)과 데이터 부분(변수)를 하나로 묶어 객체(인스턴스)를 생성해 사용한다는 점

그리고 객체지향 프로그래밍에서는 프로젝트를 독립적인 객체 단위로 분리해서 작업할 수 있기 때문에 여러개발자와 협업해 규모가 큰 프로젝트를 진행할 수 있으며 유지보수측면도 뛰어나다는 장점

특징 및 장점

  • 이미 작성한 코드에 대한 재상용성이 높다
  • 로직을 아이브러리로 만들어두면 계속해서 사용할 수 있으며 그 신뢰성을 확보할 수 있다.
  • 라이브러리를 각종 예외상황에 맞게 잘 만들어두면 개발자가 사소한 실수를 하더라도 그 에러를 컴파일 단계에서 잡아낼 수 있으므로 버그 발생이 줄어든다.
  • 내부적으로 어떻게 동작하는지 몰라도 개발자는 라이브러리가 제공하는 기능들을 사용할 수 있기 때문에 생산성이 높아지게 된다
  • 객체 단위로 코드가 나눠져 작성되기 때문에 디버깅이 쉽고 유지보수에 용이하다.
  • 데이터 모델링을 할 때 객체와 매핑하는 것이 수월하기 때문에 요구사항을 보다 명확하게 파악하여 프로그래밍 할 수 있다.

단점

  • 객체 간의 정보 교환이 모두 메시지 교환을 통해 일어나므로 실행 시스템에 많은 overhead가 발생하게 된다. 하지만 하드웨어의 발전으로 많이 보안된 상태
  • 객체가 처리하려는 것에 대한 정확한 이해가 필요하기에 설계단계부터 많은 시간이 소모 되어 개발 속도가 느리다.

객체 지향적 설계 원칙

  1. SRP(Single Responsibility Principle) : 단일 책임 원칙클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
  2. OCP(Open-Closed Principle) : 개방-폐쇄 원칙확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
  3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
  5. DIP(Dependency Inversion Principle) : 의존 역전 원칙고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

객체 지향에 대한 설계

객체

객체 지향의 가장 기본은 객체이며, 객체의 핵심은 기능을 제공하는 것

실제로 객체를 정의할 때 사용하는 것은 객체가 제공해야 할 기능이며

객체가 내부적으로 어떤 데이터를 갖고 있는 지로는 정의되지 않는다.

이러한 기능들을 오퍼레이션이라고 부르며 객체는 오퍼레이션으로 정의

시그니처

객체 지향으로 선계하기 위해서는 오퍼레이션의 사용법을 알아야 한다.

오퍼레이션의 사용법은 다음 세가지로 구성

  • 기능 식별 이름
  • 파라미터 및 파라미터 타입
  • 기능 실행 결과 값 및 타입

위 세가지를 시그니처라고 부른다

인터페이스

객체가 제공하는 모든 오퍼레이션 집합을 객체의 인터페이스라고 부른다.

JAVA 언어에서의 인터페이스가 아니라 객체를 사용하기 위한 명세를 의미한다.

메세지

오퍼레이션의 실행을 요청하는 것을 메시지를 보낸다라고 표현한다

자바에서 메서드를 호출하는 것이 메시지를 보내는 과정에 해당된다

책임

객체가 자신이 제공하는 기능으로 정의된다는 것은

객체마다 자신만이 제공할 수 있는 기능에 대한 책임이 있다

객체가 갖는 책임의 크기난 작을수록 좋다

즉 객체가 제공하는 기능의 개수가 적은 것이 좋은 것이다

한 객체에 많은 기능이 포함되면 그 기능과 관련된 데이터들도 한 객체에 모두 포함된다

이 경우 객체에 정의된 많은 오퍼레이션들이 데이터들을 공유하는 방식으로 프로그래밍 되는데

절차지향 방식과 다를바가 없다

따라서 책임의 크기를 작을수록 유연해진다

이 것을 단일 책임 원칙(SRP)라고 한다.

의존성

한 객체가 다른 객체를 이용한다는 것은

실제 구현에서는 한 객체의 코드에서 다른 객체를 생성하거나

다른 객체의 메서드를 호출한다는 것을 의미한다.

의존의 영향은 꼬리를 문 것처럼 전파된다.

이러다가 변경한 여파가 다시 자기 자신까지 변화시킬 수 있는데 이것을 순환 의존이라고 한다.

이것을 해결하기 위해 사용하는 방법을 DIP라고한다.

캡슐화

객체 지향은 기본적으로 캡슐화를 통해서 한 곳의 변화가 다른 곳에 미치는 영향을 최소화한다.

캡슐화란 객체가 내부적으로 기능을 어떻게 구현하는지를 감추는 것이다.

내부 기능 구현이 변경되더라도 그 기능을 사용하는 코드는 영향을 받지 않도록 해준다.

즉 내부 구현변경의 유연함을 주는 캡슐화이다.

두 가지 규칙

  • Tell, Don’t Ask

    데이터를 물어보지 않고, 기능을 실행해 달라고 말하라는 규칙

데이터를 읽는 것은 데이터를 중심으로 코드를 작성하게 원인이 됨

예시로 들면 private로 데이터를 숨기고 메소드를 통해 데이터를 가지고 온다.

  • 데미테르 법칙

메서드에서 생성한 객체의 메서드만 호출

파라미터로 받은 객체의 메서드만 호출

필드로 참조하는 객체의 메서드만 호출

객체 지향 설계 과정

  1. 제공해야 할 기능을 찾고 또는 세분화하고 그 기능을 알맞은 객체에 할당
  2. 기능을 구현하는데 필요한 데이터를 객체에 추가
  3. 객체에 데이터를 먼저 추가하고 그 데이터를 이용하는 기능을 넣는다
  4. 기능은 최대한 캡슐화하여 구현
  5. 객체간에 어떻게 메시지를 주고 받을 지 결정

0개의 댓글