개발하는 프로 국밥러
article thumbnail

오브젝트

조영호님의 책 오브젝트를 보며 정리한 내용입니다.

문제가 될 시 해당글 삭제하겠습니다.


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

  • 객체지향 이전의 추상화 기법기법이다. 
  • 프로시저 추상화 : 반복적으로 실행되거나 거의 유사하게 실행되는 작업들을 하나의 장소에 모아놓음으로써 로직을 재사용하고, 중복을 방지하는 추상화 기법
    -> 프로시저를 추상화라 부르는 이유는, 구현을 모르더라도 인터페이스만 알면 사용할 수 있기 때문이다.
    ->전통적인 기능분해의 방법이 하향식 설계 방법이다.

[하향식 설계(Tree 형식)]

하향식 설계 : 하나의 함수를 더 작은 함수로 분해하고, 분해된 함수들의 실행순서를 결정하는 방법.

 

하향식 설계의 문제점

  1. 하나의 함수에 제어가 집중되기 때문에 확장이 어렵다.
  2. 과도하게 함수에 집중하게 함으로써, 소프트웨어의 중요한 다른 측면인 데이터에 대한 영향도를 파악하기가 어렵다.
  3. 하향식 분해를 적용한 설계는 기본적으로, 재사용하기가 어렵다.

[모듈]

시스템의 변경을 관리하는 기본적인 전략

- 함께 변경되는 부분을 하나의 구현 단위로 묶고 퍼블릭 인터페이스를 통해서만 접근하도록 설계

 

정보 은닉

- 시스템에서 자주 변경되는 부분(데이터!!)을 상대적으로 덜 변경되는 안정적인 인터페이스 뒤로 감추는 것이 핵심이다!

 

모듈은 다음과 같은 두가지 비밀을 감추어야 한다.

  1. 복잡성 : 모듈이 복잡하게 되면 이해하고 사용하기가 어렵다. 때문에, 외부에는 모듈을 추상화할 수 있는 간단한 인터페이스를 제공한다.
  2. 변경 가능성 : 변경 가능한 설계가 외부로 노출되게 되면 파급효과가 커진다. 때문에 변경 가능한 설계는 내부로 감추고, 쉽게 변경되지 않을 인터페이스를 외부에 제공한다.

모듈의 장점

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

모듈의 단점

  • 인스턴스의 개념(작은 단위의 개념)을 제공하지 않는다.
     -> ex) 모듈은 모든 직원의 정보를 있지, 개별 직원을 독립적인 단위로 다룰 수 없다.
     -> 이러한 단점을 해결하기 위해서 추상 데이터 타입이라는 개념이 등장했다. 

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

  • 프로시저 추상화의 한계를 인지하고, 그에 대한 대안으로 나타난 개념이 데이터 추상화이다.
  • 추상 데이터 타입은 프로시저 추상화 대신 데이터 추상화를 기반으로 소프트웨어를 개발하도록 한 최초의 발걸음이다.

추상 데이터 타입(클래스와 비슷하지만 클래스가 아니다!) 

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

[클래스]

  • 추상 데이터 타입과 클래스는 명확한 의미에서는 동일하지 않다!
    -> 클래스는 상속과 다형성을 지원하지만, 추상 데이터 타입은 지원하지 않는다.

[변경을 기준으로 선택하라!]

  • 단순히 클래스를 구현 단위로 사용한다는 것이, 객체지향 프로그래밍을 의미하지는 않는다!
    -> 타입을 기준으로 절차를 추상화하지 않았다면 그것은 객체지향 분해가 아니다!!
    -> 객체지향에서는 타입 변수를 이용한 조건문을 다형성으로 대체한다.
  • 개방 폐쇄 원칙(Open-Closed Pronciple, OCP)
    : 다형성을 사용해 기존 코드의 아무런 영향도 미치지 않고 새로운 객체 유형과 행위를 추가할 수 있는 객체지향의 특성을 말한다.

profile

개발하는 프로 국밥러

@gugbab2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!