일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- API
- LINUX MASTER
- Kubernetes
- Powershell
- ChatGPT
- GoogleDrive
- suricata
- cloud
- Python
- OSS
- KAKAO
- Rocky Linux
- git
- ICT멘토링
- Spring Boot
- C언어
- VSCode
- Docker
- 코딩도장
- 고등학생 대상
- rnn
- 국가과제
- Resnet
- 인터넷의이해
- colab
- Machine Learning
- Github
- Spring
- Database
- 크롤링 개발
- Today
- Total
코딩두의 포트폴리오
Chapter #5: 모델링 본문
모델링
도메인 지식을 체계화하는 과정
중요한 도메인 개념과 특성, 관계를 파악 -> 다이어그램으로 정형화
모델링 과정
5.1 객체지향 개념
모델링이 개발자에게 주는 도움
- 응용문제 이해에 도움을 줌
- 개발팀원들 사이에 응용문제의 공통 개념으로 대화하게 하고 개선시킴
- 파악한 개념을 사용자와 고객에게 전달 할 때 도움을 줌
- 설계, 구현, 테스팅, 유지보수에 개념적인 기준 제공
객체지향 장점
- 개발자가 설계를 작성하고 이해하기 쉬움
- 자료와 함수를 함께 추상화 -> 변화의 영향 적게 받음
- 사용자 중심, 대화식 프로그램의 개발에 적합
- 프로그램을 뚜렷하게 구별되는 (클래스)단위(object)로 분할 가능
객체지향 vs 절차적 방법
객체지향은 주어진 문제 영역을 그 안에 존재하는 객체의 집합으로 봄
객체들은 서로 정보를 주고받아 상호 작용
클래스, 객체
클래스: 속성과 오퍼레이션(동작)을 캡슐화
객체: 클래스의 인스턴스
객체, 속성
객체: 속성, 오퍼레이션을 가진 애플리케이션의 독립된 존재
속성: 객체의 특징을 결정
객체의 구조 = 자료구조 + 함수
객체는 상태(속성값에 의해 결정), 능력(함수), 정체성(속성에 의해 구별)을 가짐
캡슐화
속성과 관련된 오퍼레이션을 클래스 안에 묶어서 하나로 취급하는 것
ex) 대학 학사 관리 시스템
데이터 -> 학번, 이름, 주소 캡슐화
함수 -> 평점 계산, 주소 변경, 수강 신청 캡슐화
추상화의 수단
객체의 속성, 오퍼레이션 등의 세부사항은 차후에 생각
정보은닉
캡슐 속에 있는 항목에 대한 정보를 외부에 감추는 것
연관
객체는 일반적으로 상호작용하여 동작
객체에 있는 서비스를 호출 -> 두 객체는 관계가 맺어져야 함
상호작용할 필요가 있는지 찾아내는 작업이 필요
연관은 하나 또는 그 이상의 클래스와의 관계
가시성(visibility): 객체의 접근 가능성
연관을 맺은 두 객체가 서로를 알게 하고 접근하게 하는 방법
연관된 객체를~~~
전역으로 선언 -> 클라이언트 객체가 접근할 수 있게 함
클라이언트 객체의 메시지 호출 오퍼레이션 매개변수로 만듬
클라이언트 객체의 일부로 만듬
클라이언트 객체에서 선언
집합(aggregation)과 합성(composition)
집합 관계
전체 개념(whole)과 부분 개념(part) 사이의 관계, 전체가 없어도 부분은 존재
합성 관계
전체 개념(whole)과 부분 개념(part) 사이의 관계, 전체가 없으면 부분도 없음
상속(inheritance)
상속의 의미
한 클래스가 다른 클래스의 일반화된 개념인 경우 성립
슈퍼클래스, 서브클래스
복수상속 - 두 개 이상의 수퍼 클래스에서 상속 받음
다형성(polymorphism)
다형성의 정의 - 여러 형태를 가지고 있다(받아들일 수 있다)
같은 이름의 메시지를 다른 객체나 서브클래스에서 호출 - ex) getarea() 도형의 모양이 달라도 호출
메소드: 특정한 클래스를 위하여 오퍼레이션을 구현
하나 이상의 메소드를 가진 오퍼레이션 - 매개변수나 객체가 속한 클래스의 이름으로 구분
장점: 현재 코드를 변경하지 않고 새로운 클래스를 쉽게 추가 가능
getArea()의 호출: twoDShape 가 circle, rectangle, polygon 중 어떤 object 냐에 따라 다른 method
- twoDShape.getArea();
5.2 UML (Unified Modeling Language)
객체지향 SW를 모델링하는 표준 그래픽 언어
- 시스템의 여러 측면을 그림으로 모델링
- 하드웨어의 회로도 같은 의미
UML = OMT(Object Modeling Technigue) + OOSE(Object-Oriented Software Engineering)
UML 다이어그램
시스템의 모델링은 기능적 관점, 구조적 관점, 동적 관점으로 구성
UML 모델링 과정
➊ 요구를 사용 사례로 정리하고 사용 사례 다이어그램을 작성
➋ 클래스 후보를 찾아내고 개념적인 객체 모형을 작성
➌ 사용 사례를 기초하여 순서 다이어그램을 작성
➍ 클래스의 속성, 오퍼레이션 및 클래스 사이의 관계를 찾아 객체 모형을 완성
➎ 상태 다이어그램이나 액티비티 다이어그램 등 다른 다이어그램을 추가하여 UML 모델을 완성
➏ 서브시스템을 파악하고 전체 시스템 구조를 설계
➐ 적당한 객체를 찾아내거나 커스텀화 또는 객체를 새로 설계
5.3 정적 모델링
정적 모델: 시간의 개념이 개입되지 않은 모델
- 클래스 다이어그램이 대표적
클래스 다이어그램: 객체, 클래스, 속성, 오퍼레이션, 연관 등을 표현
클래스의 표현
클래스 심볼
- 3개의 부분으로 나누고 위부터 차례대로 클래스 이름, 클래스 속성, 오퍼레이션
- 추상클래스는 이탤릭체, 인터페이스 클래스는 <<interface>> 추가
속성
- 객체가 가지는 모든 필드 포함
오퍼레이션 / 메소드
아주 흔한 메소드(get/set)는 생략
관계의 표현
연관(association)
- 객체 사이에 관련
집합(aggregation)
- 어떤 클래스가 다른 클래스의 모임으로 구성
합성(compostion)
상속(inheritance)
- 일반화된 개념의 클래스, 더 구체적인 개념의 클래스 사이의 관계
- 일반화
클래스 다이어그램 작성 과정
Step 1 클래스가 될 만한 후보를 파악
Step 2 가장 중요한 클래스를 시작으로 연관 , 상속, 속성을 추가
Step 3 클래스의 주요 임무(responsibility)를 찾아내어 오퍼레이션으로 추가
클래스 찾기
- 도메인 개념 / 사용 사례로부터 클래스가 될 만한 것을 찾는 일
- 클래스가 될 수 있는 요소
(구조, 외부 시스템, 디바이스, 역할, 운용 절차, 장소, 조직, 완성된 시스템에 의하여 조작되어야 할 정보)
엔티티 클래스 찾기: 시스템에서 영구적으로 저장되어 사용될 자료를 보관하는 역할을 하는 class
사용 사례/use case를 이해하기 위하여 사용자와 개발자가 명확히 규정한 용어
사용 사례에서 반복되어 나오는 용어 (예를 들면 Video Tape)
시스템이 계속 추적하여야 하는 실세계의 엔티티 (예를 들면 Rental, Title)
자료저장소 또는 단말(예를 들어 Scanner)
자주 사용하는 응용 도메인의 용어 (예를 들어 Customer)
경계 클래스 찾기: 시스템 외부의 액터와 상호작용하는 class, 사용자 인터페이스를 제어하는 역할
사용자가 자료를 시스템에 입력하기 위하여 필요한 양식과 윈도우를 찾음 (예를 들면 RentalUI, ReportRental)
시스템이 사용자에게 반응하는 메시지나 알림을 찾음 (예를 들어 PendingRentalNotice)
인터페이스가 시각적으로 어떻게 보이는지는 경계 객체에 모형화 하지 않음
인터페이스를 나타내는 사용자 언어는 구현 기술과 관련 없는 용어 사용
제어 클래스 찾기: 경계 클래스와 엔티티 클래스의 중간 역할
사용 사례가 복잡하여 소규모의 이벤트로 분할해야 한다면 하나 이상의 사용 사례 당 1 개의 제어 클래스를 찾음
사용 사례에서 액터 하나 당 하나의 제어 클래스를 찾음
제어 클래스는 사용 사례 또는 사용자 세션 안에서만 유효 . 제어 클래스가 활성되는 시점과 끝이 명확하지 않다면 사용 사례가 명확히 파악되지 못한 것
연관 찾기
연관(association): 어떤 클래스의 인스턴스가 작업을 수행하기 위하여 다른 클래스를 알아야 함
연관의 속성
이름 - 두 클래스 사이의 연관 관계 나타냄
역할 - 연관 관계의 양쪽 끝에 있는 클래스 기능을 나타냄
다중도 - 연관 관계를 구성하는 인스턴스 개수
속성 추가
속성: 개별 객체들이 가지는 특성
속성의 요소
이름 - 객체 안에서 구별할 수 있는 속성의 이름 . 예를 들어 VideoTape은 PurchaseDate와 Supplier 속성을 가짐. PurchaseDate은 테이프를 구매한 날짜이며 Supplier는 비디오 공급업체를 나타냄
간단한 설명 - 구현하는 프로그래머를 위하여 간단히 설명을 첨가
속성값의 타입 - 예를 들어 Name 속성은 스트링. 또한 Status는 열거형으로 rentable, rented, returned라는 값을 가질 수 있음
클래스 다이어그램 작성
5.4 동적 모델링
동적 모델링: 클래스들의 상호작용이나 클래스의 상태 변화 등 시스템 내부 동작을 모델링
동적 모델링의 3가지 다이어그램
인터랙션(interaction) 다이어그램 : 사용 사례를 실현시키기 위하여 내부 클래스들이 어떻게 협동하는지 나타내는 그림sequence diagram, communication diagram
상태(state) 다이어그램 : 복잡한 객체의 상태 변화를 나타낸 것
액티비티(activity) 다이어그램 : 절차나 작업의 흐름을 나타낸 것
시퀀스 다이어그램의 요소
시스템의 동작을 정형화하고 객체들의 메시지 교환을 울타리 형태로 시각화하여 나타낸 것
참여객체
Step 1. 참여하는 객체를 파악
Step 2. 파악한 객체를 X축에 나열하고 라이프라인을 그음
Step 3. 사용사례에 기술된 이벤트 순서에 따라 객체의 메시지 호출
Communication diagram
Class 간의 위임과 전달의 관계를 네트워크 형태로 더 명확히 보여줌 .
Object 들이 정적으로 어떻게 연결되었는 지를 보여붐 .
box는 class(object)를 나타냄.
화살표는 message 전달을 나타냄.
Message 호출의 순서는 숫자로 표시됨
상태 다이어그램
객체가 가질 수 있는 가능한 상태 표현
이벤트 - 서브시스템 또는 객체나 컴포넌트에 대하여 요청, 관심이 일어난 것
상태 - 이벤트의 발생으로 들어가거나 빠져 나오게 되는 서비스시템 또는 객체의 조건을 추상적으로 이름 붙여 놓은 것
상태 다이어그램을 모델링하기에 적합한 속성의 조건
- 속성의 값으로 가질 수 있는 종류가 적어야 함
- 속성의 값에 따라 허용되는 오퍼레이션이 제한되어야 함
액티비티 다이어그램
시스템의 동적인 부분을 모델링하는 목적
액티비티 상의 제어흐름을 보여 주는 일종의 흐름도
액티비티 다이어그램의 사용
-> 시스템의 수준에서 시스템과 상호작용하는 각 엑터의 관점에서 모델링
-> 복잡한 오퍼레이션의 수행 흐름을 표현(method 수준)
5.5 모델링 도구
ex) StarUML
UML 도구의 기능
- 프로젝트 관리, 코드 및 문서 생성, 모델 검사
'Software Engineering' 카테고리의 다른 글
Chapter #4: 요구 분석 (1) | 2024.10.21 |
---|---|
Chapter #3: 프로젝트 관리와 계획 (0) | 2024.10.21 |
Chapter #2: 프로세스와 방법론 (4) | 2024.10.21 |
Chapter #1: SW 소개 (0) | 2024.10.21 |