본문 바로가기

면접 스터디5

면접스터디 : GC(Garbage Collection)와 ARC Swift에서 ARC로 메모리를 관리하듯이, 다른 언어들도 메모리를 관리해주는 관리 모델이 있는데 대표적인 것이 GC(Garbage Collection)이다. ARC -메모리 영역 중 heap 영역은 동적인 관리가 필요하다. 따라서 필요가 없는 메모리는 적절한 때에 소멸시켜주어야 하는데 이 메모리 관리를 ARC(Auto Reference Counting) 도구를 이용해서 한다. -ARC는 heap 영역에 참조형 자료들이 얼마나 참조되고 있는지 참조횟수로 Count 하고, 참조횟수가 0이 될 때, 메모리가 해제되는 형식이다. -참조횟수가 0이 된다는 것 = 클래스의 인스턴스가 더 이상 필요하지 않을 때 -컴파일 단계에서 코드 분석을 통해 언제 참조되고(retain), 언제 해제 되는지(release)에 대.. 2023. 1. 10.
면접스터디 : 프로세스와 스레드 면접 단골 질문이라고 하는 "프로세스와 스레드에 관하여" 이 질문의 의도는 운영체제가 시스템 자원을 어떤 단위로 할당해주고, 프로세스 내에서 스레드는 이 자원을 어떻게 활용하는 지라고 생각한다. 1. 프로세스 -사전적인 의미로는 "운영체제로부터 할당받는 시스템 자원의 작업 단위", "메모리에 올라와 실행되고 있는 프로그램의 인스턴스" 라고 한다. -먼저 프로그램이란 운영체제로부터 아직 시스템 자원을 할당받지 못한 정적인 상태의 코드 덩어리 라고 할 수 있다. 이 프로그램이 실행하는 순간 운영체제가 시스템 자원을 할당해주고 메모리에 올라가게 되는데 이 상태를 프로세스라고 하는 것이다. 단점 1. 프로세스는 독립적인 메모리 영역(code, data, heap, stack)을 할당 받는다. 그래서 프로세스끼리.. 2023. 1. 6.
면접스터디 : Class의 성능을 향상시킬 수 있는 방법들을 나열 Class의 성능 향상에 도움을 주는 방법들 1. 서브클래싱이 필요하지 않은 Class라면 Class 선언 시 앞에 final 을 붙여준다. -final을 붙여주면 Class의 성능이 향상된다고 하는데, 이 이유는 Swift의 Dispatch에 대해 알아야 이해가 가능하다. -Dispatch는 GCD가 사용하는 Queue인 DispatchQueue와 다른 개념으로 "프로그램이 어떤 메소드를 호출할 것인지 결정하고, 그 메소드를 실행하는 매커니즘" 을 뜻한다. Dispatch에는 Static Dispatch와 Dynamic Dispatch가 있다. 1. Static Dispatch -컴파일 타임에 호출될 메소드를 결정하여 런타임 때 실행한다. -컴파일 타임에 컴파일러가 메소드가 작성된 코드 위치를 파악한 .. 2022. 12. 28.
면접스터디 : Copy-on-Write CoW : Copy on Write -컴퓨터 프로그래밍에서 복사 동작을 할 때 복사본과 원본이 수정되지 않을 경우 새 리소스를 만들지 않고 원본 리소스를 공유하고, 복사본이나 원본에서 첫 수정이 일어났을 때만 새 리소스를 만드는 관리 기법이다. -우리가 사용하는 Swift에서는 CoW작업이 Collection Type(Array, Dictionary, Set)을 복사해서 사용할 때 실행된다. -미리 알고가야 할 점은 Swift에서는 Reference Type(클래스)과 Value Type(구조체, 열거형 등)이 있다. 이 중 Value Type은 copy semantic을 가지고 있어 만약 Value Type의 값을 다른 변수에 넣었을 때, 해당 값의 데이터가 복사되어 2개의 서로 다른 메모리 주소로 저.. 2022. 12. 22.
면접 스터디 : Class vs Struct vs Enum Class(클래스) -청사진으로 어떤 집단의 속성(Property)과 행위(Method)를 정의해 놓은 것이다. -Reference Type(참조 타입). ex) 다른 이에게 사진을 전달할 때 사진의 원본을 참고하도록 한다. 참조한 사진을 변경하면 원본도 같이 변경된다. -메모리 영역 중 heap(힙) 영역에 저장된다. -ARC를 통해서 메모리를 관리한다. -단일 상속이 가능하다. -Class는 참조타입이기 때문에 참조할 필요가 없을 때 메모리에서 해제되는데, 해제되기 직전에 deInit 메소드가 호출된다. 보통 메모리에서 클래스의 인스턴스가 해제되기 직전에 처리해야 할 작업을 deInit 메소드에 넣어준다. deInit 메소드는 class 당 하나만 만들 수 있고, 매개변수와 return 값을 가질 수.. 2022. 12. 20.