해당 질문은 첫 iOS 개발 면접에서 마주했던 질문이라 기억에 강하게 남아있는 질문이다. 우선 swift 레퍼런스 문서를 보면 다음과 같이 정의를 찾을 수 있다.

Frame

The frame rectangle, which describes the view’s location and size in its superview’s coordinate system.

Bounds

The bounds rectangle, which describes the view’s location and size in its own coordinate system.

Declaration

var bounds: CGRect { get set }
 
두 개념 모두 뷰의 위치와 사이즈를 반환하는 CGRect 타입 변수이다. 
하지만 frame은 해당 뷰가 속해있는 상위 뷰의 좌표계를 기준으로 정해진 크기와 좌표이고, bounds의 경우는 자기 자신의 좌표계를 기점으로 정해진 크기와 좌표이다. 
 

What is View?

UIView

An object that manages the content for a rectangular area on the screen.

뷰가 무엇인지부터 설명하자면 사용자의 앱 위에 그려지게 되는 Label, Switch, Button들과 같은 요소들을 모두 view라고 정의한다. SwiftUI 혹은 UIKit을 통해서 생성할 수 있으며, 이러한 뷰들은 UIView라는 클래스로 생성된 객체들이다. 해당 객체들을 통해 유저와의 상호작용이 가능하다.

 

Create a View

let rect = CGRect(x: 10, y: 10, width: 100, height: 100)
let myView = UIView(frame: rect)

뷰를 생성하기 위해선 크기와 좌표가 필요하며 이러한 좌표와 크기는 CGRect라는 형태로 표현된다. 크기와 좌표가 주어지면 해당 조건에 맞게 화면 위에 그려지게 되는 것이다.

 

CGRect

A structure that contains the location and dimensions of a rectangle.

Creating Rectangle Values

init(origin: CGPoint, size: CGSize)
Creates a rectangle with the specified origin and size.
init(x: Double, y: Double, width: Double, height: Double)
Creates a rectangle with coordinates and dimensions specified as floating-point values.
init(x: Int, y: Int, width: Int, height: Int)
Creates a rectangle with coordinates and dimensions specified as integer values.
init(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat)
Creates a rectangle with coordinates and dimensions specified as CGFloat values.

그렇다면 CGRect는 무엇일까? 위에서 얘기했듯이 뷰의 크기와 좌표계를 담는 구조체이며, 초기화하는 방법에는 여러 가지 방법이 있지만 기본적으로 CGFloat이라는 실수 형태의 자료형을 통해 크기와 좌표를 표현한다.

여기서 CG는 CoreGraphics의 약자로 그래픽 관련 즉 화면 표현에 대한 자료들은 모두 CG로 시작하는 자료형을 사용하니 알아두면 처음 보는 자료형에 대해서도 어떠한 용도로 쓰이는지 유추할 수 있다.

 

iOS의 좌표계 시스템은 뷰의 좌측 상단이 원점(0,0)이며, 화면의 수직면이 y 축이며 수평면이 x 축이다. 즉 y값이 증가하게 되면 아래로 이동하고 x값이 증가하게 되면 우측으로 이동하게 된다. 뷰에 관한 자세한 설명은 해당 글에 따로 정리해두었다.

 

frame과 bounds의 사이즈는 항상 똑같은가?

 

직관적으로 둘의 차이점에 대해 알 수 있는 예시이다. B가 기울어진 상태에서 frame의 경우, 상위 뷰 A의 좌표계에서 차지하는 크기는 좌표를 기준으로 사각형을 그려 표현하게 때문에 B의 frame은 Point(140, 65), Size(320, 320)이 반환되며 bounds의 경우 Point(0,0), Size(200,250)이 반환된다.

 

결론

frame : 상위 뷰의 좌표계 기준으로 좌표 원점과 크기를 반환
bounds : 자기 자신의 좌표계 기준으로 좌표 원점과 크기를 반환

https://github.com/JeaSungLEE/iOSInterviewquestions

 

GitHub - JeaSungLEE/iOSInterviewquestions: 👨🏻‍💻👩🏻‍💻iOS 면접에 나올 질문들 총 정리

👨🏻‍💻👩🏻‍💻iOS 면접에 나올 질문들 총 정리 . Contribute to JeaSungLEE/iOSInterviewquestions development by creating an account on GitHub.

github.com

iOS 개발 관련 지식에 대해 찾아보다가 발견한 글이다. 직무 관련 면접으로 나올 수 있는 예상 질문들이다. 답만 찾아서 외워도 되겠지만, 그렇게 얻은 지식은 또 쉽게 잊혀버리기에 글쓴이의 의도대로 직접 관련 답을 찾아보고 천천히 그에 대한 답을 내려보려고 한다.

iOS

  • Bounds 와 Frame 의 차이점을 설명하시오.
  • 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하시오.
  • 앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가?
  • 앱 화면의 콘텐츠를 표시하는 로직과 관리를 담당하는 객체를 무엇이라고 하는가?
  • App thinning에 대해서 설명하시오.
  • 앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가?
  • @Main에 대해서 설명하시오.
  • 앱이 foreground에 있을 때와 background에 있을 때 어떤 제약사항이 있나요?
  • 상태 변화에 따라 다른 동작을 처리하기 위한 앱델리게이트 메서드들을 설명하시오.
  • 앱이 In-Active 상태가 되는 시나리오를 설명하시오.
  • scene delegate에 대해 설명하시오.
  • UIApplication 객체의 컨트롤러 역할은 어디에 구현해야 하는가?
  • App의 Not running, Inactive, Active, Background, Suspended에 대해 설명하시오.
  • NSOperationQueue 와 GCD Queue 의 차이점을 설명하시오.
  • GCD API 동작 방식과 필요성에 대해 설명하시오.
  • Global DispatchQueue 의 Qos 에는 어떤 종류가 있는지, 각각 어떤 의미인지 설명하시오.
  • iOS 앱을 만들고, User Interface를 구성하는 데 필수적인 프레임워크 이름은 무엇인가?
  • Foundation Kit은 무엇이고 포함되어 있는 클래스들은 어떤 것이 있는지 설명하시오.
  • Delegate란 무엇인지 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오.
  • NotificationCenter 동작 방식과 활용 방안에 대해 설명하시오.
  • UIKit 클래스들을 다룰 때 꼭 처리해야하는 애플리케이션 쓰레드 이름은 무엇인가?
  • App Bundle의 구조와 역할에 대해 설명하시오.
  • 모든 View Controller 객체의 상위 클래스는 무엇이고 그 역할은 무엇인가?
  • 자신만의 Custom View를 만들려면 어떻게 해야하는지 설명하시오.
  • View 객체에 대해 설명하시오.
  • UIView 에서 Layer 객체는 무엇이고 어떤 역할을 담당하는지 설명하시오.
  • UIWindow 객체의 역할은 무엇인가?
  • UINavigationController 의 역할이 무엇인지 설명하시오.
  • TableView를 동작 방식과 화면에 Cell을 출력하기 위해 최소한 구현해야 하는 DataSource 메서드를 설명하시오.
  • 하나의 View Controller 코드에서 여러 TableView Controller 역할을 해야 할 경우 어떻게 구분해서 구현해야 하는지 설명하시오.
  • setNeedsLayout와 setNeedsDisplay의 차이에 대해 설명하시오.
  • stackView의 장점과 단점에 대해서 설명하시오.
  • NSCache와 딕셔너리로 캐시를 구성했을때의 차이를 설명하시오.
  • URLSession에 대해서 설명하시오.
  • prepareForReuse에 대해서 설명하시오.
  • 다크모드를 지원하는 방법에 대해 설명하시오.
  • ViewController의 생명주기를 설명하시오.
  • TableView와 CollectionView의 차이점을 설명하시오.

Autolayout

  • 오토레이아웃을 코드로 작성하는 방법은 무엇인가? (3가지)
  • hugging, resistance에 대해서 설명하시오.
  • Intrinsic Size에 대해서 설명하시오.
  • 스토리보드를 이용했을때의 장단점을 설명하시오.
  • Safearea에 대해서 설명하시오.
  • Left Constraint 와 Leading Constraint 의 차이점을 설명하시오.

Swift

  • struct와 class와 enum의 차이를 설명하시오.
  • class의 성능을 향상 시킬수 있는 방법들을 나열해보시오.
  • Copy On Write는 어떤 방식으로 동작하는지 설명하시오.
  • Convenience init에 대해 설명하시오.
  • AnyObject에 대해 설명하시오.
  • Optional 이란 무엇인지 설명하시오.
  • Struct 가 무엇이고 어떻게 사용하는지 설명하시오.
  • Subscripts에 대해 설명하시오.
  • String은 왜 subscript로 접근이 안되는지 설명하시오.
  • instance 메서드와 class 메서드의 차이점을 설명하시오.
  • class 메서드와 static 메서드의 차이점을 설명하시오.
  • Delegate 패턴을 활용하는 경우를 예를 들어 설명하시오.
  • Singleton 패턴을 활용하는 경우를 예를 들어 설명하시오.
  • KVO 동작 방식에 대해 설명하시오.
  • Delegates와 Notification 방식의 차이점에 대해 설명하시오.
  • 멀티 쓰레드로 동작하는 앱을 작성하고 싶을 때 고려할 수 있는 방식들을 설명하시오.
  • MVC 구조에 대해 블록 그림을 그리고, 각 역할과 흐름을 설명하시오.
  • 프로토콜이란 무엇인지 설명하시오.
  • Protocol Oriented Programming과 Object Oriented Programming의 차이점을 설명하시오.
  • Hashable이 무엇이고, Equatable을 왜 상속해야 하는지 설명하시오.
  • mutating 키워드에 대해 설명하시오.
  • 탈출 클로저에 대하여 설명하시오.
  • Extension에 대해 설명하시오.
  • Extension 내부에서 함수를 override할 수 있는지 설명하시오.
  • 접근 제어자의 종류엔 어떤게 있는지 설명하시오.
  • defer란 무엇인지 설명하시오.
  • defer가 호출되는 순서는 어떻게 되고, defer가 호출되지 않는 경우를 설명하시오.
  • property wrapper에 대해서 설명하시오.
  • Generic에 대해 설명하시오.
  • some 키워드에 대해 설명하시오.
  • Result타입에 대해 설명하시오.
  • Codable에 대하여 설명하시오.
  • Closure에 대하여 설명하시오.
  • Closure와 함수와의 관계에 대해 설명하시오.

ARC

  • ARC란 무엇인지 설명하시오.
  • Retain Count 방식에 대해 설명하시오.
  • Strong 과 Weak 참조 방식에 대해 설명하시오.
  • 순환 참조에 대하여 설명하시오.
  • 강한 순환 참조 (Strong Reference Cycle) 는 어떤 경우에 발생하는지 설명하시오.

Functional programing

  • 순수함수란 무엇인지 설명하시오.
  • 함수형 프로그래밍이 무엇인지 설명하시오.
  • 고차 함수가 무엇인지 설명하시오.
  • Swift Standard Library의 map, filter, reduce, compactMap, flatMap에 대하여 설명하시오.

Architecture

  • MVVM, MVI, Ribs, VIP 등 자신이 알고있는 아키텍쳐를 설명하시오.
  • 의존성 주입에 대하여 설명하시오.

SwiftUI

  • @State에 대해서 설명하시오.

Combine

  • PassthroughSubject에 대해서 설명하시오
  • @Published에 대해서 설명하시오
  • AnyCancellable에 대해서 설명하시오
  • sink에 대해서 설명하시오
  • throttle과 debounce의 차이점을 설명하시오.
  • Data를 Binding 하는 방법에 대해서 설명하시오.

+ Recent posts