조영호님의 책 오브젝트를 보며 정리한 내용입니다.
문제가 될 시 해당글 삭제하겠습니다.
[프로시저 추상화와 기능 분해]
- 객체지향 이전의 추상화 기법기법이다.
- 프로시저 추상화 : 반복적으로 실행되거나 거의 유사하게 실행되는 작업들을 하나의 장소에 모아놓음으로써 로직을 재사용하고, 중복을 방지하는 추상화 기법
-> 프로시저를 추상화라 부르는 이유는, 구현을 모르더라도 인터페이스만 알면 사용할 수 있기 때문이다.
->전통적인 기능분해의 방법이 하향식 설계 방법이다.
[하향식 설계(Tree 형식)]
하향식 설계 : 하나의 함수를 더 작은 함수로 분해하고, 분해된 함수들의 실행순서를 결정하는 방법.
하향식 설계의 문제점
- 하나의 함수에 제어가 집중되기 때문에 확장이 어렵다.
- 과도하게 함수에 집중하게 함으로써, 소프트웨어의 중요한 다른 측면인 데이터에 대한 영향도를 파악하기가 어렵다.
- 하향식 분해를 적용한 설계는 기본적으로, 재사용하기가 어렵다.
[모듈]
시스템의 변경을 관리하는 기본적인 전략
- 함께 변경되는 부분을 하나의 구현 단위로 묶고 퍼블릭 인터페이스를 통해서만 접근하도록 설계
정보 은닉
- 시스템에서 자주 변경되는 부분(데이터!!)을 상대적으로 덜 변경되는 안정적인 인터페이스 뒤로 감추는 것이 핵심이다!
모듈은 다음과 같은 두가지 비밀을 감추어야 한다.
- 복잡성 : 모듈이 복잡하게 되면 이해하고 사용하기가 어렵다. 때문에, 외부에는 모듈을 추상화할 수 있는 간단한 인터페이스를 제공한다.
- 변경 가능성 : 변경 가능한 설계가 외부로 노출되게 되면 파급효과가 커진다. 때문에 변경 가능한 설계는 내부로 감추고, 쉽게 변경되지 않을 인터페이스를 외부에 제공한다.
모듈의 장점
- 모듈 내부의 변수가 변경되더라도 모듈 내부에만 영향을 미친다.
- 비지니스 로직과 사용자 인터페이스에 대한 관심사를 분리한다.
- 전역 변수와 전역 함수를 제거함으로써 네임스페이스 오염을 방지한다.
모듈의 단점
- 인스턴스의 개념(작은 단위의 개념)을 제공하지 않는다.
-> ex) 모듈은 모든 직원의 정보를 있지, 개별 직원을 독립적인 단위로 다룰 수 없다.
-> 이러한 단점을 해결하기 위해서 추상 데이터 타입이라는 개념이 등장했다.
[데이터 추상화와 추상 데이터 타입]
- 프로시저 추상화의 한계를 인지하고, 그에 대한 대안으로 나타난 개념이 데이터 추상화이다.
- 추상 데이터 타입은 프로시저 추상화 대신 데이터 추상화를 기반으로 소프트웨어를 개발하도록 한 최초의 발걸음이다.
추상 데이터 타입(클래스와 비슷하지만 클래스가 아니다!)
- 타입 정의를 선언할 수 있어야 한다.
- 타입의 인스턴스를 다루기 위해 사용할 수 있는 오퍼레이션의 집합을 정의할 수 있어야 한다.
- 제공된 오퍼레이션을 통해서만 조작할 수 있도록 데이터를 외부로부터 보호할 수 있어야 한다.
- 타입에 대해 여러 개의 인스턴스를 생성할 수 있어야 한다.
[클래스]
- 추상 데이터 타입과 클래스는 명확한 의미에서는 동일하지 않다!
-> 클래스는 상속과 다형성을 지원하지만, 추상 데이터 타입은 지원하지 않는다.
[변경을 기준으로 선택하라!]
- 단순히 클래스를 구현 단위로 사용한다는 것이, 객체지향 프로그래밍을 의미하지는 않는다!
-> 타입을 기준으로 절차를 추상화하지 않았다면 그것은 객체지향 분해가 아니다!!
-> 객체지향에서는 타입 변수를 이용한 조건문을 다형성으로 대체한다. - 개방 폐쇄 원칙(Open-Closed Pronciple, OCP)
: 다형성을 사용해 기존 코드의 아무런 영향도 미치지 않고 새로운 객체 유형과 행위를 추가할 수 있는 객체지향의 특성을 말한다.
'아키텍처 > OOP' 카테고리의 다른 글
[오브젝트] Chapter9 유연한 설계 (0) | 2022.11.04 |
---|---|
[오브젝트] Chapter8 의존성 관리하기 (2) | 2022.11.04 |
[오브젝트] Chapter6 메시지와 인터페이스 (0) | 2022.11.03 |
[오브젝트] Chapter5 책임 할당하기 (0) | 2022.11.02 |
[오브젝트] Chapter4 설계 품질과 트레이드 오프 (0) | 2022.11.02 |