Skip to content

객체 분해

Published: at 오전 06:45

Table of contents

Open Table of contents

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

시스템 분해 방법

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

하양식 기능 분해의 문제점

모듈의 장점과 한계

모듈 내부의 변수가 변경되더라도 모듈 내부에만 영향을 미친다 모듈을 사용하면 모듈 내부에 정의된 변수를 직접 참조하는 코드의 위치를 모듈 내부로 제한할 수 있다. 이제 어떤 데이더가 변경됐을 때 영향을 받는 함수를 찾기 위해 해당 데이터를 정의한 모듈만 검색하면 된다. 더 이상 전체 함수를 일일이 분석할 필요가 없다. 모듈은 데이터 변경으로 인한 파급효과를 제어할 수 있기 때문에 코드를 수정하고 디버깅하기가 더 용이하다.

비즈니스 로직과 사용자 인터페이스에 대한 관심사를 분리한다 사용자 입력과 화면 출력을 Employees 모듈이 아닌 외부에 뒀다는 점을 주목하라. 수정된 코드에서 Employees 모듈은 비즈니스 로직과 관련된 관심사만을 담당하며 사용자 인터페이스와 관련된 관심사는 모두 Employees 모듈을 사용하는 main 함수 쪽에 위치한다. 이제 GUI 같은 다른 형식의 사용자 인터페이스를 추가하더라도 Employees 모듈에 포합된 비즈니스 로직은 변경되지않는다.

전역 변수와 전역 함수를 제거함으로써 네임스페이스 오염(namespace pollution) 방지한다 모듈의 한 가지 용도는 네임스페이스를 제공하는 것이다. 변수와 함수를 모듈 내부에 포함시키기 때문에 다른 모듈에서도 동일한 이름을 사용할 수 있게 된다. 따라서 모듈은 전역 네임스페이스의 오염을 방지하는 동시에 이름 충돌(name collision)의 위험을 완화한다.

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

추상 데이터 타입

절차형 언어들은 적은 수의 내장 타입만을 제공했고, 새로운 타입을 추가하는 것이 불가능하거나 제한적이었다.

추상 데이터 타입의 기본 의도는 프로그래밍 언어가 제공하는 타입처럼 동작하는 사용자 정의 타입을 추가할 수 있게 하는 것이다.

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

덕타이핑 개발자는 타입의 대표적인 특징들을 뽑아서 코드로 정의한다. 실제 대상은 훨씬 더 많은 특징을 가질 수 있다. 구조적 타이핑에선 객체가 어떤 타입에 부합하는 최소한의 특징을 가지고 있다면, 그 타입이라고 간주한다.

interface Person {
  name: string;
}

interface Lifespan {
  birth: Date;
  death?: Date;
}

type K = keyof (Person | LifeSpan);

클래스

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

명확한 의미에서 추상 데이터 타입과 클래스는 동일하지 않다. 클래스는 상속과 다형성을 지원하는 데 비해 추상 데이터 타입은 지원하지 못한다는 점이다.

타입 추상화는 개별 오퍼레이션이 모든 개념적인 타입에 대한 구현을 포괄하도록 함으로써 하나의 물리적인 타입 안에 전체 타입을 감춘다. 따라서 타입 추상화는 오퍼레이션을 기준으로 타입을 통합하는 데이터 추상화 기법이다.

타입 추가라는 변경의 압력이 더 강한 경우에는 객체지향의 손을 들어줘야 한다.

변경의 주된 압력이 오퍼레이션을 추가하는 것이라면 추상 데이터 타입의 승리를 선언해야 한다.

더 볼거리