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!!
자세히 보기

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의 클래스는 다중 상속이 되지 않는다.
자세히 보기

Swift) Optional이란 무엇인지 설명하시오.

옵셔널(Optional)이란?

  • 값이 있을수도 있고, 없을수도 있음을 표현
1
2
3
4
5
let optionalConstant : Int? = nil

// 옵셔널이 아닌 상수에 nil값을 할당하려고 하면
// 컴파일 오류 발생
// let someConstant : Int = nil
  • nil할당 될 수 있는지 없는지 표현
1
2
3
4
5
6
7
8
9
10
11
12
// someOptionalParam에는 nil이 할당 될 수 있다.
func someFunction(someOptionalParam:Int?) {
// ...
}

// someParam에는 nil이 할당 될 수 없다.
func someFunction(someParam:Int) {
// ...
}

someFunction(someOptionalParam:nil)
// someFunction(someParam:nil)
자세히 보기