[Swift] Class Diagram + 스터디
Swift Class Diagram
✅ 아래 글과 디자인패턴 스터디를 기반으로 작성하였습니다.
✅ How to Read a Class Diagram
클래스 다이어그램은 엔지니어링의 청사진이다. 그림, 기호 및 주석을 통해 시스템에 대한 정보를 제공한다.
클래스 다이어그램, 아케텍쳐 도면 및 시스템 일러스트레이션을 만들기 위한 UML(Unified Modeling Language)에 대해서 간단히 정히다로고 하겠다.
✅What’s in a class diagram?
클래스 다이어그램에서는 classes, protocols, properties, methods and relationships이 포함됩니다.
🟠 박스는 클래스를 의미하며 아래의 매우 간단한 클래스 다이어그램 dog이다.
🟠 한 클래스가 다른 클래스에 상속됨을 나타내려면 열린 화살촉을 사용하자.
🟠 그러나 "~에서(으로부터) 상속됨(inherits form)" 대신에 "이다(is a)라고 읽자.
예를 들면 아래 그림은 sheepDog은 dog으로부터 상속됨 대신에 sheepDog is a Dog이라고 읽자.
🟠 plain 화살표를 사용하여 UML용어로 "연결"이라는 속성을 나타낸다.
클래스 다이어그램은 아래에서 위로, 왼쪽에서 오른쪽으로 또는 원하는 다른 방향으로 작성할 수 있다. 방향에 관계없이 화살표 방향은 의미를 정의한다. 상속 화살표는 항상 슈퍼클래스를 가리키고 속성 화살표는 항상 속성 클래스를 가리킨다.
🟠 속성 화살표는 "has"로 읽어야 하며, 아래의 예시에서 "Farmer has a Dog"으로 표현할 수 있다.
🟠 화살촉 옆에 범위를 지정하여 1:N 관계를 나타낼 수 있다. 예를 들면, Farmer has a one or more Dogs을 아래처럼 나타낼 수 있다.
(주의) 클래스 다이어그램에서는 1:N 관계를 표현함에도 클래스 이름은 단수형을 사용해야 합니다.
Dogs(x) -> Dog(O)
🟠 단일 클래스 다이어그램에서 필요한 만큼 화살표와 상자를 사용할 수 있다. 예를 들어, Farmer has one more Dogs로 아래처럼 표현할 수 있다.
🟠 또한 상자를 사용하여 프로토콜을 나타낸다. <<protocol>> 단, 클래스와 구분하기 위해서 이름 앞에 적어주어야 합니다.
아래는 PetOwning이라는 프로토콜을 표현하는 방법입니다.
🟠 클래스가 프로토콜을 구현함을 나타내려면 파선 있는 열린 화살촉을 사용한다.
이것은 구현 혹은 "implerments(구현)" 혹은 "conforms to(준수)"로 읽을 수 있다.
🟠 UML용어로 "dependency(종속성)"이라고 읽는 것을 "사용"을 나타내기 위해 점선이 있는 일반 화살촉을 사용한다.
🟠 UML은 종속성이 무엇인지에 대해서 의도적으로 모호합니다. 따라서 종속성 화살표를 사용할 때마다 목적에 주석을 달아야 합니다. 예를 들어 화살표를 사용하여 다음 사항을 나타낼 수 있습니다.
- weak property or delegate
- 메소드에 파라미터를 통해 전달되나 속성으로 유지되지 않는 프로퍼티들
- loose(느슨한) coupling or callback, 예를 들면 view와 controller사이의 IBAction
🟠 아래는 "Dog delegates to a PetOwning"을 표현합니다. (dog을 petowning에 위임하는 방법)
🟠 클래스 다이어그램에서 속성과 메소드를 나타낼 수도 있습니다.
예를 들어 아래 그림에서 "PetOwning has a name property and a petNeedsFood(_:) method"
화살표의 의미가 명확하면 설명을 생략할 수도 있습니다. 일반적으로 상속, 속성 및 구현 화살표에 대한 설명을 생략할 수 있습니다. 그러나 의미가 항상 명확하지 않기 때문에 일반적으로 "uses" 화살표에 대한 텍스트를 유지해야 합니다.
🟠 아래는 Farmer that has a SheepDog, which is a Dog that delegate to a PetOwnign
✅ Challenges
연습문제
[아래에 정답이 있습니다. 미리 풀어보고 스크롤을 내려주세요]
[아래에 정답이 있습니다. 미리 풀어보고 스크롤을 내려주세요]
3번의 경우에는 2가지로 나뉠 수 있습니다.
만약, Professor가 person을 준수하지만, Teacher가 준수하지 않은 경우에는 두번째 그림으로 표현됩니다.
✅ + 스터디
이번 시간에는 Swift로 알아보는 Class Diagram에 대해서 알아보겠음.
이번주부터 디자인패턴 개발 스터디를 시작했는데, 1주차는 재성님께서 리드해 주셔서 그것을 기반으로 작성함.
2주차는 MVC패턴과 Delegate 패턴으로 내가 발표를 하기로 했음
이전에 소프트웨어 공학에서 클래스 다이어그램과 시퀀스 다이어그램을 배웠었는데 그게 경력 이직할 때 중요하다고 한다.근데 생각해보니까 내가 개발을 리드하려면 설계를 해서 남들한테 나눠줘야 하는데 당연한 이야기인듯.최근에 팀플할 때, 리드를 많이 하는데 그 당시에는 소프트웨어 공학에 대한 이해가 부족해서 내가 프레임 짜서 나눠주고 나중에 코드 받아서 합침.
아무튼 공부 ㄱㄱ
✅ Class Diagram
✅ 접근 제어자
스위프트의 default는 #이다. 그래서 이를 주의해주자.
* public (+)
* private (-)
* internal (#)
🟠 Person
class 타입이다. Person 타입이다. Person의 프로퍼티로는 변수와 타입으로 적혀있다.
Person에서 함수 부분으로 init이 있는데, 이는 잘 적지 않는다고 한다. 함수 부분에 sayHello(to: )를 보면은 swift에서는 타입을 명시하지 않고 외부에서 사용하는 파라미터를 사용한다.
🟠 Student
Student class는 Person 클래스를 상속 받고 있다. 흰색 삼각형 화살표가 상속 받는 것을 의미한다.
Student is a Person이라고 이야기 할 수 있다. 그리고 함수에서 외부 변수와 return type을 명시해서 보여줄 수 있다.
🟠 KonkukUniv
3개의 프로퍼티를 들고 있는데, Student 배열을 갖고 있다. 검은색 화살표는 연관 관계를 표현한다.
그니까 쉽게 말해서 프로퍼티의 타입으로 들고 있다는 의미이다.
근데 Student와 KonkukUniv가 양방향으로 연결된 모습을 볼 수 있는데, 이는 서로 정보를 양방향으로 통신한다는 이야기이다.
🟠 <<protocol>> Studentable
프로토콜의 경우는 이렇게 적는데, 실선 하얀색 화살표로 이를 보여준다.