Swift

개념 자문자답

GREEN.1229 2021. 4. 29. 11:28

안녕하세요. 그린입니다🟢

이번 포스팅에서는 Swift와 iOS 개발을 하며 몇가지 헷갈렸거나 하는 일부 개념들에 대한 자문자답을 해보겠습니다🧑🏻‍💻

MVC의 단점을 보안하기 위해 나온 아키텍쳐 패턴? (MVVM)

 - MVC: 모델 뷰 컨트롤러 각각을 분리하여 의존성을 없애려 했는데 뷰와 컨트롤러에서도 소통을 하는 의존성이 생길 있어 재사용성이 낮아지는 문제
 - MVP: MVC 동일한 개념으로 C대신 P 프레젠터로 변경된것으로 결국 MVC 마찬가지로 /프레젠터 사이 의존성 문제가 나타남
 - MVVM: 위 2 아키텍쳐 패턴의 단점을 극복하고자 나와 이벤트 흐름이 -> 뷰모델 -> 모델로 이뤄져있어 Command패턴과 Data Binding 통해 의존성을 제거

타입 캐스팅 디이니셜라이저는 클래스의 인스턴스만 가능하다? (O)
 - 타입 캐스팅은 인스턴스 타입 확인 및 슈퍼/서브 클래스 타입같이 사용하기 위한 개념

 - 상속이 불가한 구조체에서는 타입캐스팅이 불가

 - 디이니셜라이저는 deinit 키워드를 사용하여 클래스 인스턴스가 메모리에서 해제되는 시점에 대한 호출

 - 클래스 인스턴스는 힙에 들어가서 인스턴스가 레퍼런스 카운팅 정보를 가지고 있어 디이닛을 통한 해제가 필요

 - 구조체 인스턴스는 사용하지 않으면 바로 스택에서 빠져나오기에 RC 정보가 없어 굳이 디이닛 과정을 거칠 필요가 없음

 

LLDB breakpoint 명령어의 별칭인 b 명령어를 만드는 방법은? (command alias b breakpoint)
 - 정규표현식 반복해서 사용하는 복잡한 명령어에 대해 많이 줄여 사용

 - 참고로 등록한 별칭은 빌드가 종료되면 초기화됨으로 계속 쓰고 싶다면 lldbinit 파일에 생성하여 담아야함

 - 반대로 command unalias b 별칭 해제도 가능

 

그림에서 나오는 소켓통신의 2가지 방법 (TCP / UDP)

 - 소켓통신에는 TCP UDP 방식이 존재

 - TCP 스트림 소켓으로 일대일교환 방식으로 패킷추적관리로 보다 데이터를 안전하게 통신 가능

 - UDP 데이터그램 소켓으로 일대일/일대다/다대다 교환이 가능하며 패킷추적관리가 없어 TCP 비해 안전하지 않지만 속도가 빠름

 - 사진에서도 TCP 느리지만 안전하고 UDP 빠르지만 위험

 

MacOS 패키지 관리자로 소프트웨어의 쉬운 설치와 업데이트 삭제를 관리해주는 시스템은? (Homebrew)

 - Vapor 스위프트 기반의 프레임워크로 Homebrew 통해 설치 가능

 - APT / YUM 리눅스에서 사용되는 패키지 관리자

 

지역화를 나타내는 표현으로 알맞은것 (localization / L10N / l10n)

 - 약어로 두가지로 대소문자 표현함

 

Unowned 참조하는 인스턴스가 메모리에서 해제 될때 ARC 자동으로 참조 값을 nil 변경한다 (X)

 - 미소유참조로 객체가 사라지면 할당되지 않은 공간을 바라보는 댕글러 포인터가 남음

 - 객체가 사라지면 nil로 바뀌는것은 약한참조인 weak

 

코어데이터는 앱에서 모델 계층을 관리하는데 사용하는 데이터베이스이다. (X)

 - DB 아닌 애플이 제공하는 인메모리 방식의 데이터 관리 프레임워크

 - DB 저장소 기능 아니라 undo,redo,캐싱 다양한 기능 사용

 

타입을 다운캐스팅 해주는 키워드는? (as)

 - as 조건부이기에 다운캐스팅 옵셔널을 붙여주어야함 (항상 참일때는 강제추출로)
 - 
부모클래스타입을 자식클래스 타입으로 다운시켜 캐스팅함

 - is 키워드는 인스턴스의 타입을 확인

 

모든 프로세스가 공평하게 실행되는 스케쥴링 방식? (Round-Robin Scheduling)

 - RR: 라운드로빈 스케쥴링의 약자로 계속 돌고 돌기때문에 문맥 교환 오버헤드가 높게 발생
 - FIFO:
먼저 들어온 프로세스부터 처리 선입선출
 - SJF:
실행시간이 적은 프로세스 우선적으로 CPU 할당, 평균 대기시간이 가장적지만 무한 대기가 발생될 가능성이 있음
 - HRN: SJF
보안하여 실행 시간 프로세스가 불리한 단점을 보안 대기시간과 실행시간을 이용해 우선순위를 계산하여 순서 부여 (대기/실행)/서비스시간