오브젝트 (3)

2025. 4. 9. 15:38·Book/DEV

이 포스팅은 오브젝트(조영호)를 읽으면서 정리한 글입니다

이전 포스팅

오브젝트 (1)
오브젝트 (2)

 

객체 분해하기

추상화

프로시저 추상화

  • "소프트웨어가 무엇을 해야 하는지"
  • 기능 분해 (알고리즘분해)

데이터 추상화

  • "소프트웨어가 무엇을 알아야 하는지"
    데이터 중심 타입 추상화(type abstraction), 데이터 중심 프로시저 추상화(procedure abstraction)
  • 프로그래밍 언어 관점의 객체지향이라고 볼 수 있음
  • 데이터 중심 데이터 추상화, 프로시저 추상화 통합 객체를 사용하여 시스템을 분해.
    • 이 때 클래스를 사용한다.

기능 분해

기능을 중심으로 데이터를 결정한다.

top-down(하향식) 접근 - 기능분해의 전통 방식

Top-down example)
직원정보입력 → 소득세율 가져오기 → 급여계산
위처럼 실행순서가 고정되므로 유연성 • 재사용성이 감소한다
즉 하향식 설계는 context에 강결합되기 때문에 재사용이 어렵다

사용자 인터페이스 : 변경이 많음
비즈니스 로직 : 사용자 인터페이스에 비해 변경이 적음

반면에 객체지향은 객체 사이의 논리적인 관계를 중심으로 설계되므로 제어 주체가 분산된다.

모듈

  • 함께 변경되는 부분을 구현단위도 묶고 인터페이스를 통해서만 접근되어 캡슐화 / 은닉 가능
  • 모듈 내부가 변경 되더라도 내부에만 영향을 미친다
  • 비즈니스로직과 사용자 인터페이스 관심사분리
  • 전역 변수 함수를 제거함으로써 네임스페이스 오염방지

 

유연한 설계

OCP (개방-폐쇄 법칙)
소프트웨어 객체(클래스, 모듈, 함수)는 확장에 열려 있고, 수정에 닫혀 있어야 한다

유연한 설계의 핵심은 추상화에 의존한다는 점이다.

추상화

추상화 : 확장을 가능케 한다.
추상화의 의존: 폐쇄를 가능하게 함

컴파일 시점 : 의존성 고정
런타임 시점 : 의존성 변경

생성 사용 분리

객체 생성 지식이 과도한 결합도 초래
객체의 생성은 객체 생성 책임을 클라이언트에 옮기는 것

ex. 한 영화의 할인 정책은 영화를 생성할 클라이언트의 몫

Factory

  • 생성 • 사용을 분리하기 위해 객체 생성에 대한 책임을 전담하는 객체
  • 팩토리는 순수한 기술적인 객체이고, 도메인 모델에 속하지 않는다

표현적 분해

  • 도메인모델의 개념
  • 관계를 따르며 도메인 (소프트웨이 사이의 표현적 차이를 최소화)
  • 그러나 모든 책임을 도메인모델에 위임한다면, 낮은 응집도, 높은 결합도, 재사용성 저하가 발생할 수 있다.

행위적 분해

  • Pure fabrication(순수한 가공물)을 추가하고, 책임을 할당하자
  • Factory가 이에 속함
  • 시스템은 임의적으로 창조한 인공적인 추상화를 포함하며, 오히려 표면적 분해보다 더 많은 비중을 차지하기도 한다.

주의 사항

  • 유연한 설계는 유연성이 필요할 때만 옳다
  • 불필요한 유연성은 불필요한 복잡성을 낳는다.
  • Tip) 인스턴스의 생성에 대해서는 추후에 고민하자.

 

저작자표시 비영리 변경금지 (새창열림)

'Book > DEV' 카테고리의 다른 글

오브젝트 (4)  (1) 2025.04.16
오브젝트 (2)  (0) 2025.04.08
오브젝트 (1)  (1) 2025.04.01
만들면서 배우는 클린 아키텍쳐 (2)  (0) 2025.03.14
만들면서 배우는 클린 아키텍쳐  (1) 2024.12.11
'Book/DEV' 카테고리의 다른 글
  • 오브젝트 (4)
  • 오브젝트 (2)
  • 오브젝트 (1)
  • 만들면서 배우는 클린 아키텍쳐 (2)
코드파고
코드파고
  • 코드파고
    Digging Code
    코드파고
  • 전체
    오늘
    어제
    • 분류 전체보기 (99)
      • Memorization (12)
      • Spring (18)
      • Java (1)
      • Algorithm (40)
      • Server (2)
      • DB (0)
      • CS (0)
      • CI & CD (4)
      • Architecture (0)
      • Design Patterns (0)
      • Study (1)
      • Book (9)
        • DEV (7)
        • Non-DEV (0)
      • Infra (1)
        • Kafka (6)
        • AWS (4)
      • TroubleShooting (1)
        • Etc (1)
      • Tools (0)
  • 블로그 메뉴

    • 홈
    • Github
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    헥사고날아키텍쳐
    클린아키텍쳐
    Clean Code
    Spring
    clean architecture
    Spring Boot
    architecture
    알고리즘
    Spring독학
    SpringFramework
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
코드파고
오브젝트 (3)
상단으로

티스토리툴바