활동 내용

  • 계산기 프로젝트 신규 모둠 Kick off
  • 절찬리 이사 중. 어제 짐 싸서 본가로 왔고 내일 택배 부치고 모레 상경! 지금까지 기록에 소홀했다..

학습 내용

보완할 것

  • 회고
  • TIL 기록
  • 동료들의 TIL, TWL의 피드백
  • 모여서 이번 주에 무엇을 했는지 무엇을 배웠는지 되돌아보는 시간을 가져야 한다.
    • 배우는 것 보다 기록하는 것이 더 중요하다.

응집도와 결합도 측면에서 본 KVO와 Notification Center

KVO와 Notification은 타입 사이의 결합도를 낮출 수 있다.

결합도를 낮춘다?

내가 햄버거 집 사장이라고 가정해보자. 햄버거를 만들기 위해 역할별로 알바생을 고용해야 하는 상황이다. 햄버거 빵을 굽는 직원 A가 와서 나는 패티를 굽는 B라는 특정 인물이 있어야 일을 할 수 있다고 한다. 나는 빵을 세팅하는 아이만 고용하고 싶지만 어쩔 수 없이 패티를 굽는 아이도 고용해야 한다. 이런 경우 결합도가 높다고 표현한다.
동일한 상황에서 패티를 굽는 B라는 특정 인물이 아니라 동일한 일을 할 수 있는 아이들 대신 뽑아주는 것이 결합도를 낮추는 것이라고 할 수 있다.
A와 B 사이에 메시지를 주고 받거나 프로퍼티로 가지는 경우
Notification은 어디에서 보내더라도 누구나 받아볼 수 있다. 서로를 몰라도 된다. 상관 관계에 따른 결합도가 없다고 볼 수 있다. Notification을 통해 메시지를 보내거나 프로퍼티로 가질 필요가 없다.
KVO는 Notification 보다 결합도가 높다. A는 B에 해당하는 것을 알아야 하지만 B는 A를 몰라도 된다.
결합도를 낮추는 방법에는 프로토콜을 사용하는 방법이 있다.

코드 설명 방식

  • SJ: xcode 코드를 직접 보면서 설명한다.
  • Henry: 주석으로 했었는데, 프로젝트하며 네이밍을 명확하게 하는 방법으로 바꿈

코드를 설명할 수 있는 방법

  • 코드: 코드 자체로 설명하는 방법 (프로퍼티, 메서드명을 가독성 좋게 명명)
  • 줄글: PR에서 주로 보는 방식, 실행 순서(flow) 위주
  • 도표: 시각화, 도식화, 추상화하여 표현 (구조, 관계, 상태, 순서를 단순화하는 과정이 필요하다.)

    source: Apple Developer
    도식화 하는 방식이 천차만별인데 한 번에 사람들이 사람들이 알아볼 수 있는 표준화, 규격화된 방법은 없을까?

Unified Modelling Language (UML)

프로그래밍 언어가 아닌 설계를 위한 표준화된 모델링 언어이다. 시스템이 설계된 내용을 표준화된 방식으로 보여준다. OMG에서 표준으로 채택한 언어로 지속해서 유지보수, 수정되고 있다. 현재 2.5 버전까지 배포되었다.

목적

표준화된 표기법을 사용해서 많은 사람들이 원활히 의사소통이 가능하도록 만들기 위해 만들어졌다.

UML을 사용하는 유형

  • 나 자신 ➞ 전체 구조 및 클래스 의존성 파악
  • 협업자 ➞ 의사소통 및 설계 논의
  • 미래에 이 프로그램을 맡을 사람 (나 포함) ➞ 문서화

미래의 나 혹은 다른 사람에게 내 코드 구현 방식을 표현, 설명하기 위한 도식화 수단 ➞ 의사소통 수단!

UML diagrams Overview

UML은 크게 두 가지 다이어그램 종류로 나누어볼 수 있다.

Source: Wikipedia Commons

Structural Diagrams

정적인 구조. 시간의 흐름 중 어느 한 순간의 시점을 표현한다. 시스템의 개념, 관계 등의 측면에서 요소를 나타내고 각 요소들의 정적인 면을 보기 위해 사용한다.

Behavior Diagrams

동적인 면을 포함. 각 요소들, 요소들 간의 변화와 흐름, 주고 받는 데이터 등의 동작과 같이 동적인 면을 나타내기 위해 사용한다. 시간의 흐름이 다이어그램에 포함 되어있다.

Class Diagram

Sturctural Diagram의 일종으로, 의존 관계를 파악하고자 할 때 사용한다.

Source: Visual Paradigm


Source: Nextree

일반화 (Generalization) 또는 상속 (Inheritance)
일반적인 클래스와 구체적인 클래스 사이의 관계이다. 아래 예시에서는 일반적인 클래스로 Person을, 구체적인 클래스로 StudentProfessor를 제시하였다.

의존 (Dependency)
한 클래스가 다른 클래스의 요소를 사용할 때 의존 관계로 표시한다.

집합
집합은 집약 (Aggregation)과 합성 (Composition)으로 나누어볼 수 있다.

위는 집약, 아래는 합성 관계

  • 집약: 전체 객체가 사라진다고 해도 부분 객체는 메모리에서 사라지지 않음, 대학이 사라져도 학생은 사라지지 않음
  • 합성: 전체 객체가 사라지면 부분 객체도 메모리에서 사라짐, 강한 집약 관계라고도 부름, 대학이 사라지면 학생도 사라짐

Sequence Diagram


Behavior Diagrams의 일종. 시간 순서에 따른 객체들의 협력 관계를 나타낸다. Object가 다른 Object가 특정 시나리오에서 동작하는 방식을 표현할 수 있다. 수평으로 가로지르는 화살표는 인스턴스 간에 주고 받는 메시지를 뜻하는 것으로, 실선은 Request, 점선은 Respond 메시지를 나타낸다.

어떻게 그려요?

  • 직접 손으로 그리기

UML 그리기 팁

  • UML diagram이 너무 복잡하다면
    • 쪼개기, 상위 개념에서 생각해보기
  • 처음부터 완벽하게 그릴 수는 없다.
    • 많은 수정은 좋은 구조로 가는 길
  • 꼭 지켜야 하는 법칙은 없다. UML 버전이 너무 많다고 다 알 필요는 없다.
    • 결국 의사소통이 목적인 언어이다.

덕복의 떡볶이 추천

  • 덕복 최애: 쪼매 매운 떡볶이
    • 덕복 코멘트: 떡볶이 그 자체!
  • 무난: 죠스떡볶이
  • 달달하니 매움: 신전떡볶이

비추

  • 맛없게 맵다: 응급실떡볶이, 동대문엽기떡볶이

문제점, 고민한 점

이사를 핑계로 한 학습 시간 저하..

해결방법

수 ~ 목 정도에 해결될 듯

profile
합리적인 해법 찾기를 좋아합니다.

0개의 댓글