티스토리 뷰

iOS/Swift-Memo

UML(Unified Modeling Language)

malrang-malrang 2022. 4. 29. 19:21

UML

swift 는 UML 을통해 100% 표현할수 없다.

UML정의

UML: Unified Modeling Language

통합 모델링 언어 UML 은 소프트웨어 공학에서 사용되는 표준화된 범용 모델링 언어이다.
UML 은 소프트웨어 집약 시스템의 시각적 모델을 만들기 위한 도안 표기법(클래스 다이어그램)을 포함한다.

개요

모델을 만드는 표준 언어 라고 할수있다.
UML은 객체지향 프로그래밍 소프트웨어 를 개발할 때 명세화, 시각화, 문서화 하기 위해 사용할수 있다.

UML을 이용해 시스템의 구조적 청사진을 시각화 하는 표준안을 제공할수 있다.

모델 이란 것은 어떤 것을 실제로 만들때 이렇게 만들면 잘 작동할지 미리 검증해 보는 것이며 실제 물건을 만드는 비용보다 비용이 훨씬 적을 경우에 모델을 만들어 설계를 검사한다.

UML을 사용 하는 유형

  • 다른 사람들과의 의사 소통 또는 설계 논의
  • 전체 시스템의 구조 및 클래스의 의존성 파악
  • 유지보수를 위한 설계의 back-end 문서

UML은 습관적으로 만드는게 아니라 필요에 의해 만드는것이다.

UML 구성요소

소프트웨어 개발 방법론
UML 그 자체는 개발 방법이 아니지만[5] 그 당시 주도적이었던 객체 지향 소프트웨어 개발 방법론(예를 들면 Booch 방법론, 객체 모델링 기법, Objectory)과 잘 어울리도록 설계되었다. UML 발전해 감에 따라서 UML의 장점을 취하기 위해 몇몇 다른 방법론(예를 들면 객체 모델링 기법)이 개선되었다. 또 UML을 기반으로 한 새 방법론이 만들어지기도 했는데 IBM 래셔널 통합 프로세스(RUP)가 가장 유명하다. 이 외에도 추상 방법론(Abstraction Method), 동적 시스템 개발 방법론 등 더 특수한 해결책이나 다른 목적을 달성하기 위해 설계된 UML 기반의 방법론이 많이 있다.

모델
UML의 여러가지 그래픽 요소는 하나의 큰 그림, 즉 다이어그램을 그리는데 사용된다. UML은 언어이기 때문에, 이들 그래픽 요소들을 맞추는 데에는 규칙이 필요하다. 다이어그램의 목적은 시스템을 여러가지 시각에서 볼 수 있는 뷰(View)를 제공하는 것이며, 이러한 뷰의 집합을 모델(Model)이라고 한다. 시스템의 UML 모델은 건물을 짓는 건축가의 스케일 모델과도 비슷하다고 말할 수 있다. UML 모델은 시스템 자체의 “목적 행동”을 설명하는 언어이다. UML 모델은 시스템의 “구현 방법을 설명하는 수단”이 아니다.

다이어그램

UML 은 구조 다이어그램 7개 행위 다이어그램 7개 총 14 종류의 다이어그램이 존재한다.

구조 다이어 그램

  • 시스템의 개념, 관계 등의 측면에서 요소들을 나타내고 각 요소들의 정적인 면을 보기 위한 것.
  • 클래스 다이어그램 은 구조 다이어 그램에 해당됨.

행위 다이어그램

  • 각 요소들 혹은 요소들간의 변화나 흐름, 주고받는 데이터 등의 동작을 보기 위한 것.

클래스 다이어 그램

클래스 다이어 그램 은 내부의 정적인 내용이나 클래스 사이의 관계를 표기하는 다이어 그램으로 시스템의 일부 또는 전체의 구조를 나타낼수 있다.

클래스 다이어 그램은 의존 관계를 명확히 보게 해주며, 순환 의존이 발생하는 지점을 찾아내어 순환 고리를 깨는 좋은 방법을 결정할수 있게 해준다.

UML 은 목적에 따라 다르게 사용 되는데 크게 3가지로 나뉜다.

  • 개념
    • 도메인의 구조를 나타내며 사람이 풀고자 하는 문제 도메인 안에 있는 개념과 추상적 개념을 기술하기 위한것.
    • 소스코드 보다 사람의 자연언어와 관련이 있다.
  • 명세, 구현
    • 소프트웨어의 설계 혹은 완성된 소프트웨어의 구현 설명 목적 등으로 사용함.
    • UML 을 이용해 설계하여 소스코드로 바꾸거나 구현된 소스코드를 설명하기위해 사용됨.
    • 제약이 많아 규칙과 의미를 지키도록 하고 모호성이 없도록 형식을 맞춰야 한다.

클래스 다이어 그램의 요소(Element)

Class

  • 클래스는 3개의 구획(compartment)로 나누어 클래스의 이름, 속성, 기능 을 표기한다. 속성과 기능은 생략할수 있지만 이름은 필수이다.

클래스의 세부사항은 프로퍼티,메서드,접근제한,데이터타입,매개변수,리턴 타입 등을 나타낼수 있다.

다이어 그램은 코드의 선언 부가 아니기 때문에 다이어그램을 그리는 목적에 필요한것만 작성하는것이 좋다.

3개의 구획을 주로 사용하지만 이유가 있다면 추가로 구획을 나누어 사용할수 있다.

Stereo Type(스테레오 타입)

  • UML 에서 제공하는 기본요소 외에 추가적인 확장 요소를 나타내는것.
  • 쌍 꺾쇠와 비슷하게 생긴 길러멧(guillemet, << >>)사이에 작성한다.

스테레오 타입으로 많이 사용 종류

  • <>(enum)
  • <>
  • <>>
  • <>>

Abstract Class/Method (추상클래스/ 메서드)

추상 클래스란 1개 이상의 메서드가 구현부가 없고 이름과 무엇을 하는지만 존재하는 클래스를 말한다.

공식적인것은 아니지만 스테레오 타입을 사용하여 추상 클래스를 표기하기도 한다.

클래스의 관계

클래스 다이어 그램의 주목적은 클래스간의 관계를 한눈에 쉽게 보고 의존관계를 파악 하는것에 있다.
그렇기 때문에 클래스 다이어 그램에서 가장 중요한것은 클래스 끼리의 관계 이다.

Generalization(일반화)

Generalization 은 슈퍼(부모)클래스와 서브(자식)클래스간의 Inheritance(상속) 관계를 나타낸다.

여기서 일반화 란 서브클래스가 주체가되어 슈퍼클래스로 화살표 방향을 취하는 형태가 된다.

반대의 개념은 슈퍼 클래스를 서브 클래스로 Specialize(구체화)하는것이다.
상속은 슈퍼 클래스의 프로퍼티 및 메서드를 구체화 하여 사용하거나 프로퍼티, 메서드를 추가 또는 overriding(오버라이딩) 하여 사용할수있다.

Realization(실체화)

Realization 은 interface 의 spec(정의)만 되어있는 메서드를 오버라이딩 하여 실제 기능으로 구현하는 것을 말한다.

프로토콜을 채택한후 메서드의 구현부를 만들어주는것이 이에 해당된다.

Dependency(의존)

Dependency 는 클래스 다이어그램에서 일반적으로 제일 많이 사용되는 관계.
어떤 클래스가 다른 클래스를 참조하는지 를 말한다.

참조의 형태는 메서드 내에서 대상 클래스의 객체 생성, 객체 사용, 메서드 호출, 객체 리턴, 매게변수 로 해당객체를 받는것 등을 말하며 참조를 게속 유지하지는 않는다.
잠깐 데려다가 값을 바꾼 다거나 하는행위?

Association(연관), Directed Association(방향성 있는 연관)

클래스 다이어그램에서 Association(연관) 은 보통 다른 객체의 참조를 가지는 필드를 의미한다.

의존과 연관의 차이..?
의존은 의존하는 코드를 없애면 비교적 조금 에러가나는데
연관은 연관된 코드를 없애면 많이 망가진다..? 라는 느낌

Aggregation(집합)

Aggregation 은 Shared Aggregation 라고도 한다.
타입의 관계에 있어 전체와 부분 의 관계를 나타낸다.
말그대로 집합 의 개념인것 같다.

이때 전체에 해당 하는 부분이 비어있는 다이아몬드 표시 쪽이다.

Composition(Composition Aggregation, 합성)

Composition(합성) 도 Aggregation(집합) 과 비슷하게 전체와 부분의 집합관계를 나타내지만 개념적으로 집합보다 더강한 집합을 의미한다.

전체에 해당하는 부분이 채워져 있는 다이아몬드 표시 쪽이다.
뭔가 클래스나 구조체 내부에 클래스나 구조체가 있는 형태이지 않을까 생각함.

집약과 합성 예시? - 정확한 예시는 아님
강한관계와 덜강한 관계로 표현하기도함
집약은 Colleage가 사라져도 Student는 남아있고 합성은 Colleage가 사라지면 Student도 사라진다?

집약 - 댓글은 게시글에 포함되지만 게시글을 삭제한다해도 댓글은 내가 쓴 댓글목록에서 확인할 수 있습니다.
합성 - 게시물을 삭제할 경우 댓글도 함께 삭제됩니다.

참고 사이트

'iOS > Swift-Memo' 카테고리의 다른 글

ARC 자동 참조 카운팅 (Automatic Reference Counting)  (0) 2022.07.04
Hash Table과 Hashable  (0) 2022.06.18
ARC, 순환참조 해결법  (0) 2022.04.29
Closure, Capturing Values  (0) 2022.04.29
sync, async 사용법  (0) 2022.04.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함