TIL(Today I Learned)

4월 26일(월)

학습내용

  • Programming Design Patterns
    • 디자인 패턴의 의미
      • OOP의 다양한 문제 상황에 대한 예방
      • 프로그래머 사이의 협업효율 향상
      • 프로그래머 사이의 의사소통 증진
      • 코드의 안정화 및 최적화
      • 코드의 재사용성 증가
    • 천재 선배들의 삽질 기록물이다
    • 생성, 구조, 행위에 따라 분류될 수 있다.
      • 생성
        • Factory
          • 객체를 만들어주는 factory 객체를 만드는 패턴.
          • factory에게 런타임에 상황에 맞는 객체를 만들어 달라고 할 수 있다.
        • Prototype
          • Prototype(추상 타입)에 의존하여 인스턴스를 만들 수 있도록 하는 패턴.
          • UITableViewCell이 Prototype pattern의 전형적인 예시라고 한다.
          • NSCopying을 이용하여 구현할 수 있다.
        • Singleton
          • 타입의 인스턴스를 한개만 생성하도록 하는패턴.
      • 구조
        • Adapter
          • 다른 규격을 호환시켜주는 패턴.
        • Decorator
          • 추가적인 기능을 더 부가하는 패턴.
        • Facade
          • 간단한 것만 드러내고 복잡한 것은 가리는 패턴.
        • Proxy
          • 가벼운 작업을 제공하는 대리자를 제공하여 본래의 무거운 작업을 대신하도록 하는 패턴.
      • 행위
        • Iterator
          • 데이터를 순차적으로 접근할 수 있는 기능을 제공하는 패턴.
        • Observer
          • event가 발생했을 때 observer들이 바로 반응할 수 있게 하는 패턴.
          • Notification, KVO
        • Strategy
          • 알고리즘을 런타임에 변경할 수 있도록 하는 패턴.
  • 퀴즈
    • 엘림라자냐 퀴즈
      • touchesBegan은 UITapGestureRecognizer보다 빨리 호출된다.
      • 프로퍼티 옵저버가 실행되지 않는 경우는 weak 참조일때 arc에 의해 nil이 할당될 경우이다.
    • 꼬말찌로로 퀴즈
      • 화면상단에 시계가 있는 bar는 Status Bar이다.
      • Swift의 기본 실수형 타입은 Double이다.
      • Xcode의 테스트 수행을 위해 필요한 프레임워크는 XCTest이다.
      • Xcode를 통해서 수행할 수 있는 테스트의 종류는 Performance Test, Unit Test, UI Test 이다.
      • iOS의 TableView는 DataSource 없이도 작동할 수 있다. (Static Table View)
      • 병렬처리는 멀티코어 환경에서만 가능하다.
      • 시스템 알람이 떴을 때와 같이, 사용자와의 인터렉션을 할 수 없는 상태를 inactive라고 한다.
      • Scene은 멀티 윈도우 환경을 지원하기 위해 나온 개념이다.
      • AppKit은 Cocoa Touch Framework에 포함되는 프레임워크가 아니다. AppKit은 macOS에서 UI를 그릴때 사용되며 Cocoa Framework에 포함된다.
      • Thread는 Stack영역을 독립적으로 갖고, Heap 영역은 공유한다.
      • 클래스의 접근제어자가 open, public일때, 하위 메서드의 접근 제어자는 internal이다.
      • 접근제한자 open은 클래스에만 적용가능하다.
      • iOS에서는 vector 타입인 pdf와 svg 확장자를 기본으로 지원한다.

문제점/고민한점

  1. “Thread는 Stack영역을 독립적으로 갖고, Heap 영역은 공유한다.”의 정확한 의미는?
  2. Open vs Public의 차이는?

해결방법

  1. 프로세스는 메모리에 대한 Stack, Heap, Data, Code 영역을 갖고 있다. 그리고 쓰레드는 프로세스에서 실행되는 하나의 흐름인데, 프로세스 Heap, Data, Code 영역을 공유하고 Stack 영역은 독립적으로 갖고 있다.
  2. Public과는 달리 Open은 클래스에만 적용이 가능하다. 그리고 모듈 외부에서도 Subclass(상속)과 override를 가능하게 한다.

참고