면접 스터디 1회차 회고

hyun·2025년 7월 31일

면접

목록 보기
1/4

1. Stack과 Queue의 구조와 활용 예시

Stack은 접시 쌓기처럼 생각하면 됨 마지막에 올려놓은 접시가 가장 먼저 꺼내지는 것 처럼 후입선출(LIFO) 방식임
스택은 뒤로가기 버튼 느낌이라 생각하면 됨. 뒤로가기를 눌렀을 때 이전 페이지로 이동하는데 이때 페이지들이 스택에 차곡차곡 쌓이고 뒤로가기를 누르면 가장 마지막에 본 페이지부터 차례대로 꺼내는 것임

Queue는 버스 정류장 줄같이 생각하면 됨 먼저 줄 선 사람이 먼저 타는 선입선출(FIFO) 구조임
큐는 순차적으로 처리할 때 사용함 프린터에 문서를 여러 개 보냈을 때 먼저 보낸 문서부터 출력되는 것 처럼 순서대로 해결함

2. Struct와 Class의 차이점

Struct는 복사해서 쓰는 거라고 생각하면 되고
Class는 공유해서 쓰는 거라고 생각하면 됨

친구한테 내 숙제 공책을 보여주는 게 아니라 복사해서 따로 준다면 struct,
내 숙제 공책을 그냥 같이 보는 거라면 class임
Struct는 누가 값을 바꿔도 나한테는 영향을 주지 않는데 Class는 한 쪽에서 값을 바꾸면 다른 쪽에서도 바뀌게 됨

++ struct는 상속이 되지 않음. 다른 타입이 struct를 기반으로 확장하거나 기능을 덧붙일 수 없음 class는 상속이 가능해서 부모 클래스의 기능을 받고 그걸 수정하거나 확장할 수 있음

Swift에서는 값이 변경되면 안 되는 모델이나 단순히 데이터를 표현할 땐 struct를 쓰고 공통 동작을 여러 객체들이 공유해야 하거나 상태 변화가 필요한 경우엔 class를 씀

3. 의존성 역전이란?

코드에서 누가 누구에게 의존하는가를 바꿔서 유연한 구조로 만드는 원칙

보통 프로그램을 짤 때 핵심 기능이 구체적인 구현을 직접 사용하는 경우가 많음
어떤 클래스가 네트워크 라이브러리를 사용하고 있다면, 그 라이브러리를 못 바꾸고 계속 써야 하거나 테스트하기가 어려움

그런데 의존성 역전 원칙은
구체적인 구현에 의존하지 말고 추상적인 인터페이스에 의존함

구현체를 쓰는 게 아니라 중간에 추상적인 약속(protocol 같은 거)을 만들어두고 그걸 구현한 객체를 나중에 주입받아서 쓰는 식으로 설계됨

이렇게 하면 나중에 구현을 바꿔도 상위 모듈은 손댈 필요가 없고 테스트할 때도 가짜 객체(mock 같은 거)를 넣어거 테스트할 수 있음 유연하고 확장 가능한 구조가 되는 것

4. static func와 class func의 차이점

클래스 || 구조체 안에서 정적인 메서드를 만들 때 사용하는 키워드인데
오버라이딩이 되냐 안 되냐의 차이임

static func은 오버라이딩이 안 돼서 부모 클래스에서 정의한 static 메서드는 자식 클래스가 변경해서 쓸 수 없음 그래서 정해진 기능 그대로 써야 함
유틸리티 함수나 공통된 기능을 고정적으로 제공할 때 사용하게 됨

class func은 오버라이딩이 가능함 자식 클래스에서 그 메서드를 재정의해서 다른 동작을 하게 만들 수 있음
동물 클래스에서 move()라는 메서드를 정의해두고, 강아지 클래스에서 이걸 덮어써서 강아지 방식대로 움직이게 만들 수 있는 것 처럼.

static func은 struct, enum, class 다 쓸 수 있는데,
class func은 class에서만 사용 가능함
struct와 enum은 상속을 지원하지 않기 때문


8월 1일 금요일 모의 면접!
질문, 꼬리 질문 답변

viewDidLoad는 다른화면으로 이동했다가 다시 돌아왔을 때 호출이 되나요?

→ viewDidLoad는 뷰 컨트롤러의 뷰가 메모리에 처음 로드될 때 한 번만 호출됩니다
다른 화면으로 이동했다가 다시 원래 화면으로 돌아왔을 때는 호출되지 않습니다
뒤로 돌아오면서 다시 실행해야 한다면 viewDidLoad가 아니라 viewWillAppear(:)나 viewDidAppear(:)에 배치해야 한다

viewDidLoad가 다시 호출되게 하려면 어떻게 해야 하나요?

→ UINavigationController에서 뒤로 가기 (pop) 했다가 같은 화면을 다시 push하면, 새로운 인스턴스가 생성되니까 viewDidLoad가 다시 호출됩니다

iOS에서 URLSession을 사용하여 네트워크 요청을 보내는 기본적인 과정은 무엇인가요?

→ URL 생성 → (선택) URLRequest 구성 → URLSession 준비 → dataTask(with:)로 요청 생성 → .resume()으로 요청 실행 → 클로저에서 응답 처리

클로저에서 UI 업데이트하려면 주의할 점은?

→ 네트워크 요청의 클로저는 기본적으로 백그라운드 쓰레드에서 실행되는데 iOS의 UI는 메인 쓰레드에서만 업데이트할 수 있기 때문에 UI 관련 코드는 메인 쓰레드로 옮겨서 실행해야 합니다

0개의 댓글