면접 질문 공부

이창형·2023년 3월 6일
0

면접 준비

목록 보기
1/1

1. struct,class,enum 차이점?

  • class는 참조 타입, struct와 enum은 값 타입
  • class는 상속 가능, struct와 enum은 상속 불가
  • class와 struct는 초기화 함수(init)가짐 enum은 가지지 않음
  • class는 공유 개념이라 참조하는 값이 바뀌면 기존 값도 영향을 받고 struct는 복사 개념이라 참조하는 값이 바뀌어도 기존 값에는 영향이 없다

2. ARC란?

  • 자동으로 참조횟수를 계산해준다. class의 인스턴스에서만 적용
  • 컴파일 타임에 실행된다

3. strong, weak

  • 인스턴스는 참조 횟수가 0이 되는 순간 메모리에서 해제가 된다, 참조의 기본인 strong 참조를 하면 참조 횟수가 1 올라간다. nil 할당시 횟수 -1
  • 인스턴스끼리 강한 참조를 사용할때 문제가 발생하여 메모리 누수가 일어날 수 있다. 그럴 때 weak을 사용하여 참조 횟수를 올리지 않고 참조할 수 있다.(옵셔널 변수만 가능)

4. 옵셔널이란?

  • 값이 있을 수 도 없을 수 도 있는 값
  • 기본값 -> nil

5. 옵셔널 바인딩?

  • 강제 언래핑 -> !
  • if let: 값의 유무를 확인 후, 있을 때 없을 때 각각의 코드를 실행
    guard let: 값의 유무를 확인 후, 값이 없으면 함수를 실행하지 못하도록 방어

6.@State

  • 변수에 변화가 생기면 해당 변수의 값을 읽거나 새로 쓸 수 있음
  • UIKit 을 사용했을 때는 어떠한 변수에 변화가 생기면 해당 변화를 직접 관찰하고 반영 해 주어야 했는데 SwiftUI에서는 @State를 사용하면 자동으로 가능
  • @State 로 선언된 속성을 다른 뷰에서 사용하려 한다면 @Binding 을 사용

7.Frame vs Bounds

  • Frame : 부모 뷰의 상대적인 위치 (x,y) 및 크기 (너비와 높이)로 표현되는 사각형
  • Bounds : 자체 좌표계 (0,0) 을 기준으로 위치 (x,y) 및 크기 (너비와 높이)로 표현되는 사각형

8.Delegate 패턴을 활용하는 경우를 예를 들어 설명하시오. retain이 되는 지도 설명하시오

  • 객체지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아니라 해야할일 중 일부를 다른 객체에게 넘기는 것(위임하는 것)

  • 대표적으로 TableViewDelegate가 있다 뷰컨트롤러에 딜리게이트 함수를 정의하고 테이블뷰의 동작이 일어나면 해당 딜리게이트 함수를 호출하고 뷰컨트롤러가 대신 처리해줌

  • Delegate는 객체 간의 작업이여서 참조 값을 사용하기 때문에 retain 현상이 일어난다. 해결방법은 weak를 사용하여 참조 횟수를 올리지 않는 방법

9.프로토콜이란?

  • 어떤 기능을 수행할 때 필요한 어떠한 프로퍼티, 메서드에 대해 구현하는 것이 아닌, "선언"만 해두는 것

10.static?

  • 오버라이딩을 금지

11. 앱의 생명주기

    1. Not running: 앱이 완전히 종료되어 동작하지 않는 상태
    1. Inactive (Foreground): 앱이 실행되면서 foreground에 진입, 어떤한 이벤트도 받지 않는 상태
    1. active(Foreground): 앱이 실행 중이며, foreground에 있고, 이벤트를 받고 있는 상태
    1. Background: 앱이 백그라운드에 있음, 다른 앱으로 전환, 홈버튼을 눌러 밖으로 나갔을 때의 상태
    1. Suspended: 앱이 background 상태에 있지만, 아무 것도 실행하지 않은 상태. background 상태에 있다가 특별한 작업이 없을 경우 suspended상태가 된다. 배터리 사용x, 메모리 부족하면 알아서 메모리에서 삭제

12. Extension이란?

  • Extension은 클래스, 구조체, 열거형 타입에 새로운 메서드, 프로퍼티, 생성자를 추가적으로 정의해 사용하기 위해 사용됩니다.
  • 이때 저장 프로퍼티는 extension에 정의할 수 없고, 연산 프로퍼티만 정의할 수 있습니다.
  • 타입에 기능을 추가하는 방법
  • 수평 확장이기 때문에 오버라이딩 안됌

13. Closer

  • Closer에는 Unnamed Closer와 Named Closer가 있는데 보통 Closer라 하면 Unnamed Closer를 뜻한다

14. 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는것은?

  • 할 수 있는 것: 앱을 테스트하기 전 빠른 프로토 타이핑 및 개발을 할 수 있음
  • 할 수 없는 것: 푸시 알림, 가속도 센서, 전화, 카메라, 정확한 앱의 성능 및 메모리 사용량을 알 수 없음

15.Escaping Closure의 개념이 무엇인가요?

  • 메서드 파라미터로 전달받은 closure 를 메서드의 라이프사이클 내에서 실행하여 끝내지 않고, 메서드 scope 의 외부에 전달하려 할 때는 해당 closure 를 escaping 해야한다.
    해당 메서드의 호출이 끝난 이후에도 closure 는 메모리 어딘가에 저장되어야 하며, 이는 closure 안에서 사용된 outer object (self 와 같은) 에 weak 와 같은 레퍼런스타입을 사용해야할 수 있음을 주의하도록 한다.
    escaping 이 명시되어있지 않으면 기본적으로 non-escaping 이며, 이는 메서드의 실행이 끝나기 전에 closure 의 사용이 모두 완료됨을 보장하며, 따라서 closure 내에서 weak 을 굳이 사용하지 않아도 안전할 수 있음을 의미하기도 한다.

16. 동기(sync) vs 비동기(async)

  • 동기: 원래의 작업이 진행되고 있던 메인 스레드에서 global dispatch queue 로 task 를 보낸 후, 다음 라인 실행을 위해 해당 작업이 끝나기를 기다린다.
  • 비동기: 원래 작업이 진행되고 있던 메인 스레드에서 global dispatch queue 로 task 를 보낸 후, 해당 작업이 끝나기를 기다리지 않고 이어서 할일을 한다.

17. 오버라이딩 vs 오버로딩

  • 오버라이딩은 슈퍼클래스에서 상속할 것들은 재정의하는 것이고 오버로딩은 함수 이름은 같으나 파라미터나 리턴타입을 다르게하여 중복 선언할 수 있는것을 의미한다

18. 에러 핸들링 방법?

  • do-cathch 문을 사용하는 방법, optional을 사용하는 방법, error가 발생하지 않는다고 명시 하는 방법이 있다.
profile
iOS Developer

0개의 댓글