Swift) Strategy Pattern이란?

Strategy Pattern

  • 클래스의 행위를 캡슐화 하여 동적으로 행위를 자유롭게 바꿀 수 있도록 돕는 패턴이다.
자세히 보기

Swift) Singleton Pattern에 대해 설명하시오.

Singleton Pattern

  • 특정 용도로 객체를 하나만 생성하여, 공용으로 사용하고 싶을 때 사용하는 디자인 유형
1
2
3
4
5
6
// User의 정보를 저장하는 클래스
class UserInfo {
var id: String?
var password: String?
var name: String?
}
자세히 보기

Swift) Instance 메서드와 Type 메서드의 차이점을 설명하시오.

Instance Method

  • 특정 클래스, 구조체 또는 열거형의 인스턴스에 속하는 함수
  • 특정 타입의 인스턴스에서 호출되는 메서드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Sample {
var something : String?

func useInstanceMethod() {
print("instance method!!")
}
}

// 인스턴스 메서드를 사용하기 위해서는?
// 1. 인스턴스를 생성해준다.
var some : Sample = Sample()

// 2. 인스턴스 메서드는 생성한 인스턴스와 함께 사용할 수 있다.
some.useInstanceMethod()
// ----- 출력값
// instance method!!
자세히 보기

Architecture) MVVM 패턴이란?

MVVM 패턴이란?

  • Model, View, ViewMode

View는 오직 시각적인 요소(레이아웃, 애니매이션 그리고 UI 요소들에 대한 초기화 작업 코드들)로만 이루어져야 하고, View Controller가 View가 된다.
ViewModel은 View의 각 UI 요소들에 대한 인터페이스를 제공하며, 중간 역할을 한다.

자세히 보기

Architecture) MVP 패턴이란?

MVP 패턴이란?

  • Model(모델), View(UIView/UIViewController), Presenter

Model은 MVC 패턴에서 의미하는 모델과 같은 역할을 한다. 즉, 앱의 실행에 필요한 실질적인 데이터를 갖고 있다.
ViewUIView와 UIViewController가 여기에 해당하며, 비즈니스 로직과 관련된 일은 모두 Presenter가 하도록 한다.
Presenter는 UIKit과 관련이 없는 로직들을 수행하며, 사용자 응답에 반응하거나 UI를 업데이트하는 일을 한다.(비즈니스 로직 관련된 일 수행)

자세히 보기

Architecture) MVC 구조에 대해 블록 그림을 그리고, 각 역할과 흐름을 설명하시오.

MVC 패턴이란?

  • Model(모델), View(뷰), Controller(컨트롤러)

Traditional MVC

Traditional MVC

  • 다이어그램을 보면 Model, View 그리고 Controller, 이 세 요소가 서로 강하게 연결되어 있음을 알 수 있다.
  • Model에서는 애플리케이션에서 사용할 데이터들을 관리하고, View유저 인터페이스를 표현 및 관리한다.
  • Controller는 View와 Model의 다리 역할을 해 View의 입력을 Model이 반영하고, Model의 변화를 View에 갱신하는 역할을 한다.
  • 강하게 연결된 셋은 독립성이 낮기 때문에 이들 각각의 재사용성은 굉장히 떨어지며, 그렇기 때문에 현재 iOS 개발에는 전통적인 MVC 아키텍쳐는 맞지 않다고 볼 수 있다.
자세히 보기

Swift) Class와 Struct의 차이점에 대해 설명하시오.

Class와 Struct 차이점

Class

  • 참조 타입(Reference Type)
  • 상속 가능
  • heap memory 영역에 할당 (속도가 느림)
  • 런타임에 직접 alloc하며 reference counting을 통해 dealloc이 필요
  • memory fragmentation 등의 overhead가 존재
  • NSData serialize 가능
  • Codable 사용 불가능
  • 런타임에 타입 캐스팅을 통해서 클래스 인스턴스에 따라 여러 동작이 가능
  • deinitializer 존재

Struct / Enum

  • 값 타입(Value Type)
  • 상속 불가능 (protocol은 사용 가능)
  • stack memory 영역에 할당 (속도가 빠름)
  • scope based lifetime: 컴파일타임에 compiler가 언제 메모리를 할당/해제할지 정확히 알고있음
  • data locality: CPU 캐시 히트율이 높음
  • NSData로 serialize 불가능
  • Codable 프로토콜을 이용하여 손쉬운 JSON <-> struct 변환 가능 (Swift 4 이상)
  • 항상 새로운 변수로 copy가 일어나기 때문에 multi-thread 환경에서 공유변수로 인해 문제를 일으킬 확률이 적음
자세히 보기

Swift) Class란?

Class란?

  • 클래스는 참조(reference)타입이다.
  • 타입 이름은 대문자 카멜케이스를 사용하여 정의한다.
  • Swift의 클래스는 다중 상속이 되지 않는다.
자세히 보기