ios(14)
-
Any와 AnyObject의 차이점을 설명하세요.
Answer Any는 Swift의 모든 타입을 지칭하는 키워드로, 어떤 타입도 수용 가능합니다. AnyObject는 모든 클래스 타입을 지칭하는 프로토콜로, 클래스의 인스턴스만 수용 가능하기 때문에 클래스의 인스턴스가 아니면 할당할 수 없습니다. 1. Any Swift의 모든 타입을 지칭하는 키워드 var someAny: Any = 100 someAny = "어떤 타입도 수용 가능합니다" someAny = 123.12 // let someDouble: Double = someAny // 컴파일 오류발생 // someAny = nil // 컴파일 오류발생 Any 타입에 123.12라는 Double 자료를 넣어두었더라도, Any는 Any 타입이지 Double 타입이 아니기 때문에 위와 같은 형태로 할당할 수..
2022.07.04 -
오토레이아웃을 코드로 작성하는 방법은 무엇인가? (3가지)
오토레이아웃을 코드로 작성하는 방법에는 3가지가 존재한다. 1. NSLayoutConstraint 2. NSLayoutAnchor 3. VFL(Visual Format Language) 여기서 잠깐!! 스토리보드에서 오토레이아웃을 잡을 때에는 translatesAutoresizingMaskIntoConstraints 속성이 자동으로 false로 반영된다. 하지만 코드로만 개발을 할 때에는 그렇지 않기 때문에 translatesAutoresizingMaskIntoConstraints = false를 직접 써줘야 한다.(SnapKit 라이브러리 사용 시, 자동으로 반영된다.) 1. NSLayoutConstraint 속성값이 길고 직관적인편이나 코드가 길어지게 되면 가독성이 떨어진다는 단점이 있다. NSLay..
2022.06.22 -
Extension에 대해 설명하시오.
확장(Extensions) 여기서 잠깐 ⚠️ 위 애플 가이드에서 "익스텐션은 타입에 새 기능을 추가할 수 있지만 Override는 할 수 없다." 라고 명시되어 있다. 하지만 개발을 하면서 Extension을 통해 Override는 사용 가능하다. 위 소스코드를 보면 Extension에서 shouldAutorotate라는 변수와 viewDidLoad라는 메소드를 Override하고 있고, 에러가 발생하지 않는 것을 볼 수 있다. 이러한 일이 가능한 이유는 컴파일러가 Objective-C와의 호환성을 위해 Extension에서 Override를 허용하기 때문이다. 즉, 메소드가 Objective-C와 호환되는 경우에만 Extension에서 메소드를 Override 할 수 있다는 것이다. 또한 Extensi..
2022.06.10 -
앱이 foreground에 있을 때와 background에 있을 때 어떤 제약사항이 있나요?
생명주기 앱의 최초 실행부터 앱이 완전히 종료되기까지 앱이 가지는 상태와 그 상태들 사이의 전이를 뜻한다. 앱의 상태는 앱이 현재 어떠한 것을 할 수 있는 가를 결정한다. Foreground 상태 : 유저와 직접 상호작용하기 때문에(사용자가 보고 있는 화면) 시스템 자원 사용 등에서 CPU를 비롯한 시스템 자원의 우선순위가 높은 상태이다. Background 상태 : 스크린에 드러나지 않기 때문에 작업을 하지 않거나, 최소한의 작업만 수행해야 한다. Background에 진입했다는 것은 앱이 실행중이지 않다는 의미는 아니다. ex) 음악 앱을 이용하여 노래를 듣는 등 앱이 Background 상태가 되어도 계속 실행해야 될 때가 존재한다. 앱 상태 (UIKit App State) 앱의 상태가 변하게 되면..
2022.05.22 -
실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하시오.
'실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하라'는 다른 말로 '시뮬레이터만으로 할 수 있는 것과 할 수 없는 것을 설명하라'는 말이다. 공식 문서의 내용을 요약하자면, 시뮬레이터는 Mac 기반에서 돌아가기 때문에 컴퓨터의 자원을 활용한다. 이 때, 컴퓨터의 자원이라 함은 CPU, memory 그리고 network connection 등이 될 수 있다. 그렇기 때문에 시뮬레이터 상에서 테스트되는 앱들은 실제 디바이스에서 구동 될 때 보다 빠르고, 부드럽게 동작할 수 있으며, 시뮬레이터에서 테스트 했을 때 보여주는 퍼포먼스 또한 정확한 앱의 성능을 나타내지 않는다는 것을 유의해야 한다. 대부분은 시뮬레이터에서도 테스트가 가능하지만 하드웨어적인 변화가 필요한 요소들 및 몇몇 ..
2022.05.19 -
Singleton Pattern에 대해 설명하시오.
Singleton Pattern 특정 용도로 객체를 하나만 생성하여, 공용으로 사용하고 싶을 때 사용하는 디자인 유형 // User의 정보를 저장하는 클래스 class UserInfo { var id: String? var password: String? var name: String? } 위와 같은 UserInfo 클래스가 있을 때, A ViewController에서는 id, B ViewController에서는 password, C ViewController에서는 name을 입력받아 전달해야 한다고 생각해보자. //A ViewController let userInfo = UserInfo() userInfo.id = "suzumsz" //B ViewController let userInfo = UserI..
2022.05.08