기술 질문 1
모든 View Controller 객체의 상위 클래스는 무엇이고 그 역할은 무엇인지 아는대로 작성해보세요.
모든 ViewController객체의 상위 클래스는 'UIViewController'이다.
UIViewController는 어플리케이션의 사용자 인터페이스를 관리하고, 화면 간의 전환을 처리하는 역할을 담당한다.
기술 질문2
옵셔널과 옵셔널 해제에 대해 아는대로 작성해보세요.
옵셔널(Optional)은 값이 있을 수도 있고 없을 수도 있는 값을 나타낸다.
오류가 발생할 가능성이 있다면, 즉 값이 있을 수도 있고 없을 수도 있는 상황이라면 반환 타입을 반드시 옵셔널 타입으로 설정해주어야 한다.
옵셔널 사용 상황
- 값이 없는 경우: nil(값이 없음)로 처리한다.
- 값이 있는 경우: 값이 존재하는 경우, 해당 값을 옵셔널로 감싸서 처리합니다.
옵셔널의 선언
‘?
’ 기호를 사용해서 선언된다.
ex) var optionalString: String? = "Hello"
여기서 변수 optionalStrin은 Stirng에 ?붙여, 옵셔널 String으로 선언되었다.
(”Hello”의 타입은 옵셔널 String이다.)
이 경우에는 값이 존재하면, 그 값은 그냥 String이 아닌 ‘옵셔널 String’이 된다.
값이 존재하지 않으면 ‘nil’이 된다.
옵셔널 해제(Optional Unwarpping)
옵셔널 해제는, 말 그대로 옵셔널 값을 해제해서 안전한 값으로 만들어주는 것이다. 옵셔널 값을 해제하면 원래의 타입으로 값을 사용할 수 있다.
옵셔널을 해제할 때는 값이 있을 수도 있고, 없을 수도 있기 때문에 이를 고려해서 안전하게 처리해야 하는데(그렇지 않으면 에러 발생!), 이 때 안전한 해제를 위해 제공되는 몇 가지 방법이 있다.
- 강제 해제 (Forced UnWrapping)
옵셔널 타입 값 뒤에 ‘!
’ 붙여주면 된다.
하지만 말 그대로 강제로 해제하는 것이기 때문에,
만약 nil 상태, 즉 값이 없는 상태라면 런타임 에러가 발생한다.
따라서 값이 있는 것이 확실한 경우에 사용해야 한다.
- 옵셔널 바인딩 (Optional Binding)
’if let
’ 또는 ‘guard let
’ 구문을 사용한다.
값의 존재 여부를 확인하고, 이 값을 상수나 변수에 할당해 사용하도록 한다.
값이 없는 경우에는 동작하지 않는다.
옵셔널 체이닝 (Optional Chaining)
옵셔널 값이 중첩된 속성이나 메서드에 속해 있을 때, 옵셔널 값에 안전하게 접근할 수 있도록 한다.
즉 옵셔널 값이 있는 체인(=중첩된 속성이나 메서드의 호출)을 따라가면서 nil이 있으면 결과값이 nil이 되게, 그렇지 않으면 옵셔널 값이 나오도록 하는 것!
두 개의 옵셔널이 호출되는 상황에서 둘 중 하나라도 nil을 가지면 그 체인 전체 결과를 nil로 만들어 에러를 방지한다.
기술 질문3
UIKit에서 스토리보드로 UI 구현하기와 코드로 UI 구현 시의 각각의 장단점을 설명하시오.
먼저 UIKit은 사용자 인터페이스(UI) 구현에 주로 사용되는 프레임 워크이다.
여기서 UI 구현하기 위한 방식은 두 가지가 있다.
1.스토리보드로 구현
장점
- 시각적으로 UI 설계하고 구성하는 것이 가능하다.
- Segue를 통해 화면 전환을 간단하게 구현할 수 있다.
단점
- 협업 시에 여러 명의 개발자가 동시에 수정하면 충돌이 발생할 수 있다.
- 재사용성이 줄어든다. 스토리 보드의 UI 요소들을 이동하려면 복사해서 붙여 넣어야 한다.
2.코드로 구현
장점
- 각각의 화면이 각각의 코드로 구현되기 때문에 협업 시에 여러 명의 개발자가 동시에 수정해도 충돌이 적게 발생한다.
- 재사용성이 늘어난다. 동일한 UI 요소를 여러 화면에서 재사용하기 쉽다. 클래스나 함수로 래핑해 재사용성을 높일 수 있다.
- 유연한 UI 조작이 가능하다. 조건에 따라 UI 변경이 가능하다.
단점
- 시각적 디자인 구현이 어렵다. 모든 UI 요소의 위치, 크기 등을 코드로 명시적으로 지정 하는 것이 필요하다.
- 시각적으로 보면서 구성하는 것이 아니고 코드로 작성해야 하기 때문에 초기 설정 시간이 더 오래 걸린다.
이번 챕터에서 학습을 하며 알게된 기술, 지식 1
Delegate 프로토콜, DataSource 프로토콜
1. Delegate 프로토콜
2. DataSource 프로토콜
DataSource
는 데이터를 제공해 UI 요소가 표시되는 방법을 제어하는 패턴 (그리기)Delegate
는 객체 간의 상호 작용을 위임하는 패턴 (동작)이번 챕터에서 학습을 하며 알게된 기술, 지식 2
extension
확장
기존의 클래스, 구조체, 열거형 또는 프로토콜에 새로운 기능을 추가할 때 사용한다.
즉, 특정 형식을 확장해 외부에서 추가적인 기능을 제공하는 것!!
와.. 오늘 틸 작성하신분이 계셨다니 역시.. 준비성 좋습니다!