posted by 방랑군 2012. 1. 4. 13:35

본 내용은 월간 마소 2008년 11월호에 실린 내용을 정리한 것입니다.
불펌을 금지하며, 문제시 삭제하겠습니다.


생산성의 향상

  • 프로그램에서의 생산성 향상 방안 : 코드의 재사용
    • Function, Procedure 개념 지원 언어의 출현, 이후 객체지향 언어가 출현
    • 컴포넌트 사용 : 재사용을 높이고 검증된 코드를 사용하게됨 --> SW 품질이 높아지고 개발비용/유지비용이 낮아짐
  • 컴포넌트 재활용과 디자인 재활용
    • 객체지향 프로그램에서는..
      • 클래스 : 기능을 모듈화 & 추상화 지원
      • 추상클래스 : 객체간 프로토콜 일치 가능
      • 동적바인딩 : 프로시저 호출 지연 바인딩(Late-binding)
      • 클래스 상속 : 서브클래스에서 기능을 추가/보완
      • 다형성 : 객체의 기능을 교체
  • 랄프존슨이 말한 프레임워크
    • 추상클래스들의 집합과 상호 협조하는 클래스들의 인스턴스 동작방법으로 이루어진 재사용 가능한 디자인
  • 예제) 윈도우 애플리케이션용 프레임워크
    • 화면의 로직처리
    • 윈도우 그리는 컴포넌트
    • 통신 컴포넌트
    • 내부 정보 처리하는 도큐먼트 컴포넌트
    • 등등등..

라이브러리 대신 프레임워크 사용하는 이유

  • 라이브러리
    • 정의 : 해결하고자 하는 도메인 문제와 상관없이 재사용할 컴포넌트의 집합
    • 사용시 : 제공하는 메소드의 기능을 정확히 알고 있어야 함 (목적, 인자, 결과값)
  • 프레임워크
    • 정의 : 해결하고자 하는 도메인 문제에 특화된 인스턴스들이 함께 동작되는 컴포넌트 집합과 디자인
    • 사용시 : 필요한 지점에서 적절히 삽입하고 쉬운 사용, 세부적인 부분은 몰라도 됨
    • 프레임워크 = 반제품(Semi-Complete Application) : 적은 비용으로 App 만들기 위해 절반정도는 구현되어 있는 수준
  • 예제 : 신뢰성 있는 메시징, 트랜젝션 개발시
    • 라이브러리 : 각 라이브러리별 메소드를 알고, 개발해야 됨
    • 프레임워크 : WCF 쓰면 내부의 세부사항은 몰라도 기능 흐름만 파악하면 되며, 코드가 주어듬

좋은 프레임워크와 효과적인 사용법

  • 일반적인 프레임워크 사용방법
    • 1) 클래스의 서브클래스 생성
    • 2) 생성된 객체의 내부환경을 설정
    • 3) 프레임워크가 제시하는 표준 방법으로 App에 적용
  • 좋은 프레임워크의 요소
    • 효율성(Effectiveness) : 개발자에게 효율적이여야, 개발 속도를 빠르게 해야, 개발비용을 줄여야 함
    • 확장성(Extensibility) : 특정 도메인의 App 개발시 개발항목을 포괄하는 확장성을 가져야 함 (App이 삼각형 윈도우를 지원해야 한다는 식의 무리한 확장성은 포함 안해도 됨)
    • 적용규모(Coverage) : 구현사항을 어느 범위까지 적용할지?
    • 평이성(Simplicity)와 이해도(Understandability) : 교육이 쉬워야, 너무 복잡하거나 추상적이면 안됨
    • 통합성(Framework Intergration) : 다른 프레임워크나 라이브러리와 상호소통이 잘되면 좋다
    • 품질(Qualities) : 능률성,적용성,표준성.. 필수항목은 아닌듯

프레임워크 도입시 고려할 점

  • 필요이상으로 복잡해지고 코드나 객체가 커지면 안됨
  • 랄프존슨 : "원할하게 일할 수 있을 만큼 이 프레임워크가 쉽게 느껴지는가?"
  • 프레임워크 도입시 더 비효율적이 될거 같으면 때려치워라! (개발비용, 교육, 문서화 작업 등...)

프레임워크 만들기

  • 추상 개념을 먼저 생각하기는 어렵다.. 먼저 구현해 보자
  • 먼저 구현 -> 문제 해결 방법을 작은 집합으로 나눔 -> 구현체 중 컨텍스트를 인자화해 변경할 수 있도록 수정
  • 도메인 전문가가 만들때 : Up-Front 디자인 방식
  • 코딩 전문가가 만들때
    • 반복적인 구현을 통해 코드를 개선해 나감
    • 반복 개발시 Hot Spots과 Frozen Spots를 잘 구분해서 다음번 개발시 잘 구성하자
    • App이 다 만들어지면 이전 프레임워크와 비교하여 재사용성 부분을 반영
  • 구현클래스에서 추상클래스 유추하기
    • 구현클래스에서 일반적인 부분들을 뽑아서 추상클래스 만들기
    • 1) 공통 기능의 구현클래스 준비
    • 2) 구현 클래스의 공통 기능을 하나의 메소드로 옮긴다.
    • 3) 옮겨진 구현 클래스의 멤버로 있는 메소드의 이름을 동일하게
    • 4) 이름을 변경한 메소드의 인자, 리턴값을 동일하게 일반화
    • 5) 해당 메소드를 분리하거나 병합할 필요시 리팩토링
    • 6) 같은 메소드명이지만 다른 구현이라면 추상클래스에서 메소드명을 반영
    • 7) 구현 클래스의 메소드 내용이 같다면 수퍼클래스로 구현을 옮김
  • 상향식 설계
    • 하향식 : 구현 클래스 먼저 만들고 이를 바탕으로 추상클래스 만듬
    • 상향식보다 쉽다.
    • R = I + J = AX + AY = A(X + Y) --> 여기서 A는 공통부분
    • 필요한 설계 원칙
      • 의존 관계 역전 원칙(The Dependency Inversion Principle)
      • 인터페이스 분리 원칙(The Interface Segregation Principle)
      • 리스코프 치환 원칙(The Liskov Substitution Principle)
      • 단일 책임 원칙(The Single Responsibility Principle)
      • 개방 폐쇄 원칙(The Open-Closed Principle)

프레임워크 개발의 9 단계

  • http://st-www.cs.illinois.edu/users/droberts/evolve.html
  • 시간축에 따라 동시에 진행할 수도 있다.
  • 1) Three Example : 세가지 애플리케이션 패턴
  • 2) White-box Framwork : 화이트박스 패턴
  • 3) Component Library : 컴포넌트 라이브러리 패턴
  • 4) Hot Spots : 핫 스팟 패턴
  • 5) Pluggable Object : 플러그러블 오브젝트 패턴
  • 6) Fine-grained Object : 파인-그레인드 객체 패턴
  • 7) Black-box Framework : 블랙박스 패턴
  • 8) Visual Builder : 비주얼 빌더 패턴
  • 9) Language Tools : 언어도구 패턴
사용자 삽입 이미지


참고사이트