24.09.05 Today I Learned

2024. 9. 5. 18:35

오늘은 모의 면접을 대비해서 면접 예상 질문을 공부해봤다.

  1. Extension에서 저장 프로퍼티를 사용할 수 있나요? 
    불가능함. extension에서는 저장 프로퍼티 추가 못 함. extension은 기존 클래스나 구조체에 새로운 기능(메서드, 연산 프로퍼티, 초기화 함수 등)을 추가할 때만 사용 가능함. 저장 프로퍼티는 인스턴스에 메모리를 차지하는데, extension에서는 그걸 허용하지 않기 때문임.
  2. Array에 대해서 설명해주세요.
    Array는 같은 타입의 값들을 순서대로 저장하는 컬렉션 타입임. 인덱스를 사용해 요소에 접근할 수 있음. 배열은 Array<Element> 형태로 선언되고, 요소의 타입은 제네릭으로 정의됨. 배열은 가변적일 수 있고, append, remove, insert 같은 메서드를 사용해 요소를 추가하거나 제거할 수 있음.
  3. Stack, Queue 차이점에 대해서 설명해주세요.
    • Stack: LIFO(Last In, First Out) 구조임. 마지막에 추가된 요소가 먼저 제거됨. push와 pop으로 관리함. 함수 호출 스택, 네비게이션 스택 같은 곳에서 사용됨.
    • Queue: FIFO(First In, First Out) 구조임. 가장 먼저 추가된 요소가 가장 먼저 제거됨. enqueue와 dequeue로 관리함. 프린터 작업 대기열 같은 곳에서 사용됨.
  4. iOS에서 Stack을 사용하는건 어떤게 있을까요?
    내가 사용해본건 네비게이션 스택에 Stack 개념을 사용함. 예를 들어, UINavigationController가 있음. 이 컨트롤러는 뷰 컨트롤러들을 스택으로 관리하며, 새로운 화면을 push하고, 이전 화면으로 pop하는 방식으로 작동함. 
    예를 들면, 첫 화면이 스택에 들어가서 FirstViewController가 가장 아래에 깔리게 되고, 사용자가 새 화면으로 가면 SecondViewController가 그 위에 쌓이게 됨. 그러고 이제 뒤로가기 버튼등을 눌렀을때 SecondViewController가 스택에서 먼저 제거가 되므로 다시 첫화면으로 돌아가는 것임.
  5. 저장 프로퍼티와 연산 프로퍼티에 대해서 설명해주세요.(솔직히 아직 잘 모름)
    • 저장 프로퍼티: 클래스나 구조체의 인스턴스에 실제로 값을 저장하는 프로퍼티임. 값을 저장하고 유지함.
    • 연산 프로퍼티: 값을 저장하지 않고, 대신 다른 프로퍼티나 계산을 통해 값을 반환하는 프로퍼티임. get과 set을 통해 값을 계산하거나 설정할 수 있음.
  6. lazy 프로퍼티에 대해서 설명해주세요. (솔직히 아직 잘 모름)
    lazy 프로퍼티는 최초 접근 시점에 초기화되는 저장 프로퍼티임. 초기화 비용이 크거나, 인스턴스 생성 시점에 바로 필요하지 않은 경우에 사용됨. 주로 클로저를 통해 초기값을 지정하며, 해당 프로퍼티에 처음 접근할 때 클로저가 실행되어 값을 설정함.
  7. Optional에 대해서 설명해주세요.
    Optional은 값이 있을 수도 있고, 없을 수도 있는 상황을 표현하는 타입임. Optional 타입은 nil을 가질 수 있으며, Swift에서 안전하게 값의 유무를 처리하기 위해 사용됨. Optional 타입은 ?를 사용해 선언됨.
  8. Optional을 사용하는 이유에 대해서 설명해주세요.
    Optional을 사용함으로써 값이 존재하지 않을 수 있는 상황을 안전하게 처리할 수 있음. nil이 될 수 있는 변수를 명확히 표현해, 런타임 오류를 방지하고 코드의 안정성을 높임.
  9. Optional 언래핑 방법에 대해서 아는만큼 설명해주세요.
    • Forced Unwrapping: !를 사용해 강제로 언래핑함. 값이 nil이면 런타임 오류 발생함.
    • Optional Binding: if let이나 guard let을 사용해 안전하게 언래핑함. 값이 nil이 아닐 때만 사용함.
    • Nil-Coalescing Operator: ?? 연산자를 사용해 Optional 값이 nil일 때 기본값을 제공함.
    • Optional Chaining: ?를 사용해 Optional 값의 속성이나 메서드에 접근함. 중간에 nil이 있으면 전체 표현식이 nil을 반환함.
  10. Closure에 대해 설명해 주세요. (솔직히 아직 잘 모름)
    Closure는 코드에서 전달되고 사용할 수 있는 독립적인 블록임. 함수와 유사하며, 변수나 상수로 저장하거나 함수의 매개변수로 전달될 수 있음. Swift에서 클로저는 클로저 표현식, 축약된 문법, 후행 클로저 등 다양한 형태로 사용됨.
  11. Escaping Closure에 대해 설명해 주세요.
    Escaping Closure는 함수의 실행이 끝난 후에도 호출될 수 있는 클로저임. 클로저가 함수의 외부에서 사용되거나 나중에 실행될 때 @escaping 키워드를 사용해 정의함. 주로 비동기 작업에서 사용됨. (Rxswift로 바꿔서 사용해봄)
  12. Extension에 대해 설명해 주세요.
    Extension은 기존 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가할 수 있는 기능임. Extension을 통해 기존 타입에 메서드, 연산 프로퍼티, 이니셜라이저, 서브스크립트, 프로토콜 준수 등을 추가할 수 있음. 기존 타입을 확장하고, 재사용성을 높이며, 코드를 더 모듈화할 수 있게 해줌.
  13. Extension을 사용해보셨나요?
    사용해 봤음. 기존 타입에 새로운 메서드를 추가하거나, 프로토콜을 채택하도록 확장하는 데 사용했음. 예를 들어, UI 관련 코드를 분리하는 데 활용했음.
  14. class와 struct의 차이점에 대해서 설명해주세요.
    • 클래스 (Class): 참조 타입임. 인스턴스를 다른 변수에 할당하거나 함수에 전달할 때 복사본이 아닌 참조가 전달됨. 상속 가능함. 런타임에 ARC로 메모리 관리됨.
    • 구조체 (Struct): 값 타입임. 인스턴스를 다른 변수에 할당하거나 함수에 전달할 때 복사본이 전달됨. 상속 불가능함. 가벼운 메모리 관리 제공함.
  15. class func와 static func의 차이점에 대해서 설명해주세요.
    • class func: 클래스 메서드임. 서브클래스에서 재정의 가능함. 메서드가 호출될 때 해당 클래스의 인스턴스에 접근할 수 있음.
    • static func: 타입 메서드임. 서브클래스에서 재정의 불가능함. 메서드가 호출될 때 클래스나 구조체 자체에만 접근할 수 있음.
  16. call by reference와 call by value에 대해서 설명해주세요. (이해못함)
    • Call by Value: 함수에 인자를 전달할 때 값이 복사되어 전달됨. 함수 내에서 인자의 값을 변경해도 원본 값에 영향 없음.
    • Call by Reference: 함수에 인자를 전달할 때 인자의 참조가 전달됨. 함수 내에서 인자의 값을 변경하면 원본 값도 변경됨.
  17. mutating 키워드에 대해서 설명해주세요. (이해못함)
    mutating 키워드는 구조체나 열거형의 메서드에서 인스턴스의 프로퍼티를 수정할 수 있게 해줌. 기본적으로 구조체와 열거형은 값 타입이기 때문에, 메서드 내에서 프로퍼티 수정 불가능함. mutating 키워드 사용하면 프로퍼티 수정하거나, self를 새로운 인스턴스로 교체 가능함.
  18. 객체지향 프로그래밍에 대해서 설명해주세요. (이해못함)
    객체지향 프로그래밍(OOP)은 프로그램을 객체라는 기본 단위로 구성하는 프로그래밍 패러다임임. 각 객체는 데이터와 메서드를 가지며, 프로그램은 이 객체들 간의 상호작용으로 이루어짐. OOP는 코드의 재사용성, 확장성, 유지보수성을 높이는 데 중점을 둠.
  19. 객체지향 프로그래밍의 특징에 대해서 아는만큼 설명해주세요. (이해못함)
    • 추상화: 복잡한 시스템을 단순화해 핵심 개념만 모델링함.
    • 캡슐화: 객체의 상태와 행동을 하나로 묶고, 외부에 노출하지 않음. 내부 구현을 숨길 수 있음.
    • 상속: 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아 사용할 수 있음.
    • 다형성: 동일한 인터페이스나 메서드를 다양한 방법으로 구현할 수 있음.
  20. 상속에 대해서 설명해주세요. (이해못함)
    상속은 한 클래스가 다른 클래스의 속성과 메서드를 물려받아 사용하는 것임. 상속을 통해 코드 재사용성을 높이고, 기존 클래스를 확장할 수 있음.
  21. protocol에 대해서 설명해주세요. (이해못함)
    protocol은 특정 기능이나 속성의 청사진을 정의하는 것임. 클래스, 구조체, 열거형이 이 protocol을 채택해서 정의된 요구사항을 구현해야 함. 다중 상속이 불가능한 Swift에서 프로토콜을 사용하면 다양한 타입에 공통된 기능을 추가할 수 있음.
  22. Codable에 대해서 설명해주세요. (이해못함)
    Codable은 Swift에서 JSON이나 Plist 같은 외부 데이터 포맷을 인코딩(Encoding)하고 디코딩(Decoding)하는 프로토콜임. Encodable과 Decodable 프로토콜을 함께 사용한 약어임. 이 프로토콜을 채택하면 구조체나 클래스가 손쉽게 외부 데이터를 변환할 수 있음.
  23. Dictionary를 사용해보셨나요?
    사용해보진 못했지만 팀원이 사용하는 것은 봤음. Firestore에서 데이터를 가져올때 swift에서는Dictionary 형태로 데이터를 처리하는 것으로 알고있음. 그래서 데이터를 읽어오면 Swift에서는 Dictionary<String, Any>로 반환 되는 것으로 앎.
  24. Hashable에 대해서 설명해주세요. (이해못함)
    Hashable은 객체를 해시 값으로 변환할 수 있게 하는 프로토콜임. 이 해시 값은 컬렉션 타입에서 빠른 검색과 비교를 가능하게 함. Dictionary나 Set과 같은 타입에서 키로 사용되는 타입은 Hashable을 준수해야 함. (이게 무슨뜻이지..)
  25. Swift 접근제어자에 대해서 아는만큼 설명해주세요.
    Swift 접근제어자는 코드의 접근 범위를 제한하는 데 사용됨. private, (fileprivate), (internal), public, (open)이 있음. private은 같은 파일 내에서도 같은 타입에서만 접근 가능, fileprivate은 같은 파일에서 접근 가능, internal은 모듈 내에서 접근 가능, public은 모듈 외부에서도 접근 가능, open은 public보다 더 자유롭게 상속이나 오버라이드가 가능함.
  26. Swift Default 접근제어자는 무엇인지 설명해주세요.
    Swift에서 기본 접근제어자는 internal임. 별도로 접근제어자를 명시하지 않으면 같은 모듈 내에서 접근 가능함.

 

'Today I Learned > 2024' 카테고리의 다른 글

24.09.12 Today I Learned  (0) 2024.09.12
24.09.10 Today I Learned  (0) 2024.09.10
2024.09.03 Today I Learned  (1) 2024.09.03
24.09.02 Today I Learned  (0) 2024.09.02
24.08.26 Today I Learned  (0) 2024.08.26

BELATED ARTICLES

more