오브젝트 - 07 객체 분해

yshjft·2023년 5월 20일
0

오브젝트

목록 보기
7/18
  • 추상화 : 불피룡한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업
  • 분해 : 큰 문제를 해결 가능한 작은 문제로 나누는 작업

01 프로시저 추상화와 데이터 추상화

  • 프로시저 추상화
    • 소프트웨어가 무엇을 해야 하는지를 추상화한다.
    • 기능 분해(알고리즘 분해)
  • 데이터 추상화
    • 소프트웨어가 무엇을 알아야 하는지를 추상화한다.
    • 타입 추상화(추상 데이터 타입)
    • 프로시저 추상화(객체지향)
  • 객체지향
    • 데이터를 중심으로 데이터 추상화와 프로시저 추상화를 통합한 객체를 이용해 시스템을 분해하는 방법
    • 데이터 추상화와 프로시저 추상화를 함께 포함한 클래스를 이용해 시스템을 분해하는 것

02 프로시저 추상화와 기능 분해

메인 함수로서의 시스템

  • 기능 분해의 관점에서 추상화의 단위는 프로시저
  • 프로시저
    • 유사하게 실행되는 작업들을 하나의 장소에 모아 놓아 로직의 재사용성을 높이고 중복을 방지할 수 있는 추상화 방법
    • 상세한 방법을 모르더라도 인터페이스를 알면 사용 가능
  • 하향식 접근법
    • 전통적인 기능 분해 방법
    • 최상위 기능 정의 → 최상위 기능을 하위 기능으로 분해

급여 관리 시스템

기능 분해 방법에서는 기능을 중심으로 필요한 데이터를 결정한다.

급여 관리 시스템 구현

하향식 기능 분해의 문제

하나의 메인 함수라는 비현실적인 아이디어

하나의 메인 기능이란 개념은 거의 존재하지 않는다.

메인 함수의 빈번한 재설계

  • 하향식 설계의 경우 메인 함수를 유일한 정상으로 간주
  • 새로운 기능이 추가될 때마다 매번 메인 함수를 수정해야 한다.

비즈니스 로직과 사용자 인터페이스의 결합

  • 비즈니스 로직과 사용자 인터페이스는 변경되는 빈도가 다르다.

성급하게 결정된 실행 순서

  • 하향식 설계는 어떻게 동작해야 하는지에 집중하도록 만든다.
  • 처음부터 구현을 염두에 둔다.
    • 변경에 유연하지 않다.
    • 재사용도 어렵다.

데이터 변경으로 인한 파급 효과

  • 어떤 데이터를 어떤 함수가 사용하고 있느니지 추적하기 어렵다.(모든 함수를 열어 데이터를 확인해야 한다.)
  • 데이터를 변경으로 인한 영향도를 평가하기는 쉽지 않다. 따라서 데이터와 함께 변경되는 부분과 그렇지 않은 부분을 명확하게 분리해야 한다.

언제 하향식 분해가 유용한가?

논리적으로 설명하고 문서화하기에 용이

03 모듈

정보 은닉과 모듈

  • 변경의 방향에 맞춰 시스템을 분해하는 것

  • 정보 은닉

    • 자주 변경되는 부분을 안정적인 인터페이스 뒤로 감춰야 한다.
  • 시스템을 어떻게 모듈 단위로 분해?

    • 시스템이 감춰야 하는 비밀을 찾아라
      • 복잡성
      • 변경 가능성

모듈의 장점과 한계

  • 모듈은 외부에 감춰야 하는 비밀과 관련성 높은 데이터와 함수의 집합
  • 모듈들은 퍼블릭 인터페이스를 통해서만 통신
  • 모듈의 핵심은 데이터이므로 데이터를 중심으로 시스템을 분해

장점

  • 모듈 내부의 변수가 변경되더라도 모듈 내부에만 영향을 미친다.
  • 비즈니스 로직과 사용자 인터페이스에 대한 관심사를 분리한다.
  • 전역 변수와 전역 함수를 제거함으로써 네임스페이스 오염을 방지한다.

단점

  • 인스턴스의 개념을 제공하지 않는다.

04 데이터 추상화와 추상 데이터 타입

추상 데이터 타입

  • 타입
    • 연산의 집합을 결정
    • 어떻게 행동할 것이라는 것을 예측할 수 있게 한다.
  • 데이터 추상화
    • 행위에만 관심을 가지며 세부 사항에 대해 무시한다.
  • 추상 데이터 타입 구현하려면...
    • 타입 정의를 선언할 수 있어야 한다.
    • 타입의 인스턴스를 다루기 위해 사용할 있는 오퍼레이션의 집합을 정의할 수 있어야 한다.
    • 제공된 오퍼레이션을 통해서만 조작할 수 있도록 데이터를 외부롭부터 보호할 수 있어야 한다.
    • 타입에 대해 여러 개의 인스턴스를 생성할 수 있어야 한다.

05 클래스

클래스는 추상 데이터 타입인가?

  • 추상 데이터 타입과 클래스는 동일하지 않다.

추상 데이터 타입

  • 상속과 다형성을 지원하지 않는다.
  • 객체기반 프로그래밍
  • 타입을 추상화한 것
  • 하나의 대표적인 타입이 다수의 세부적인 타입을 감춘다.
  • 오퍼레이션을 기준으로 타입을 묶는다.

클래스

  • 상속과 다형성을 지원한다.
  • 객체지향 프로그래밍
  • 절차를 추상화한 것
  • 타입을 기준으로 오퍼레이션을 묶는다.

추상 테이터 타입에서 클래스로 변경하기

변경 기준으로 선택하라

  • 타입 추가라는 변경의 압력 → 객체지향
  • 오퍼레이션 추가 → 추상 데이터 타입

협력이 중요하다

profile
꾸준히 나아가자 🐢

0개의 댓글