# 퀴즈 23-01-16 ## 원비 1. 다음 중 HTTP메서드를 모두 고르시오 → a, c, d a. GET b. SET c. POST d. PUT 2. 다음 중 프로세스와 스레드의 설명으로 맞는 것을 모두 고르시오 → b, c a. 프로세스에 스레드는 없을 수도 있다. b. 프로세스는 각각 별도의 주소공간을 할당받는다. c. 하나의 프로그램을 여러 개의 프로세스로 구성할 수 있다. d. 하나의 응용 프로그램에서 여러 스레드를 구성하는 것을 멀티 프로세스라고 한다. 3. 다음은 객체지향 프로그래밍의 특징 4가지 중 하나로, 빈칸에 들어갈 단어를 고르시오 1. 객체에 필요한 데이터나 기능(메소드)을 책임이 있는 객체에 그룹화시켜주는 것을 ( ) 라고 한다. 3. 다음 빈칸에 들어갈 단어를 순서대로 고르시오 → 1 a. 실제 세상을 객체화하는게 아니라 필요한 정보만을 중심으로 간소화하는 것을 1️⃣ 라고 한다. b. 객체에 필요한 데이터나 기능(메소드)을 책임이 있는 객체에 그룹화시켜주는 것을 2️⃣ 라고 한다. c. 상위 클래스의 기능을 하위 클래스가 사용하거나 확장하는 것을 3️⃣ 라고 한다. d. 하나의 메소드나 클래스가 다양한 방법으로 동작하는 것을 4️⃣ 라고 한다. 1. 추상화, 캡슐화, 상속, 다형성 2. 추상화, 은닉화, 상속, 단형성 3. 일반화, 캡슐화, 프로토콜, 다형성 4. 일반화, 은닉화, 프로토콜, 단형성 4. 다음 4가지의 UI 구조를 낮은 계층부터 순서대로 나열하시오. → b, d, c, a a. UIView b. UIScreen c. UIWindow d. UIWindowScene ## 아얀 1. 다음 중 CoreData Entity에 대한 설명으로 맞는 것을 모두 고르시오. 답: 1, 3 1. Entity는 상속이 가능하다. 2. Abstract Entity(추상 엔티티)는 인스턴스를 생성할 수 있다. 3. Attribute로 배열을 가질 수 있다. 4. 다른 Entity와 M:N의 관계를 맺을 수 없다. 2. CoreData는 Thead Safe하다. O, X 답: X 3. tableView의 DataSource 구현의 필수 메서드를 모두 고르세요. 답: 1,3 [numberOfRowsInSection, numberOfSections, cellForRowAt, sectionIndexTitles] 4. tableView의 Delegate에 해당하는 메서드를 모두 고르세요 (2개 고르세요?) [cellForRowAt, didSelectRowAt, numberOfRowsInSection, viewForHeaderInSection] [2, 4] 나머지는 datasource ## 준호 1. 인스턴스의 타입을 확인하거나 인스턴스를 상위 클래스 또는 하위 클래스로 취급하는 방법은? A. 타입캐스팅, 타입 캐스팅, type casting, Type casting, Type Casting 2. 애플이 발표한 스위프트 언어의 특징을 모두 고르세요. 1, 2, 3 1. Safe 2. Fast 3. Expressive 4. Slow ![](https://i.imgur.com/sg9z0Rj.png) 3. ARC에 대한 설명 중 틀린 것을 고르세요. 3 1. 컴파일 당시 인스턴스의 해제 시점이 정해져 있음. 2. 작동 규칙을 모르고 쓰면 인스턴스가 메모리에서 해제 안될수도. 3. 프로그램 동작 외에 메모리 감시를 위한 추가 자원이 필요함. - 가비지 컬렉션에 대한 설명임. 가비지 컬렉션은 프로그램 동작 외에 메모리 감시를 위한 추가 자원이 필요함. 4. 인스턴스가 언제 메모리에서 해제될지 예측할 수 있음. - 가비지 컬렉션 참조 계산 시점 : 런타임. 어플 실행 중 주기적으로 참조를 추적하여 사용하지 않는 인스턴스를 해제한다. 장점 : 인스턴스가 해제될 확률이 RC에 비해 높다. 단점 : 개발자가 참조 해제 시점을 파악할 수 업음, 런타임 시점에 계속 추적하는 오버헤드로 성능저하가 있을 수 있다. - ARC 참조 계산 시점 : 컴파일타임. 컴파일 시점에 언제 참조되고 해제되는지 “결정”되어 런타임때 “실행”된다. 장점 : 개발자가 참조 해제 시점을 파악할 수 있다. 런타임 시점에 추가적인 오버헤드가 발생하지 않는다. 단점 : 순환참조 발생 시 영구적으로 메모리가 해제되지 않아 메모리 누수의 위험이 있다. 4. 익스텐션에 대한 설명 중 틀린 것을 모두 고르세요. 1 3 1. 클래스에 Lazy Stored Properties를 추가할 수 있음. - 익스텐션으로 연산 프로퍼티를 추가할 수 있지만, 저장 프로퍼티를 추가할 수 없음. 2. 클래스에 Convenience Initializers를 추가할 수 있음. - 익스텐션으로 클래스에 편의 이니셜라이저(Convenience Initializers)는 추가할 수 있지만, - 편의 이니셜라이저 - 초기화를 손쉽게 도와주는 역할 - 지정 이니셜라이저를 자신(편의 이니셜라이저) 내부에서 호출함 - 지정 이니셜라이저의 일부 매개 변수의 초깃값 설정하여 초기화함 - 전달 인자로 초깃값을 전달할 필요 없이 항상 같은 값으로 초기화 가능함. 즉, 적은 입력으로 초기화를 편리하게 해 줌 - 만약 클래스에 편의 이니셜라이저를 쓸 필요가 없다면 사용하지 않아도 된다 - init 키워드 앞에 convenience 지정자를 명시하면 됨 - 지정 이니셜라이저(Designated Initializer)는 추가할 수 없음. 3. 기존 프로퍼티에 Property observers를 추가할 수 있음. - 익스텐션으로 타입에 정의되어 있는 기존의 프로퍼티에 프로퍼티 감시자를 추가할 수 없음. 4. 클래스가 새로운 프로토콜을 따르게 할 수 있음. - 익스텐션으로 특정 프로토콜을 준수할 수 있도록 할 수 있음. ## 정민씨 1. KVO는 []를 상속받은 클래스에서 사용할 수 있다. [NSObject, nsobject] 2. Enum은 stored property를 가질 수 없다. O/X [O] 3. 다음은 view의 Drawing Cycle 중 LayoutCycle의 호출 순서 [updateViewConstraints(), viewWillLayoutSubviews(), drawRect(), viewDidAppear] [1,2,3,4] viewWillAppear과 viewDidAppear사이에 Constraints, Layout, Draw 순서대로 호출 4. 앱 실행 시 지속적으로 key-value쌍의 사용자의 기본 정보에 대한 데이터를 저장하는 인터페이스는 무엇일까요? 영어로 [UserDefaults, userdefaults, User Defaults, user defaults] ![](https://i.imgur.com/Bdb8voX.png) ## 이지영씨 1. 메서드가 로직대로 동작하고 있는지를 확인하는 행위 기반 테스트를 위한 객체는? 1. Dummy - 인스턴스화 된 껍데기 객체로, 객체의 기능까지는 필요하지 않은 경우 사용한다. (객체의 메서드 내부 구현은 비워져 있을 수 있음) 2. Fake - Dummy와 다르게 내부 구현을 어느정도 가지고 있지만, 실제 객체보다는 단순하게 구현되어 있어 빠르게 테스트를 할 수 있다. - 테스트 케이스 작성을 진행하기 위해 필요한 다른 객체들과의 의존성을 제거하기 위해 사용 3. Stub - 객체의 특정 상태를 가정해서 만들어 놓은 단순 구현체 - 상태 기반 테스트: 메서드가 내놓는 결과물이 내가 예측한 결과물과 일치하는가? - 예: +1을 하는 메서드를 거친 객체의 결과값이 이전 대비 +1이 되었는가? 4. Mock - 행위 기반 테스트: 메서드가 내가 설계한 로직대로 동작하고 있는가? - 예: 메서드A 내에서 메서드B를 한 번 호출하도록 설계되어 있는데, 실제로 메서드B를 한 번 호출하는가? - 답: Mock - 참고하면 좋은 링크: [https://eminentstar.github.io/2017/07/24/about-mock-test.html](https://eminentstar.github.io/2017/07/24/about-mock-test.html) 2. POP(Protocol Oriented Programming)에 대한 설명 중 옳은 것을 모두 고르세요. 1. extension을 활용해 메서드 기본 구현을 작성해 활용할 수 있다. 2. 수평적인 확장이 가능해진다. 3. 클래스 상속에 비해 시스템 비용이 비교적 적다. - 답: b, c - Delegate, DataSource 등의 프레임워크 프로토콜은 Objective-C로 작성되어 있어 swift extension으로는 기본 구현을 할 수 없다. 3. Copy on Write에 대한 설명으로 옳은 것은? ```swift let name: String = "burger" var burger = name // 1 ``` 1. burger와 name은 같은 주소값을 참조하고 있다. 2. 1에서 `name`의 복사본이 생성되었다. 3. 1, 2 모두 옳음 4. 답 없음 - 답: 1 - `burger`의 값을 변경하면 그 때 복사본을 생성한 후 값을 변경한다. 4. 스톤이 키우는 강아지 이름은? (주관식) - 답: 감자