Swift의 Class와 Struct
Swift의 핵심 개념인 Class와 Struct의 차이를 이해하고 있는지 확인하기 위한 질문입니다. 각 타입에 따라 어느 메모리에 저장하고 사용하는지, Value 타입과 Reference 타입에 대한 정확한 이해가 필요합니다.
- EmptyClass 클래스를 이용하여 HugeStruct와 HugeClass을 선언하고 두 함수를 만들어 실행시킬 때 실행시간 차이는 어떻게 날까요?
final class EmptyClass {}
struct HugeStruct {
var emptyClass = EmptyClass()
var emptyClass2 = EmptyClass()
var emptyClass3 = EmptyClass()
var emptyClass4 = EmptyClass()
var emptyClass5 = EmptyClass()
var emptyClass6 = EmptyClass()
var emptyClass7 = EmptyClass()
var emptyClass8 = EmptyClass()
var emptyClass9 = EmptyClass()
var emptyClass10 = EmptyClass()
}
class HugeClass {
var emptyClass = EmptyClass()
var emptyClass2 = EmptyClass()
var emptyClass3 = EmptyClass()
var emptyClass4 = EmptyClass()
var emptyClass5 = EmptyClass()
var emptyClass6 = EmptyClass()
var emptyClass7 = EmptyClass()
var emptyClass8 = EmptyClass()
var emptyClass9 = EmptyClass()
var emptyClass10 = EmptyClass()
}
func createBunchOfReferencesOfClass() {
var array = [HugeClass]()
let object = HugeClass()
for _ in 0..<10000000000000 {
array.append(object)
}
}
func createBunchOfCopiesOfStruct() {
var array = [HugeStruct]()
let object = HugeStruct()
for _ in 0..<10000000000000 {
array.append(object)
}
}
// 실행 시간이 둘 중에 어느게 더 길지?
createBunchOfReferencesOfClass()
createBunchOfCopiesOfStruct()- CFGetRetainCount가 객체의 Reference Counting을 반환해주는 함수일 경우, 아래 코드를 실행시키면 출력이 어떻게 될까요? 그 이유도 같이 설명해주세요.
final class EmptyClass {}
final class ClassOfClasses {
let emptyClass = EmptyClass()
let emptyClass2 = EmptyClass()
let emptyClass3 = EmptyClass()
}
let classOfClasses = ClassOfClasses()
let reference = classOfClasses
let reference2 = classOfClasses
let reference3 = classOfClasses
// 아래 코드 출력이 어떻게 될지? 그 이유는?
CFGetRetainCount(classOfClasses)
CFGetRetainCount(classOfClasses.emptyClass)
CFGetRetainCount(classOfClasses.emptyClass2)
CFGetRetainCount(classOfClasses.emptyClass3)- CFGetRetainCount가 객체의 Reference Counting을 반환해주는 함수일 경우, 아래 코드를 실행시키면 출력이 어떻게 될까요? 그 이유도 같이 설명해주세요.
final class EmptyClass {}
struct StructOfClasses {
let emptyClass = EmptyClass()
let emptyClass2 = EmptyClass()
let emptyClass3 = EmptyClass()
}
let structOfClasses = StructOfClasses()
let copy = structOfClasses
let copy2 = structOfClasses
let copy3 = structOfClasses
// 아래 코드 출력이 어떻게 될지? 그 이유는?
CFGetRetainCount(structOfClasses)
CFGetRetainCount(structOfClasses.emptyClass)
CFGetRetainCount(structOfClasses.emptyClass2)
CFGetRetainCount(structOfClasses.emptyClass3)Life Cycle 실험
UIKit에서 두 개의 ViewController가 구성되어 있을 때 서로의 VC가 전환되는 여러 순간에 대해 어떻게 동작할지, View Life Cycle과 관련한 이해를 확인하는 질문입니다. 아래 5가지 메소드에 대해 다룹니다.
ViewDidLoadViewWillAppearViewDidAppearViewWillDisappearViewDidDisappear
Modal 방식 (화면을 전체를 덮지 않는 경우)
- 첫 화면이 보여지는 경우, VC에서 어떤 Life Cycle이 어떤 순서대로 호출이 될까요?

- 첫번째 화면에서 두번째 화면으로 전환하는 경우, 두 화면에서는 Life Cycle이 어떤 순서대로 호출이 될까요? 이 때 첫번째 화면에서는 Life Cycle 메소드들이 호출이 되나요? 그 이유는 무엇인가요?

- 두번째 화면에서 사용자가 화면을 아래로 당겨 내리기 직전까지 끌어오는 순간에, 두 화면에서는 Life Cycle이 어떤 순서대로 호출이 될까요? (아직 두번째 화면이 내려오지 않은 상황)

- 두번째 화면을 다 내리기 직전 사용자가 변덕이 생겨 두 번째 화면을 다시 덮어버렸을 때, 두 화면에서는 Life Cycle이 어떤 순서대로 호출이 될까요?

- 두번째 화면을 다 내려 첫번째 화면으로 다시 돌아갈 경우, 두 화면에서는 Life Cycle이 어떤 순서대로 호출이 될까요?

Navigation 방식
- 첫번째 화면이 보여지고 나서 두번째 화면까지 보여진 다음에 다시 첫번째 화면으로 돌아가면 두 화면에서는 Life Cycle이 어떤 순서대로 호출이 될까요? 첫번째 화면의
ViewWillAppear가 먼저 호출이 될까요 아니면 두번째 화면의ViewWillDisappear가 먼저 호출이 될까요?

알고리즘 라이브코딩 테스트
기초적인 동적 프로그래밍 문제를 통해 알고리즘에 대한 기본기를 확인하였습니다.
두 개의 양의 정수 a와 b가 주어졌을 때, a와 b 사이의 범위(포함)에서 서로 다른 자릿수를 가진 숫자의 개수를 반환하세요.