CH6. 소프트웨어 설계 지원 도구

김유찬·2023년 4월 10일
0

소프트웨어 공학

목록 보기
6/12
post-thumbnail

■ 소프트웨어 설계 지원 도구

■ UML의 이해

□ UML(Unified Modeling Language, 통합 모델링 언어)

-통합모델링 언어
-1994년 그래디 부치, 제임스 럼바, 이바 야콥슨에 의해 연구
-1997년 객체관리그룹(OMG)에서 여러 표기법을 통합하여 UML 발표
-UML은 객체지향 시스템 개발 분야에서 가장 우수한 모델링 언어로 인식됨
-자연어로만 표기했을 때 같이 협업하는 사람들이 이해하기 어려운 부분이 존재할 수 있음, 결국 모델링 랭귀지를 쓰는 이유는 서로 잘 이해하며 협업하기 위함임

□ UML 역사

-1990년대에는 OOD/Booch, OMT, OOAD, RDD, GOOD, HOOD, OOSD, OOJSD 등과 같은 많은 방법론들은 실제 시스템을 구축하는데 있어서 각각의 객체지향 기술들이 갖는 방법과 심벌이 서로 달랐음
-호환성에 있어서 장애 존재
-UML은 많은 객체지향 방법론들 때문에 발생하는 문제점을 인식하고, 이의 해결을 위해 통합된 객체지향 모델링 언어를 정의하기 위한 노력의 결과로 탄생
-순서도 기법도 UML만큼 많이 사용됨, 대표적으로 순서도, UML, DFD, suedo code 이렇게 네 가지가 가장 많이 사용됨

□ UML 특징

  • UML은 가시화 언어이다.
    -UML은 소프트웨어의 개념 모델을 시각적인 그래픽 형태로 작성
    -표기법에 있어서는 각 심벌에 명확한 정의가 존재
    -개발자들 사이에 오류 없는 원활한 의사소통이 가능

  • UML은 명세화 언어이다.
    -명세화란 정확하고, 명백하며, 완전한 모델을 만드는 것을 의미
    -UML은 소프트웨어 개발 과정인 분석, 설계, 구현 단계의 각 과정에서 필요한 모델을 정확하고 완전하게 명세화할 수 있는 언어

  • UML은 구축 언어이다.
    -UML은 Java, C++, Visual Basic과 같은 다양한 프로그래밍 언어로 표현
    -UML로 명세화된 설계 모델은 프로그램 소스 코드로 변환하여 구축 가능
    -구축되어 있는 소스를 UML로 역변환하여 분석하는 역공학이 가능

  • UML은 문서화 언어이다.

□ UML 용도

-시스템을 만들기 전에 모델을 만든느 것은 건물을 짓기 위한 설계도처럼 아주 중요한 역할
-시스템을 만드는 데도 어휘와 규칙을 마련하여 시스템을 개념적, 물리적으로 표현하는 모델이 필요
-성공적으로 시스템을 만들기 위해서는 객체지향적인 분석과 설계를 위한 표준으로 인정받는 모델링 언어인 UML이 필요

□ UML 다이어그램

-클래스 다이어그램: 클래스 명세와 클래스 간의 관계를 표현
-복합 구조 다이어그램: 전체-부분 구조를 가진 클래스를 실행할 때의 구조를 표현
-컴포넌트 다이어그램: 파일과 DB, 프로세스와 스레드 등의 소프트웨어 구조를 표현
-디플로이먼트 다이어그램: 하드웨어와 네트워크 등 시스템의 물리 구조를 표현
-객체 다이어그램: 인스턴스 간의 연관 관계를 표현
-패키지 다이어그럼: 패키지 간의 연관 관계를 표현
-액티비티 다이어그럼: 일련의 처리에 있어 제어의 흐름을 표현
-시퀀스 다이어그램: 인스턴스 간의 상호 작용을 시계열로 표현
-커뮤니케이션 다이어그램: 인스턴스 간의 상호 작용을 구조 중심으로 표현
-인터액션 오버뷰 다이어그램: 조건에 따라 다르게 동작하는 시퀀스 다이어그램을 액티비티 다이어그램 안에 포함하여 표현
-타이밍 다이어그램: 인스턴스 간의 상태 전이와 상호 작용을 시간 제약으로 표현
-유즈케이스 다이어그램: 시스템이 제공하는 기능과 이용자의 관계를 표현
-스테이트 머신 다이어그램: 인스턴스의 상태 변화를 표현

□ UML 구성요소

사물
→ 구조사물

-시스템의 구조를 표현하는 사물
-UML 모델의 명사형/ 모델의 정적인 부분이며, 개념적/물리적 요소 표현
→ 클래스
-동일한 속성, 오퍼레이션, 관계, 그리고 의미를 공유하는 객체를 기술한 것
-클래스는 직사각형으로 표현/ 사각형 안에 이름, 속성, 오퍼레이션을 넣음

→ 통신
-교류를 정의, 서로 다른 요소와 역할들이 모여 있는 것
-행동적이고 구조적인 중요성을 가지며 하나의 클래스는 다수의 통신에 참여
-실선으로 된 사각형으로 표현하고 보통 이름을 안에 넣음

→ 유즈케이스
-유즈케이스는 시스템이 수행하는 활동들을 순차적으로 기술
-액터(행위자)에게 의미 있는 결과를 제공
-유즈케이스 모델에서 행동사물을 구조화하기 위해 사용되고 통신으로 실현
-유즈케이스는 실선으로 된 타원으로 표현하고 보통 이름을 안에 넣음

→ 컴포넌트
-컴포넌트는 시스템의 물리적이고 대체 가능한 부분
-일반적으로 클래스, 인터페이스, 그리고 통신과 같이 서로 다른 논리 요소를 물리적으로 패키지화한 것
-탭이 달린 직사각형으로 표시하며 이름을 안에 작성

→ 행동사물

-행동사물은 UML의 동적 부분
-모델의 동사로서, 시간과 공간에 따른 행동을 나타냄
→ 교류
-교류는 행동이며, 목적을 위해 객체들 간에 주고받는 메시지로 구성
-객체로 이루어진 공동체의 행동, 또는 개별 오퍼레이션의 행동을 교류로 명세화
-교류의 다양한 요소: 메시지, 활동 순서(메시지에 의해 호출되는 정도), 링크
-메시지는 직선으로 나타내고, 항상 오퍼레이션 이름을 포함

→ 상태 머신
-상태 머신은 상태의 순서를 지정하는 행동
-개별 클래스의 행동이나 여러 클래스들로 된 특정 행동을 하나의 상태로 지정
-상태 머신의 서로 다른 요소: 상태 전이(상태에서 다른 상태로의 흐름), 사건(전이를 유발시키는 것), 활동(전이에 따른 응답)
-상태는 둥근 직사각형으로 표현하며 안에 이름을 넣고, 필요시 하위 상태를 포함

→ 그룹사물

-UML 모델을 조직화 하며, 모델을 분해하고 담을 수 있는 상자를 의미
→ 패키지
-패키지는 요소를 그룹으로 묶음
-구조사물, 행동사물, 그리고 다른 그룹사물까지도 하나의 패키지 내에 들어감
-컴포넌트가 물리적인 것에 반해 해키지는 개념적(개발시에만 존재)
-패키지는 탭이 달린 폴더로 표현하며 보통 이름만 쓰는데, 때때로 그 안에 있는 내용을 표현

→ 주해사물

-UML 모델을 설명하는 부분
-주석으로서 모델에 있는 어떠한 요소에 대해서 설명하고, 비고를 표시할 때 사용
→ 노트
-노트는 하나의 요소 또는 공동체에 첨부되는 제약과 주석을 나타내기 위해 사용
-노트는 접힌 직사각형으로 표현되며, 문자와 그래픽을 함께 나타낼 수 있음

■ 객체지향 모델링

  • 1970년대 이전의 소프트웨어 개발 방식
    -체계적인 계획이나 설계 없이 프로그램들을 필요할 때마다 하나씩 개발하여 최종 시스템에 맞추어 나가는 방식으로 진행

  • 1970년대
    -프로그램을 여러 개의 작은 부분으로 쪼개어 개발하는 구조적 개발 방법이 많이 사용
    →구조적 개발 방법
    -소프트웨어를 단위 모듈로 분할하여 전체 프로그램의 구조를 세부적으로 쪼갠 다음 각 부분을 구현하고, 다시 통합해서 완성하는 방법
    -프로그램의 논리와 데이터를 분리해서 소프트웨어를 설계하기 때문에, 생명주기 각 단계에서 단계별로 자연스럽게 연결되지 않음
    -문제점: 유지보수 비용이 많이 발생 / 기계 중심의 개발 방식

  • 객체지향이란
    -구조적 방법의 문제점을 극복하고, 인간이 사고하는 방식대로 프로그램을 개발하려는 노력으로 탄생
    -현실세계에 존재하는 실체 및 개념들을 객체라는 독립된 단위로 구성하고, 이 객체들이 메시지를 통하여 상호 작용함으로써 전체 시스템이 운영되는 개념

□ 객체지향 개념

  • 객체

    -객체란 우리가 살아가는 세계에 존재하거나 생각할 수 있는 것을 말함
    -현실세계에 존재하는 개념들 중 소프트웨어 개발 대상이 되는 것들은 모두 객체라고 할 수 있음

  • 클래스

    -객체를 생성할 수 있는 구조와 정보를 가지는 틀
    -붕어빵 기계를 클래스라고 하면 이 기계에서 나오는 붕어빵은 객체
    -클래스는 개념적인 의미이며, 객체는 구체적인 의미
    -클래스에서 생성된 객체들은 같은 속성과 같은 오퍼레이션에 대한 정의를 가짐

  • 메시지

    -객체들 사이의 상호작용 수단이 바로 메시지
    -메시지는 어떤 한 객체가 다른 객체에게 특정 작업을 요청하는 신호
    -메시지를 보내는 객체를 송신 객체(Sender)라 하고, 메시지를 받아서 동작을 수행하는 객체를 수신 객체(Receiver)라 함
    -함수의 호출과는 조금 다름

    메시지= 수신객체 이름 + 오퍼레이션 이름 + 매개변수

  • 추상화

    -추상화란 현실세계에 존재하는 것을 하나의 객체로 표현한다면 너무 복잡해지므로, 특정 측면을 강조하여 나타내는 것
    -추상화를 통하여 실세계 상황을 간결하고 명확하게 모델링하여 구현

  • 캡슐화

    -캡슐화란 자료와 이 자료를 처리하는 오퍼레이션이 한 틀 안에서 결합되어 객체라는 단위로 묶여서 사용되는 것
    -객체 외부에서는 객체 내부 정보를 직접 접근하거나 조작할 수 없고, 외부에서 접근할 수 있도록 정의된 오퍼레이션을 통해서만 관련 데이터에 접근
    -캡슐화는 클래스로 구현
    -캡슐화를 통하여 정보 은닉이 가능
    -정보은닉은 보다 높은 독립성, 유지보수성 그리고 향상된 이식성을 제공
    -ex) 주민등록번호 같은

  • 상속

    -객체지향의 기본 개념으로, 프로그램을 쉽게 확장할 수 있도록 도와주는 수단
    -상위 클래스의 모든 특성을 하위 클래스가 이어받음으로써 이미 정의한 클래스를 재사용하고 확장할 수 있도록 지원하는 개념
    -상위 클래스의 속성을 상속받아 하위 클래스에서 실체화 시키는 관계를 특수화라고 하고, 반대로 하위 클래스의 공통적인 특성을 추상화 하여 상위 클래스로 정의하는 것을 일반화라고 함

  • 다형성

    -여러 클래스에 같은 이름의 함수가 존재하지만 동작은 다르게 수행함을 의미
    -객체지향 언어에서 메서드 오버라이딩 방식으로 구현
    -상위 클래스에 메서드가 정의되고 그 메서드를 하위 클래스에서 상속받아 그대로 사용할 수 있지만, 하위 클래스의 객체가 다른 방법으로 동작을 해야하는 경우에는 상속받은 메서드를 같은 이름으로 재정의함으로써 생선된 객체가 상위 클래스의 정의와는 다른 동작을 할 수 있도록 구현

profile
eukddan

0개의 댓글