객체지향 설계방식이란

wook2·2022년 9월 5일
0
post-thumbnail

객체지향 설계의 기본 개념과 특징

객체지향의 특징과 설계원칙에는 기존에 익히 들어왔던 4가지 특징과 5가지 설계원칙을 들 수 있다.

특징

  • 추상화 : 좀더 일반화를 시키고 세부사항보단 핵심사항에 집중할 수 있도록 한다
  • 다형성 : 객체는 다양한 형태를 가질 수 있고, 하나의 객체가 여러개의 형태를 가질 수 있다.
  • 캡슐화 : 객체에 집중하기 보단 인터페이스에 집중해 세부로직을 감추고 인터페이스에 의존한다.
  • 상속 : 객체는 부모로부터 상속을 받을 수 있다.

설계원칙
  • 단일 책임의 원칙: 객체는 반드시 한가지 동작만의 책임을 가져야 한다.
  • 개방 폐쇄의 원칙: 확장에는 열려있어야 하지만, 변경에는 닫혀있어야 한다.
  • 리스코프 치환의 원칙: 부모객체를 상속한 자식객체가 있는 경우, 부모 객체를 호출하는 동작에서 자식 객체가 부모객체를 완전히 치환할 수 있다.
  • 인터페이스 분리의 원칙: 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다.
  • 의존성 역전의 원칙: 추상화에 의존해야 하고, 구체화에 의존하면 안된다.

개념적인 특징을 바탕으로한 설계 방식 이해

객체지향방식의 설계를 한다는 것은 위의 원칙을 하나씩 따져가며 구현하는 것이 아니라고 생각한다.
설계를 하는 도중 발생하는 문제지점을 해결하는 것부터 시작된다.
예를 들어 구체화된 객체를 받아와 해당 객체를 사용하는 객체를 만들었다고 가정해보자.
처음에 이를 쓸때는 큰 문제없이, 받아온 객체를 이용해 service로직을 이용할 수 있을것이다.
그런데 이제는 해당 구체화된 객체를 사용하지 않고 다른 구체화된 객체를 사용한다면, 이미 곳곳에 퍼져있는 객체를 수정하는 일은 여간 힘든일이 아닐 것이다.

이제 역으로 개념을 생각해보면 위의 문제는 의존성 역전 원칙을 어김으로써 문제가 발생함을 알 수 있다.
그렇기 때문에 해당 객체들이 가지는 특성을 모은 인터페이스를 만들고, 인터페이스에 의존하게 만들어야 한다는 생각이 자연스럽게 든다.


어떻게 설계해야 할까?

처음부터 매우 추상화된 형태로 설계를 하는 것은 어디서부터 시작을 해야할지, 범위를 어디까지 나눠야 할까라는 생각을 마주치게 된다.

그렇기 때문에 적절한 프로세스를 통해 작은 부분부터 객체지향 설계를 잘 생각해 구현해야 한다.

생각하는 프로세스는 다음과 같다.

  1. 도메인을 구성하는 객체에는 어떤 것들이 있을까의 고민
    학점 계산기 도메인에는 이수한 과목, 과목의 학점을 계산해 줄수 있는 객체가 있을 수 있다.

  2. 객체들 간의 관계를 고민
    학점 계산기 객체가 과목 객체를 받아 어떤 연산을 해줄 수 있다.

  3. 동적인 객체를 정적인 타입으로 추상화하기
    자료구조, 알고리즘, 운영체제같은 구체적인 객체를 과목이라는 추상적인 객체로 바꾸자

  4. 객체들간 적절한 책임을 담당하고 협력을 설계하기
    학점 계산기는 학점을 계산한다는 책임이 있고, 과목 객체는 과목에 대한 정보 및 연산을 담당한다는 책임이 있다. 또한 학점 계산기는 과목을 받아서 연산한다는 협력이 존재

  5. 구현하기

profile
꾸준히 공부하자

0개의 댓글