TIL(Today I Learned)
11월 30일(월)
학습내용
- 저번주에 배운 내용에 대해 Kahoot을 진행하였다.
- Singleton Pattern을 위해 필요한 기능은 타입 프로퍼티와 접근 제어이다.
- Singleton 객체를 타입 프로퍼티로 지정하고, init을 private으로 접근을 제한하여 외부에서 객체생성을 불가능하게 하여 Singleton Pattern을 구현할 수 있다.
- Singleton Pattern을 위해 필요한 기능은 타입 프로퍼티와 접근 제어이다.
- UML에 대해서 학습하고, Jacob의 JuiceMaker 코드에 대한 Class Diagram을 직접 그려보았다.
- Unified Modeling Language 의 약자로, 소프트웨어 모델링에 대한 의사소통을 목적으로 하는 언어.
- 나 자신을 위해서, 같이 협업하는 사람을 위해, 미래의 누군가를 위한 문서화 (나 포함)
- Behavioral Diagram, Structural Diagram 두 분류로 나누어진다.
- Behavioral Diagram에는 Sequence Diagram 등이 있으며, Structural Diagram에는 Class Diagram등 이 포함된다.
- UML 작성 그 자체에 너무 몰두하는 것 보다, 의사소통(설득)에 더 목적을 두고 이해하기 쉽도록 작성한다.
문제점/고민한점
- Class Diagram에서 Dependency와 Aggregation, Composition의 차이는?
- enum 의 allCases를 사용하는데 CaseIterable 프로토콜을 채택하지 않아도 가능한가?
해결방법
- Class Diagram에서 Dependency와 Aggregation, Composition의 차이는?
- Dependency는 A 클래스가 B 클래스에 대한 객체를 사용할 때 A 클래스는 B 클래스에 Dependecy 관계라고 한다.
- Aggregation은 A 클래스가 B 클래스에 대한 객체를 배열이나 딕셔너리 등 복수 개를 프로퍼티로 지니면서, A클래스가 사라져도 B클래스가 사라지지 않으면 Aggregation 관계라고 한다. 예를 들어, B 클래스 객체의 Collection을 외부에서 선언해서 A 클래스의 프로퍼티에 reference를 전달하면 A클래스 객체가 사라져도 B 객체는 사라지지 않으므로 Aggregation 관계라고 할 수 있다.
- Compositon은 A 클래스가 B 클래스에 대한 객체를 배열이나 딕셔너리 등 복수 개를 프로퍼티로 지니면서, A클래스가 사라질 때 B클래스도 사라지면 Compositon 관계라고 한다. 예를 들어, B 클래스 객체의 Collection을 A클래스 내부에서 선언하면, A 클래스 객체가 사라지면 B객체도 사라지므로 Composition 관계라고 할 수 있다.
- enum 에서 allCases를 사용하는데 CaseIterable 프로토콜을 채택하지 않아도 가능한가?
- 채택하여야 한다. 애플 개발자 문서에도 나와 있다. (https://developer.apple.com/documentation/swift/caseiterable)