면접준비 - 2

박성민·2021년 2월 4일
0

면접 준비

목록 보기
3/6

1. Escaping Closure란?

  • 클로저가 함수로부터 Escape한다는 것은 해당 함수의 인자로 클로저가 전달되지만, 함수가 반환된 후 실행 되는 것을 의미합니다.
  • 기존에 우리가 알고 있던 변수의 scope 개념과 달리 함수에서 선언된 로컬 변수가 로컬 변수의 영역을 뛰어넘어 함수 밖 에서도 유효합니다.
  • 클로저의 Escaping은 A 함수가 마무리된 상태에서만 B 함수가 실행되도록 함수를 작성할 수 있다는 점에서 유용합니다.

2. Protocol

  • 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등의 청사진. 프로토콜은 이들 요구사항 구현을 제공하지 않습니다.
  • Initializer 요구 사항을 구현할 경우 required수식어를 표시해야한다.
protocol SomeProtocol {
    init(someParameter: Int)
}

class SomeClass: SomeProtocol {
    required init(someParameter: Int) {
        // initializer implementation goes here
    }
}

3. Swift의 Collection Type은?

  • Array
  • Set
  • Dictionary

4. Map, Filter, Reduce

스위프트의 대표적인 고차함수로 맵(Map), 필터(Filter), 리듀스(Reduce)가 있다.

map

  • 컨테이너가 담고 있던 각각의 값을 매개변수를 통해 받은 함수에 적용한 후 새로운 컨테이너를 생성하여 반환합니다. (기존 컨테이너의 값은 변경되지 않음)
  • for-in 구문 사용하는것과 비슷하나 코드가 더 간결하고 컴파일러 차원에서 성능 차이가 있습니다.
	let array = [0, 1, 2, 3]
    let newArray = array.map { $0 * 5 }
    print(newArray) //[0, 5, 10, 15]
    
    let dict: [String: Int] = [ "a": 1, "b": 2 ]
	dict.map { (key, value) in
  	return "\(key)=\(value)" // ["a=1", "b=2"]
}
    

filter

  • 클로저로 각 항목들을 비교하여 일치하는 결과물을 가진 새로운 배열을 반환합니다.
let evenValues = values.filter({ (v: Int) -> (Bool) in
    if v % 2 == 0 { return true }
    return false
})

println(evenValues) //[2, 4] 

let dict: [String: Int] = [ "a": 1, "b": 2 ]
let value2 = dict.filter { (key, value) in
  return (value == 2)
}
print(value2) // ["b": 2]

reduce

  • 배열의 각 항목들을 재귀적으로 클로저를 적용시켜 하나의 값을 만듭니다.
let sumValues = values.reduce(0, combine: { (v1: Int, v2: Int) -> (Int) in
    return v1 + v2
})

println(sumValues) // 15

참고 및 출처

profile
iOS시작~

0개의 댓글