• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 기능과 구조 설계
        2023년 02월 23일
        • starryeye
        • 작성자
        • 2023.02.23.:28

        모든 소프트웨어 제품의 설계에는 두 가지 측면이 존재한다.

        하나는 기능 측면의 설계이고..

        다른 하나는 구조 측면의 설계이다.

         

        기능 측면의 설계는 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다.

        구조 측면의 설계는 제품의 형태가 어떠해야 하는지에 초점을 맞춘다.

         

        설계의 가장 큰 도전은 기능과 구조라는 두가지 측면을 함께 녹여 조화를 이루도록 만드는 것이다.

         

        소프트웨어 분야에서 예외가 없는 유일한 규칙은 요구사항이 항상 변경된다는 것이다.

        설계라는 행위를 중요하게 만드는 것은 변경에 대한 필요성이다.

         

        훌륭한 소프트웨어 설계자는 사용자가 만족할 수 있는 훌륭한 기능을 제공하는 동시에

        예측 불가능한 요구사항 변경에 유연하게 대처할 수 있는 안정적인 구조를 제공하는 능력을 갖춰야한다.

         

        그렇다면..

        좋은 소프트웨어 설계란 무엇인가..

         

        나중에라도 변경할 수 있는 여지를 남겨 놓는 설계이다.

        설계를 하는 목적은 나중에 설계하는 것을 허용하는 것이며,

        설계의 일차적인 목표는 변경에 소요되는 비용을 낮추는 것이다.

         

        변경에 대비하고 변경의 여지를 남겨 놓는 가장 좋은 방법은

        자주 변경되는 기능이 아닌 안정적인 구조를 중심으로 설계하는 것이다.

         

        객체지향에서의 좋은 설계로의 접근방법

        자주 변경되지 않는 안정적인 객체 구조를 바탕으로 시스템 기능을 객체 간의 책임으로 분배한다.

        객체의 구조에 집중하고 기능이 객체 구조를 따르게 만들자.

        그러면, 시스템 기능은 더 작은 책임으로 분할되고 적절한 객체에게 분배되기 때문에

        기능이 변경되더라도 객체 간의 구조는 그대로 유지된다.

         

        이것이..

        객체를 기반으로 책임과 역할을 식별하고 메시지를 기반으로 객체들의 협력 관계를 구축하는 이유이다.

        안정적인 객체 구조는 변경을 수용할 수 있는 유연한 소프트웨어를 만들 수 있는 기반을 제공한다.

         

         

        "객체지향의 사실과 오해" 책에서 발췌

        'OOP' 카테고리의 다른 글

        기능과 구조의 통합 (feat. 책임-주도 설계)  (0) 2023.02.23
        도메인 모델  (0) 2023.02.23
        책임의 자율성이 협력의 품질을 결정  (0) 2023.02.21
        책임, 메세지 그리고 인터페이스  (0) 2023.02.13
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바