소프트웨어 설계 지원 도구
UML의 이해
UML (Unified Modeling Language, 통합 모델링 언어)
UML 역사
UML 특징
UML은 가시화 언어이다
UML은 소프트웨어의 개념 모델을 시각적 그래픽 형태로 작성
표기법에 있어 심볼 각각에 대해 명확한 정의가 존재한다
=> 개발자들간 원활한 의사소통 가능
UML은 명세화 언어이다
명세화: 정확 + 명백 + 완전한 모델
UML은 소프트웨어 개발 과정인 분석, 설계, 구현 단계의 각 과정에서 필요한 모델을 정확하고 완전하게 명세화 할 수 있는 언어이다
UML은 구축 언어이다
Java, C++, Visual Basic과 같은 다양한 프로그래밍 언어로 표현
UML로 명세화된 설계 모델 -> 프로그램 소스코드 변환, 구축 가능
구축되어 있는 소스를 UML로 역변환하여 분석하는 역공학이 가능하다
UML은 문서화 언어이다
UML 용도
UML 다이어그램
13가지 다이어그램들 중에서
클래스, 컴포넌트, 디플로이먼트, 패키지, 액티비티, 시퀀스, 유스케이스, 스테이트를 그나마 많이 쓴다.
위의 다이어그램 중에서도
클래스, 시퀀스, 유스케이스 를 현업에서 많이 사용한다.
클래스 다이어그램: 클래스 명세와 클래스 간의 관계를 표현
컴포넌트 다이어그램: 파일과 데이터베이스, 프로세스와 스레드 등의 소프트웨어 구조를 표현
디플로이먼트 다이어그램: 하드웨어와 네트워크 등 시스템의 물리 구조를 표현
패키지 다이어그램: 패키지 간의 연관 관계를 표현
액티비티 다이어그램: 일련의 처리에 있어 제어의 흐름을 표현
시퀀스 다이어그램: 인스턴스 간의 상호작용을 시계열로 표현
유스케이스 다이어그램: 시스템이 제공하는 기능과 이용자의 관계를 표현
스테이트 머신 다이어그램: 인스턴스 상태 변화를 표현
다이어그램의 3분류
구조 다이어그램, 행동 다이어그램, 상호작용 다이어그램
객체지향 모델링
객체지향 개념
1970년대 이전의 소프트웨어 개발 방식 : 체계적인 계획, 설계 X, 필요할때마다 하나씩 개발
1970년대 : 프로그램을 여러개의 작은 부분으로 쪼개어 개발하는 구조적 개발 방법을 많이 사용
구조적 개발 방법?
소프트웨어를 단위 모듈로 분할하여 전체 프로그램의 구조를 세부적으로 쪼갠 다음 각 부분을 구현하고 다시 통합하여 완성하는 방법
프로그램논리와 데이터를 분리해서 설계 -> 생명주기 각 단계에서 자연스럽게 연결되지 않는다
문제점: 유지보수 비용이 많아지고 기계중심의 개발 방식이다..
=> 인간위주의 개발방법론은 없을까? => 객체지향 방법
객체지향이란
현실에 있는 사물(객체)을 그대로 이용하는 방법론
구조적 방법의 문제점을 극복하고 인간의 사고방식대로 프로그램을 개발하려는 노력으로 탄생
현실세계에 존재하는 개념들 중 소프트웨어 개발 대상이 되는 것들을 모두 객체라 할 수 있다.
객체지향 개념의 7가지
객체
객체? 우리가 살아가는 세계에 존재하거나 생각할 수 있는 것을 말한다
현실세계에 존재하는 개념들중 소프트웨어 개발 대상이 되는 것들은 모두 객체
클래스
클래스? 객체를 생성할 수 있는 구조와 정보를 가지는 틀
클래스 = 붕어빵 기계, 객체 = 붕어빵
클래스는 개념적의미, 객체는 구체적 의미
메시지
메시지? 객체들 사이의 상호작용 수단
메시지는 객체 -> 객체 특정작업 요청하는 신호
송신 객체(sender) : 메시지 보내는 객체
수신 객체(receiver) : 메시지 받아서 동작하는 객체
추상화
추상화? 현실세계에 존재하는 것을 하나의 객체로 표현하기 힘듦으로 특정 측면 강조
추상화를 통해 현실세계를 간결하고 명확하게 모델링 구현 가능
캡슐화
캡슐화? 자료와 오퍼레이션이 한 틀 안에서 결합
객체 외부에서는 내부에 접근, 조작 X
캡슐화는 클래스로 구현, 정보은닉이 가능하다 (=>높은 독립성, 유지보수성, 향상된 이식성)
상속
상속? 객체지향의 기본 개념, 프로그램을 쉽게 확장할 수 있도록 도와주는 수단
하위클래스가 상속받음으로써 이미 정의된 클래스를 재사용 및 확장
특수화 : 상위클래스 -> 하위클래스 실체화
일반화 : 하위클래스 -> 상위클래스 추상화
다형성
다형성? 여러 클래스의 같은 이름의 함수에 대해 동작은 다르게 수행
오버라이딩 방식으로 구현
상위클래스에서 상속받은 메서드를 하위클래스가 다르게 실행하고 싶을 경우
상속받은 메서드를 같은이름으로 재정의 -> 생성된 객체가 상위 클래스의 정의와 다른 동작
UML 다이어그램
UML 구성 요소
(실무에서는 굳이 분류안하고, 안쓰이지만 이론적인것은 시험에는 나옴(기사시험))
UMl 모델의 명사형
모델의 정적인 부분, 개념적/물리적 요소 표현
클래스행동사물은 UML 모델의 동적 부분
모델의 동사로서, 시간과 공간에 따른 행동을 나타낸다
교류UML 지원도구
draw.io