객체지향 기본 개념

🪐 C:on·2022년 1월 1일
0

🔎 객체의 역할,책임,협력


역할

추상화를 통해 역할을 만든다. 추상화는 인터페이스나 추상클래스로 구현하는 것이다.

  • 클래스를 구현할 때는 인터페이스만 알면 구현할 수 있어야 한다.
  • 사용하는 곳에서는 클래스의 내부구조가 변경되어도 전혀 영향을 받지 않아야 한다.

역할이 명확하지 않으면 구현된 객체를 어떻게 사용할 수 있는 지 감을 잡기 어렵다.

인터페이스가 안정적으로 설계되도록 다음 두가지가 만족되는지를 가장 주의한다.

  • 클래스를 구현할 때는 인터페이스만 알면 내부가 어떻게 돌아가는지 신경쓸 필요가 없어야 한다.
  • 사용하는 곳에서는 클래스의 내부구조가 변경되어도 전혀 영향을 받지 않아야 한다.

타입스크립트에서 추상화를 하려면 객체를 인터페이스 규격을 가지는 어떤 변수에 할당한 후에 사용해야 한다.

export interface Authorize {
  authService: AuthService;
}

export class AuthProvider implements Authorize {
...}

const auth:Authorize = new AuthProvider(AuthFetchService, InputDialog);

책임

협력에 참여하기 위해 객체가 수행하는 행동이다.

책임은 두 가지로 분류된다.

  • doing
  • knowing

객체는 자율적이어야 한다.
어떤 책임에 대해 수정할 땐 그 책임을 맡고 있는 객체만 수정될 수 있어야 한다.


협력

하나의 객체가 다른 객체에게 도움을 요청할 때를 말한다.
애플리케이션에 어떤 객체가 필요하다는 것은, 이 객체가 어떤 협력에 참여하기 때문인것이다.

의존관계는 인터페이스 또는 추상클래스와 관계를 맺도록 한다.

책임을 벗어나지 않아야하며 수정이 일어나도 인터페이스에는 어떤 영향도 없도록 설계한다.


🔎 SOLID

S(단일책임원칙)

  • 한 클래스는 하나의 책임만 가져야 한다.

O(개방폐쇠원칙)

  • 확장에는 열려있으나 변경에는 닫혀있어야 한다.

L(리스코프 치환원칙)

  • 부모클래스의 인스턴스 대신 자식 클래스의 인스턴스를 사용해도 문제가 없어야 한다.
  • 따라서 부모가 수행하고 있는 책임을 그대로 수행하면서 추가적인 필드나 기능을 제공하려는 경우에만 상속을 하는 것이 바람직하다.

I(인터페이스 분리 원칙)

  • 범용의 인터페이스를 만들기 보다 클라이언트에 특화된 인터페이스를 사용해야 한다.
  • 인터페이스는 서로에게 영향을 받지 않아야 한다.
    • 예) 스마트폰에는 전화, 사진촬영, 웹서핑 등의 다양한 기능이 있는데 전화를 할 때는 웹서핑, 사진촬영 기능이 필요없다. 따라서 전화기능과 사진촬용, 웹서핑은 모두 독립된 인터페이스로 구현해야 한다.

D(의존관계역전법칙)

  • 의존관계는 변화하기 쉬운것 보다 변화하기 어려운 것에 의존하도록 해야 한다.
  • 변화하기 어렵다 → 추상적인 것 → 인터페이스나 추상클래스와 관계를 맺어야 한다는 뜻

0개의 댓글