본문 바로가기
컴퓨터과학/소프트웨어공학

[소프트웨어공학] 설계 2 - 객체 지향, 클래스 다이어그램, 시퀀스 다이어그램

by 윤호 2021. 5. 17.

Github로 보기


객체 지향 개념

객체란

  • 특성(Attribute)행위(Behavior)를 가지고 있는 인지할 수 있는 개체(Entity)
    • 특성: 해당 객체에 저장되어 있는 데이터
    • 행위: 객체가 할 수 있는 일, 객체의 상태가 변하게 하는 원인을 제공
  • 다른 객체와 구별할 수 있는 정체성(identity)를 가짐

클래스와 객체

클래스

  • 여러 객체들의 공통된 속성을 나타내기 위한 대표적 구조
  • 객체들이 내부적으로 어떠헥 구성되어 있는지 설명

객체

  • 클래스의 실체(instance)라고도 함
  • 각 객체 속성은 같지만 서로 독립적임

객체지향 방법의 특징

절차를 강조하는 구조적 방법은 데이터를 소홀히 하게됨

객체지향 방법의 특징

  • 시스템을 구성하는 요소들은 객체로
  • 시스템 개발의 복잡한 문제들을 캡슐화, 상속, 다형성 개념으로 해결하려 함

캡슐화

  • 객체 내부에 가진 상세한 정보와 처리 방식을 외부로 부터 감추는 것
  • 은닉성을 보장 (의존성을 낮춤 -> 유지보수를 용이하게함)
  • 변수에 직접 접근 못하도록 하고 getter, setter를 사용
  • public은 외부에 공개, private은 공개X -> public은 함부로 수정해선 안됨

상속

  • 다른 클래스의 속성을 물려받아 내 것처럼 쓰는 것

image-20210511144842389.png

다형성

  • 하나의 인터페이스를 통해 서로 다른 구현을 제공하는 것
Car truck = new truck();
Car Bus = new bus();

UML 기반 설계

UML : 객체지향 기반 모델링 언어

4+1 View

시스템 개발 이해관계자들 마다 역할 및 관점이 다름

  • 각각의 관점을 중점으로 시스템을 정의함

image-20210511145707178.png

유스케이스 관점 (What)

  • 모든 이해관계자가 시스템에 대해 이해할 수 있도록 요구사항을 정의
  • 모든 개발의 기반
  • UML-diagram : Uscase Diagram

논리 관점 (How)

  • 기능들을 프로그래밍 시각으로 변경
  • 객체를 추출하고, 객체들의 세부적인 속성과 동작에 대해 정의

프로세스 관점

  • Integrator가 이해관계자들이 수행한 작업을 통합하기 위해 사용
  • 시스템 개발 전반의 작업 수행 주체작업의 흐름 정의

개발 관점

  • 실제 코드를 작성하는 개발자들의 관점에서 정의
  • 계층 구조, 제약 사항, 코드 재사용 등과 같은 시스템 구현을 위한 요건을 정의

물리 관점

  • 설치 방법과 실행 환경

Tip

프로젝트를 진행할 때 UML overuse를 피하자

책 - UML, 실전에서는 이것만 쓴다 (로버트 C 마틴)

클래스 다이어그램

클래스들과 그들의 관계를 나타내는 다이어그램

구성 요소와 표기법

클래스

  • 클래스이름, 특성, 메소드 등으로 구성

    image-20210511150909547.png

관계

  • 종류

    • 일반화(generation): 상속 받은 경우

      image-20210511151747285.png

    • 연관(directional association): 클래스가 의존하고 있는 경우 (서로 영향을 미치슨 경우)

      image-20210511151753299.png

      • 직접 연관: 하나의 클래스만 다른 클래스의 행위를 요청하고 사용하는 관계

      image-20210511152542921.png

    • 집합(aggregation): 여러 개의 독립적 클래스들이 하나의 클래스를 구성하는 경우

      image-20210511152548995.png

  • 다중성: 클래스들에게 허용되는 객체의 수

    표현 방법 내용
    1 한 객체와 연관된다.
    0..1 0개 또는 1개의 객체와 연관된다.
    0..* 0개 또는 그 이상의 객체가 연관된다.
    n n개의 객체와 연관된다.
    n..m n개에서 m개까지의 객체가 연관된다.

클래스 다이어그램 작성

먼저 어떤 종류의 클래스들이 있고, 그 클래스들이 어떤 역할을 하는지를 알아야 한다.

클래스 타입

  • 경계 클래스(Boundary)
    • 시스템 외부의 액터와 상호작용하는 클래스 - 사용자 인터페이스의 역할
    • 화면 요구사항을 참고해 클래스 추출
  • 제어 클래스(Control)
    • 경계 클래스와 엔티티 클래스의 중간 역할을 담당
    • 유스케이스를 참고해 클래스를 추출
  • 엔티티 클래스(Entity)
    • 문제 영역을 구성하는 컴포넌트
    • 명사 추출법을 이용해 추출
      • 요구사항의 명사들을 식별한 후 적당하지 않은 명사들을 삭제해 엔티티 클래스를 추출

시퀀스 다이어그램

  • 객체들 사이 시간에 따라 발생하는 상호작용을 보여주는 다이어그램
  • 유스케이스 기술서를 바탕으로 작성된 요구사항과 클래스 다이어그램을 기반으로 작성

image-20210611170024760.png

구성 요소와 표기법

  • 객체, 액터
  • 라이프라인
  • 활성화
  • 메시지

구현

  • 설계의 최하위 상세화 과정
  • 코드 작성, 디버깅, 통합, 개발자 테스트 작업을 포함

코딩 스타일

  • SW 개발은 유지보수의 비중이 가장 크기 때문에 약속된 코딩 스타일이 중요함

  • 회사마다 언어마다 스타일 가이드가 있음

  • 코딩은 깔끔하고 읽기 쉬운 코드가 제일 중요함

코딩 스타일

  • 한 줄에 한 문장만
  • 선언문과 실행문을 구분
  • 괄호가 문장의 이해를 돕는다면 적극 활용

SOLID 원칙을 따르는 설계를 하도록 노력할 것


reference

  • 상명대학교 한종대교수님 소프트웨어공학 수업

댓글