프로젝트를 진행 중 하나의 코드 리뷰를 받았습니다.해당 피드백을 본 후 모델을 생성할때도 그 용도에 맞게 프로토콜을 채택해야될 것 같다고 생각이 들었습니다 Swift에서 네트워크 통신이나 로컬 파일 저장을 하다 보면 흔하게 마주치는 프로토콜이 있습니다. 바로 Codable, 그리고 그를 구성하는 Encodable, Decodable입니다. 이 글에서는 Apple 공식 문서를 기반으로 이 프로토콜들의 의미와 차이점, 그리고 언제 어떤 걸 써야 할지 정리해보겠습니다.Codable이란?typealias Codable = Encodable & Decodable Codable은 Swift가 제공하는 타입 에일리어스로, Encodable과 Decodable을 동시에 채택한 것을 의미합니다. 즉, 이 타입은 JSON..
비동기 처리, 언제 쓰고 왜 써야 할까?내배캠 앱 개발 입문 주차 과제를 해결하던 중 나온 고민이였다.동기 처리란?비동기 처리(Asynchronous Execution)는 어떤 작업을 기다리지 않고, 다른 작업을 동시에 처리할 수 있도록 해줍니다.Swift에서는 GCD(Grand Central Dispatch)를 사용해 비동기 처리를 구현할 수 있습니다. Dispatch | Apple Developer DocumentationExecute code concurrently on multicore hardware by submitting work to dispatch queues managed by the system.developer.apple.com비동기 처리가 중요한가?iOS 앱은 대부분 단일 메인 스..
Swift 5.9에서는 복사 불가능한 타입(Noncopyable Types)이 새롭게 도입되었습니다. 이 기능을 통해 특정 구조체(struct)나 열거형(enum)을 복사할 수 없도록 만들어, 고유한 소유권을 명확히 관리할 수 있습니다.왜 도입됐을까? 기존 Swift의 값 타입(struct, enum)은 항상 복사가 가능했습니다. 즉, 같은 데이터를 여러 번 복사하여 사용할 수 있었죠. 이는 편리하지만 때론 부적합합니다. 예를 들어, 파일 핸들이나 네트워크 소켓 같은 리소스는 하나의 고유한 소유권만을 요구하며, 복사가 가능하면 리소스 관리가 어려워지기 때문입니다.이 문제를 해결하기 위해 Swift 5.9부터는 복사를 금지하는 기능을 제공합니다.어떻게 사용하나? 복사 불가능한 타입을 정의할 때는 타입 선언..
Swift는 ARC ( 자동 참조 계산 )을 사용하여 앱의 메모리 사용을 추적하고 관리한다.ARC 동작 방식1. 인스턴스 생성과 메모리 할당class의 새로운 인스턴스를 생성할 때 마다 ARC는 해당 인스턴스에 대한 정보를 저장할 메모리 공간을 할당인스턴스의 타입 정보와 프로퍼티의 값이 저장됨.2. 참조 카운트 관리ARC는 사용중인 인스턴스가 메모리에서 해제되지 않도록, 몇개의 프로퍼티, 상수, 변수가 인스턴스를 참조하고 있는지 추적 - 참조 시작 시 : 카운팅 + 1 - 참조 종료 시 : 카운팅 - 1 - 최종적으로 참조 카운트가 0이 되면 인스턴스는 메모리에서 해제3. 메모리 해제참조 카운트가 0이 된 인스턴스는 더 이상 필요하지 않기 때문에, ARC가 해당 인스턴스가 사용했던 메모리..
접근제어자클래스와 구조체를 사용하다 보면 외부에서 특정 데이터에 접근을 제한하고 싶을 때가 있다.struct Person { var name: String var age: Int var havingMoney: Int func introduce() { print("안녕하세요. 제 이름은 \(name)이고, 나이는 \(age)살 입니다.") }}var me = Person(name: "Brody", age: 26, havingMoney: 10000)print(me.havingMoney) 내가 가진 돈은 나만 알고 싶은데 다른 사람에게 알리고 싶지 않을때 접근 제어자를 사용하면 외부에서 접근을 못하도록 막을 수 있다.접근제어자는 외부에서 코드에 대한 접근을 제한하..
📝 중첩된 타입은 하나의 타입 안에 다른 타입을 정의하는 것을 의미한다.구조적으로 복잡한 클래스나 구조체 등을 더 조직적으로 관리할 수 있습니다.class, struct, enum 등에서 사용할 수 있습니다.중첩된 타입을 사용하면 코드의 가독성을 높이고, 타입 간의 연관성을 명확히 할 수 있습니다.타입의 블록 안에서 다른 타입을 정의하고 사용하는 방식으로 구현합니다.struct Car { struct Company { // Car 안에 중첩된 Company 구조체 var name: String var phoneNumber: String func contact() { print("\(name) 회사의 A/S 센터 번호는 \(ph..