Class Disagram
클래스 다이어그램은 엔지니어링의 청사진이다. 그림, 기호 및 주석을 통해 시스템에 대한 정보를 제공한다.
클래스 다이어그램, 아키텍쳐 도면 및 시스템 일러스트레이션을 만들기 위한 UML(Unified Modeling Language)에 대해 간단히 정리한다.
클래스 다이어그램에는 무엇이 있는가?
클래스 다이어그램에는 클래스, 프로토콜, 속성, 메서드 및 관계가 포함된다.
클래스
네모는 클래스를 나타낸다. 아래는 매우 간단한 클래스(Dog) 다이어그램이다.
상속 관계
한 클래스가 다른 클래스에 상속(구현)됨을 나타내려면 열린 화살촉을 이용한다.
그러나 "~에서(으로부터) 상속됨(inherits from)" 대신 "이다(is a)" 라고 읽는다.
예를 들어 아래 그림은 "sheepDog은 dog으로부터 상속됨" 대신에 "sheepDog is a Dog"이라고 읽자.
사용관계(연결관계)
일반 화살촉을 사용하여 UML용어로 "연결"이라는 속성을 나타낸다.
클래스 다이어그램은 아래에서 위로, 왼쪽에서 오른쪽으로 또는 원하는 방향으로 작성할 수 있다. 방향에 관계없이 화살표 방향은 의미를 정의한다. 상속 화살표는 항상 슈퍼클래스를 가리키고 속성 화살표는 항상 속성 클래스를 가리킨다.
속성 화살표는 has로 읽어야 하며 위의 예시는 Farmer has a Dog이라고 할 수 있다.
Farmer class가 Dog클래스를 갖고있는 형태.
⭐️⭐️⭐️사용관계(의존관계)의 개념: Farmer클래스에서 Dog의 흔적이 하나라도 있으면 사용관계이다.
- Farmer에서 Dog의 객체를 property로 가지고 있는 것.
- Farmer에서 Dog의 객체를 생성하는 부분이 존재하는것.
- Farmer에서 메서드나 초기화에서 Dog를 매개변수로 받는것
- Farmer에서 Dog의 property에 접근하는 것.
- Farmer에서 Dog의 메서드에 접근하는 것..
class Farmer {
// 사용 1. Dog의 객체를 property로 가지고 있는 것.
let dog: Dog
// 사용 2. Dog객체 생성
func makeDog() -> Dog{
return Dog()
}
// 사용 3. Farmer클래스인데 매개변수로 Dog을 받는 것
init(dog: Dog) {
self.dog = dog
}
// 사용 4. Dog의 property에 접근
func printDog(){
print(dog.name)
}
// 사용 5. Dog의 메서드에 접근
func printDogMethod(){
print(dog.printName())
}
}
class Dog {
var name = "꼬물"
func printName(){
print(name)
}
}
프로토콜
또한 상자를 사용하여 프로토콜을 나타낸다. <<protocol>> 단, 클래스와 구분하기 위해 이름 앞에 적어주어야 한다.
아래는 petOwning프로토콜을 표현한 방법이다.
프로토콜 채택(구현, 준수)
점선이 있는 화살촉을 사용해 클래스가 포로토콜을 구현함을 나타낸다.
아래는 farmer클래스가 PetOwning프로토콜을 구현, 채택했다고 읽을 수 있다.
종속성(Dependency)
Dependency(종속성)을 나타내기 위해 점선이 있는 일반 화살촉을 사용한다.
UML은 종속성이 무엇인지에 대해 의도적으로 모호하다 종속성 화살표를 사용할 때 마다 목적에 주석을 달아주어야한다. 예를 들어 화살표를 사용하여 다음 사항을 나타낼 수 있다.
- weak property or delegate
- 메소드에 파라미터를 통해 전달되나 속성으로 유지되지 않는 프로퍼티들
- loose한 coupling or callback, 에를 들면 view와 controller 사이의 IBAction
예를 들어 아래는 dog을 PetOwning에 위임한다라는 것을 표현한다.