KVO와 Notification은 타입 사이의 결합도를 낮출 수 있다.
내가 햄버거 집 사장이라고 가정해보자. 햄버거를 만들기 위해 역할별로 알바생을 고용해야 하는 상황이다. 햄버거 빵을 굽는 직원 A가 와서 나는 패티를 굽는 B라는 특정 인물이 있어야 일을 할 수 있다고 한다. 나는 빵을 세팅하는 아이만 고용하고 싶지만 어쩔 수 없이 패티를 굽는 아이도 고용해야 한다. 이런 경우 결합도가 높다고 표현한다.
동일한 상황에서 패티를 굽는 B라는 특정 인물이 아니라 동일한 일을 할 수 있는 아이들 대신 뽑아주는 것이 결합도를 낮추는 것이라고 할 수 있다.
A와 B 사이에 메시지를 주고 받거나 프로퍼티로 가지는 경우
Notification은 어디에서 보내더라도 누구나 받아볼 수 있다. 서로를 몰라도 된다. 상관 관계에 따른 결합도가 없다고 볼 수 있다. Notification을 통해 메시지를 보내거나 프로퍼티로 가질 필요가 없다.
KVO는 Notification 보다 결합도가 높다. A는 B에 해당하는 것을 알아야 하지만 B는 A를 몰라도 된다.
결합도를 낮추는 방법에는 프로토콜을 사용하는 방법이 있다.
- SJ: xcode 코드를 직접 보면서 설명한다.
- Henry: 주석으로 했었는데, 프로젝트하며 네이밍을 명확하게 하는 방법으로 바꿈
코드를 설명할 수 있는 방법
프로그래밍 언어가 아닌 설계를 위한 표준화된 모델링 언어이다. 시스템이 설계된 내용을 표준화된 방식으로 보여준다. OMG에서 표준으로 채택한 언어로 지속해서 유지보수, 수정되고 있다. 현재 2.5 버전까지 배포되었다.
표준화된 표기법을 사용해서 많은 사람들이 원활히 의사소통이 가능하도록 만들기 위해 만들어졌다.
미래의 나 혹은 다른 사람에게 내 코드 구현 방식을 표현, 설명하기 위한 도식화 수단 ➞ 의사소통 수단!
UML은 크게 두 가지 다이어그램 종류로 나누어볼 수 있다.
Source: Wikipedia Commons
정적인 구조. 시간의 흐름 중 어느 한 순간의 시점을 표현한다. 시스템의 개념, 관계 등의 측면에서 요소를 나타내고 각 요소들의 정적인 면을 보기 위해 사용한다.
동적인 면을 포함. 각 요소들, 요소들 간의 변화와 흐름, 주고 받는 데이터 등의 동작과 같이 동적인 면을 나타내기 위해 사용한다. 시간의 흐름이 다이어그램에 포함 되어있다.
Sturctural Diagram의 일종으로, 의존 관계를 파악하고자 할 때 사용한다.
Source: Visual Paradigm
Source: Nextree
일반화 (Generalization) 또는 상속 (Inheritance)
일반적인 클래스와 구체적인 클래스 사이의 관계이다. 아래 예시에서는 일반적인 클래스로 Person
을, 구체적인 클래스로 Student
와 Professor
를 제시하였다.
의존 (Dependency)
한 클래스가 다른 클래스의 요소를 사용할 때 의존 관계로 표시한다.
집합
집합은 집약 (Aggregation)과 합성 (Composition)으로 나누어볼 수 있다.
위는 집약, 아래는 합성 관계
Behavior Diagrams의 일종. 시간 순서에 따른 객체들의 협력 관계를 나타낸다. Object가 다른 Object가 특정 시나리오에서 동작하는 방식을 표현할 수 있다. 수평으로 가로지르는 화살표는 인스턴스 간에 주고 받는 메시지를 뜻하는 것으로, 실선은 Request
, 점선은 Respond
메시지를 나타낸다.
이사를 핑계로 한 학습 시간 저하..
수 ~ 목 정도에 해결될 듯