•
이경헌
Q. String은 왜 subscript로 접근이 안되는지 설명하세요
1. ‘String’은 ‘유니코드(Unicode) 문자의 컬렉션’으로 구성되어 있기 때문
2. ‘subscript’로 직접 접근할 수 있는 타입들은 ‘단순한 구조(컬렉션 등)’를 가진 타입, subscript를 통한 인덱스를 접근 해왔다는 것
3. ‘String’은 여러 개의 Unicode 스칼라로 이루어진 복잡한 구조이기 때문에 ‘String.Index’를 사용하여 문자열 내의 찾는 문자 위치를 나타내야함
Q. @State가 어떻게 동작하는지 설명하시오.
1. 저장: 해당 값은 뷰가 생성될 때 초기화되며, 뷰의 수명 동안 유지
2. 반응성: @State로 선언된 값이 변경되면 SwiftUI는 자동으로 뷰의 내용을 다시 그리도록 트리거 됨
3. 뷰 간 데이터 전달: @State로 선언된 값을 다른 뷰로 전달하려면 해당 값을 가진 뷰를 하위 뷰에게 전달하여 공유함
•
박호건
Q. mutating 키워드의 의미를 설명하세요
1.
스위프트에서 값 타입 프로퍼티들을 인스턴스 메서드에 의해 수정될 수 X.
2.
mutating 키워드를 메서드 앞에 붙이면 구조체나 열거형 인스턴스에서 프로퍼티를 수정할 수 있게 된다.
3.
mutating 키워드가 붙은 메서드를 실행하면 스위프트는 새로운 구조체를 생성해 변경된 프로퍼티의 값을 할당하고 반환해 현재 구조체를 대체한다. 구조체의 불변성을 지키기 위해 이런 방법을 사용함.
Q. 프로토콜과 클래스의 차이를 설명하세요
1.
클래스는 인스턴스 메서드의 실제 구현체를 가지고 있지만 프로토콜은 메서드의 인터페이스만 가지고있다.
2.
프로토콜이 구현체를 가지게 하려면 프로토콜의 Extension을 만들어 구현체를 작성할 수 O.
•
이창준
Q. Hashable 프로토콜이 뭔가요?
◦
Hashable 프로토콜을 채택하는 타입의 값은 모두
( 정수 해시값을 생성하게하는 ) Hash 가 가능한 타입
◦
Swift 에서 String, Int, Float, Double, Bool, Set 이 Hashable 을 채택
◦
커스텀 타입에 Hashable 을 채택할 때,
모든 저장 프로퍼티가 이미 Hashable 을 채택한 타입이라면 그냥 사용.
그렇지 않을 때는, == 메서드를 만들고 hash(into: )를 구현해서 사용.
Q. Hashable 프로토콜을 채택하는 커스텀 타입이 Equatable도 채택해야하는 이유가 뭔가요?
◦
어떠한 값에 대한 Hash 는 고유한 값이지만,
여러 값에 대해 동일한 Hash 값이 생성 될 수 있음.
→ haser(_:) 메서드가 Hash 값을 생성.
◦
Hash 값이 같은지 확인해야 하기 때문에, Equatable 채택 필요.