목록App (24)
씬디의 블로그

똑같은 방식의 코드인데 한쪽만 에러가 나는 이유 ❌ 'nil' requires a contextual type❌ Cannot find 'DogBeautyCareUserCoordinator' in scope❌ Cannot infer contextual base in reference to member 'init'Tuist를 쓰고있다보니 import를 해와도 DogBeautyCareUserCoordinator를 읽어올 수 없었다FixHomeUserCoordinator와 DogBeautyCareUserCoordinator의 차이는 접근제어자 public의 유무였다public을 붙여주니 내부에 있는 프로퍼티와 메서드들에게도 public을 붙여달라는 메세지가 떴다 ❌ Property 'payload' must b..

UserDefaults와 KeyChain: iOS 데이터 저장소의 선택과 보안앱 개발을 하면서 사용자 정보를 UserDefaults에 저장하는 경우가 많았다UserDefaults는 앱 설정이나 간단한 사용자 기본 값을 저장하는데 편리하다하지만 프로젝트를 진행하면서, 토큰같은 민감한 데이터를 저장하는 데는 보안상 한계가 있음을 알게 되었고KeyChain을 사용하는 것이 더 적절하다는 것을 깨달았다 샌드박스란 무엇?샌드박스란, 어린 아이들이 안전하게 놀 수 있도록 보호하는 '모래 놀이터'에서 유래한 개념으로보안을 위해 앱의 데이터 접근을 제한하는 모델이다iOS에서 샌드박스는 커널 수준에서 앱의 데이터와 자원을 다른 앱으로부터 격리하여 보호한다 이로 인해 악의적인 앱이 사용자의 데이터를 무단으로 읽거나 수정할..

Swift면접 단골 질문 ARC (강의자료 44회차) ARC란?ARC는 Automatic Reference Counting의 약자로메모리 관리를 자동화하는 기술이다 자동화? 어떻게?Swift에서는 메모리를 추적하고 관리하기 위해 ARC를 사용하고 있고이름 그대로 Automatic! 자동으로 메모리를 알아서 관리해주기 때문에 개발자는 메모리 관리에 크게 신경 쓸 필요가 없다 ARC는 힙 영역에 있는 메모리를 직접 할당하고 해제할 수 있다힙? 코데힙스부터 알아보자https://cyndi0330.tistory.com/49 [운영체제] 메모리 구조 - 코데힙스프로그램이 실행되면 운영체제(OS)는 4가지 영역으로 공간을 할당한다 프로그램의 정보를 메모리에 로드해야 하고프로그램이 실행되는 동안 CPU가 코드를 처..

Swift(강의자료 14회차)1. 인스턴스 프로퍼티인스턴스 프로퍼티는 특정한 구조체, 클래스에 속하는 저장 프로퍼티와 연산 프로퍼티이다값 저장의 여부에 따라 저장 프로퍼티, 연산 프로퍼티로 나뉜다 1-1. 인스턴스 저장 프로퍼티주로 값을 저장하기 위한 목적으로 클래스나 구조체 내에 정의된 변수나 상수를 말한다 프로퍼티를 선언할 때 초기화를 하거나class DrinkClass { let name: String var count: Int var size: String init(name: String, count: Int, size: String) { self.name = name self.count = count self.size = size ..

SwiftUI(강의자료 76회차)SwiftUI 프레임워크에는 'ViewModifier' 라는 프로토콜이 내장되어 있다이 프로토콜을 사용하면 기존에 생성한 뷰에 추가적으로 꾸며줄 수 있는 Custom Modifier를 생성할 수 있다 ViewModifier 구현struct PurpleModifier: ViewModifier { func body(content: Content) -> some View { } }먼저, ViewModifier를 채택한 구조체를 선언한다구조체 내에 body를 입력하면 자동완성으로 메서드가 나타난다 body 메서드는 some View 타입을 반환해야 한다자동완성 된 메서드의 파라미터를 보면 content: Content가 있는데이 파라미터가 ..

Swift면접 단골 질문 앱 생명주기 (강의자료 2회차, 6회차) 앱의 생명주기란?앱의 처음 실행되는 순간부터 종료되는 시점까지의 상태,그리고 앱이 비활성화되거나 background로 전환되는 상태 등의 일련의 과정을 뜻한다 앱의 생명주기를 왜 배워야하지?메모리 효율성앱이 실행되면서 메모리를 효율적으로 사용해야한다. 생명주기를 이해하면 필요할 때 자원을 할당하고, 필요 없을 때 해제하여 시스템 성능을 최적화할 수 있다안전성앱이 예기치않게 종료되거나 비정상적으로 동작하지 않도록 하는 것은 ⭐️매우 중요⭐️ 하다. 생명주기를 알면 앱이 종료되기 전에 중요한 데이터를 저장하거나, 사용자 상태를 유지할 수 있다디버깅 용이성생명주기를 알면 앱이 특정 상태에서 문제가 발생했을 때, 어디에서 무엇이 잘못되었는지 쉽게..

Swift AnyObject 프로토콜을 채택함으로써 클래스 타입을 제한할 수 있다? 왜?? 왜 굳이굳이 AnyObject 프로토콜을 채택해서 클래스 타입으로 제한하는걸까?프로토콜의 채택을 클래스로 제한하는 것이 합리적이라면, 프로토콜을 클래스 전용으로 표시하여 더 나은 런타임 성능을 얻을 수 있다 프로토콜을 클래스 전용으로 표시하면 어떻게 런타임 성능을 얻을 수 있을까?프로토콜을 클래스 전용으로 표시하면, 컴파일러가 클래스만 이 프로토콜을 충족한다는 것을 기반으로 프로그램을 최적화 한다고 한다 그래서 AnyObject라는 프로토콜을 채택하게 되는데AnyObject 프로토콜은 모든 클래스 타입의 인스턴스만 담을 수 있다

SwiftClass 기반의 Realm에서는 didSet이 동작을 안한다? Realm은 클래스 기반이다클래스 기반에서는 프로퍼티 옵저버가 동작을 안한다? 프로퍼티 옵저버란?Property Observer, 그대로 해석하면 Property를 관찰하는 자 인데Property의 값을 관찰하다가 변경되면 호출하게 되는 녀석이다 '값이 변경되면 호출' 이라면 '값'에 의미를 두어야 한다 값 타입, 구조체에서만 Property Observer가 동작하고,참조 타입인 클래스에서는 값이 변한게 아니기 때문에 Property Observer가 동작하지 않는 것이다 그러면 Realm은 클래스 기반이니 Property Observer가 동작할 수 없다그래서 Realm 데이터에서 Property Observer 동작이 필요하..