7장 객체분해

swucs·2022년 2월 8일
0

오브젝트

목록 보기
6/13

출처 : 오브젝트 (조영호 저)

하향식 기능 분해는 시스템을 최상위의 가장 추상적인 메인 함수로 정의하고, 메인 함수를 구현 가능한 수준까지 세부적인 단계로 분해하는 방법이다. 하향식 기능 분해 방식으로 설계한 시스템은 메인 함수를 루트로 하는 ‘트리’로 표현할 수 있다.

하향식 기능 분해는 다음과 같은 문제에 직면한다.

  • 시스템은 하나의 메인 함수로 구성돼 있지 않다.
  • 기능 추가나 요구사항 변경으로 인해 메인 함수를 빈번하게 수정해야 한다.
  • 비즈니스 로직이 사용자 인터페이스와 강하게 결합된다.
  • 하향식 분해는 너무 이른 시기에 함수들의 실행 순서를 고정시키기 때문에 유연성과 재사용성이 저하된다.
  • 데이터 형식이 변경될 경우 파급효과를 예측할 수 없다.

모듈의 장점과 한계

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

모듈은기능이 아니라 변경의 정도에 따라 시스템을 분해하게 한다. 각 모듈은 외부에 감춰야 하는 비밀과 관련성 높은 데이터와 함수의 집합이다. 따라서 모듈 내부는 높은 응집도와 낮은 결합도를 유지한다.

모듈의 가장 큰 단점은 인스턴스의 개념을 제공하지 않는다는 점이다. 좀 더 높은 수준의 추상화를 위해서는 직원 전체가 아니라 개별 직원을 독립적인 단위로 다룰 수 있어야 한다.

추상 데이터 타입

추상 데이터 타입을 구현하려면 다음과 같은 특성을 위한 프로그래밍 언어의 지원이 필요하다.

  • 타입 정의를 선언할 수 있어야 한다.
  • 타입의 인스턴스를 다루기 위해 사용할 수 있는 오퍼레이션의 집합을 정의할 수 있어야 한다.
  • 제공된 오퍼레이션을 통해서만 조작할 수 있도록 데이터를 외부로부터 보호할 수 있어야 한다.
  • 타입에 대해 여러 개의 인스턴스를 생성할 수 있어야 한다.

루비는 추상 데이터 타입을 흉내낼 수 있는 Struct라는 구성요소를 제공한다.

추상 데이터 타입은 말 그대로 시스템의 상태를 저장할 데이터를 표현한다. 추상데이터 타입은 데이터에 대한 관점을 설계의 표면으로 끌어올리기는 하지만 여전히 데이터와 기능을 분리하는 절차적인 설계의 틀에 갇혀 있는 것이다.

프로그래밍 언어의 관점에서 추상 데이터 타입은 프로그래밍 언어의 내장 데이터 타입과 동일하다. 단지 타입을 개발자가 정의할 수 있다는 점이 다를 뿐이다.

클래스

추상 데이터 타입과 클래스의 핵심적인 차이는 클래스는 상속과 다형성을 지원하는 데 비해 추상 데이터 타입은 지원하지 않는다는 점이다.

상속과 다형성을 지원하는 객체지향 프로그래밍과 구분하기 위해 상속과 다형성을 지원하지 않는 추상 데이터 타입 기반의 프로그래밍 패러다임을 객체기반 프로그래밍(Object-Based Programming)이라고 부르기도 한다.

객체지향에서는 타입 변수를 이용한 조건문을 다형성으로 대체한다. 클라이언트가 객체의 타입을 확인한 후 적절한 메서드를 호출하는 것이 아니라 객체가 메시지를 처리할 적절한 메서드를 선택한다. 흔히 ‘객체지향이란 조건문을 제거하는 것’이라는 다소 편협한 견해가 널리 퍼진 이유가 바로 이 때문이다.

추상 데이터타입과 객체지향 설계의 유용성은 설계에 요구되는 변경의 압력이 ‘타입 추가'에 관한 것인지, 아니면 ‘오퍼레이션 추가'에 관한 것인지에 따라 달라진다. 새로운 타입을 빈번하게 추가해야 한다면 객체지향의 클래스를, 새로운 오퍼레이션을 빈번하게 추가해야 한다면 추상 데이터 타입을 선택하는 것이 현명한 판단이다.

profile
백엔드 개발자

0개의 댓글

관련 채용 정보