UML

juyoung999·2022년 5월 10일
0

야곰 커리어

목록 보기
8/15

통합 모델링 언어

UML(Unified Modeling Language)

소프트웨어 시스템의 시각적 모델을 만들기 위한 언어

소프트웨어 개발 시 산출물을 명세화, 시각화, 문서화할 때 사용한다.
UML은 프로세스나 방법을 안내하지 않고 표현 방법만 제시한다.


UML: 소프트웨어의 다양한 관점

  1. 기능적 관점(functional view)
    : 사용자 측면에서 본 소프트웨어의 기능을 나타낸다.
  2. 정적 관점(static view)
    : 소프트웨어 내부의 구성 요소와 구조적 관계를 나타낸다.
  3. 동적 관점(dynamic view)
    : 소프트웨어의 내부 동작을 나타낸다.


UML의 특징

  • 비주얼화
  • 명세
  • 구축
  • 문서화
  • 테스트 기준


UML 다이어그램

UML에는 여러 다이어그램이 있는데, 각 다이어그램은 소프트웨어에 대한 고객과 개발자의 관점을 다양하게 표현한 것이다.


UML의 주요 다이어그램

  • 사용 사례 다이어그램
  • 클래스 다이어그램
  • 시퀀스 다이어그램
  • 상태 다이어그램
  • 액티비디 다이어그램
  • 패키지 다이어그램
  • 배치 다이어그램



클래스 다이어그램

클래스 내부의 정적인 내용이나 클래스 사이의 관계를 표시하는 다이어그램
클래스, 속성, 오퍼레이션, 연간 관계 등을 이용하여 시스템을 정적인 관점으로 나타낸 것


클래스 다이어그램의 요소

  • 클래스(Class)
    클래스는 사각형을 세 부분으로 나누어 내용을 정의한다.

    • 클래스 이름(필수)
    • 속성
    • 메서드
  • 스테레오 타입(Stereo Type)

  • 추상 클래스/메서드


클래스 간의 관계

클래스 다이어그램의 주 목적은 클래스 간의 관계와 의존 관계를 한 눈에 파악하는 것이다.


1. 일반화

일반화는 슈퍼 클래스와 서브 클래스 간의 상속관계를 나타낸다. 일반화라는 말은 서브 클래스를 슈퍼 클래스로 일반화 하는 것이고, 슈퍼 클래스에서 서브 클래스로는 구체화한다고 표현한다.

일반화 관계는 실선과 비어있는 화살표를 이용해 서브 클래스에서 슈퍼 클래스로 연결하여 표시한다.


2. 실체화

실체화는 인터페이스의 정의만 있는 메서드를 오버라이딩하여 구현하는 것을 말한다. Swift에서는 프로토콜을 정의하고 채택하여 구현하는 과정을 말할 수 있다.

인터페이스를 클래스 처럼 표기하고 스테레오 타입으로 <>로 표시하고, 점선과 비어있는 삼각형으로 프로토콜 쪽으로 연결하여 표현한다.


3. 의존

의존은 어떤 클래스가 다른 클래스를 참조하는 것을 의미한다. 클래스 내부에서 프로퍼티로 가지지 않고 다른 클래스를 사용할 때 의존관계라고 한다.

class Schedule {
	func date() {
    	...
    }
}

class User {
	func createSchedule() -> Schedule {
    	 return Schedule()
    }
    
    func useSchedule(schedule: Schedule) {
    	schedule.date()
    }
}

위와 같은 코드 상황일 때,

점선과 함께 얇은 화살표 모양으로 사용하는 방향으로 연결하여 표시한다.


4. 연관

다른 객체의 참조를 프로퍼티로 가질 때 연관 관계라고 한다.

class Address {
	...
}

class User {
	let adress: Address
}

위와 같은 코드 상황일 때,

실선과 얇은 화살표를 이용하여 사용하는 클래스에서 사용당하는 클래스 방향으로 화살표를 연결하여 표시한다.


5. 집합, 집합연관

집합은 연관 관계를 특수하게 나타낸 것으로 전체와 부분의 관계를 가진다. 전체-부분 관계는 부분 개념이 모여서 전체 개념을 이룰 때 적용한다. 집합 관계는 전체-부분에서 부분 스스로도 존재할 수 있는 관계를 말한다.

class Wheel {
	...
}

class Vehicle {
	let wheel: wheel
    
    init(wheel: Wheel) {
    	self.wheel = wheel
    }
}

코드에서는 차이를 구문하기 힘들지만 외부에서 부분을 받아온다. 이후 전체 클래스가 deinit이 되어도 Part는 deinit 되지 않는다.

표기는 실선으로 연결한 후 전체(whole)에 해당하는 쪽에 비어있는 다이아몬드 모양으로 한다. 부분(part)쪽에는 이미 방향성이 있기 때문에 화살표를 표시해도 되고 하지 않아도 된다.


6. 합성, 복합연관

합성 역시 집합처럼 전체-부분 관계를 가지지만 합성은 전체 개념이 소멸되면 부분 개념도 소멸되는 더 강한 집합 개념이다.

표현도 역시 집합과 비슷하지만 합성은 다이아몬드 내부가 채워져있다.

class Address {
	...
}

class User {
	let address = Address()
}

부분을 전체에서 직접 생성해서 전체가 없어지면 부분도 같이 소멸된다.





참조
UML: 클래스 다이어그램
UML-Class-Diagram

profile
iOS Developer

0개의 댓글