안녕하세요, 루피입니다. 오늘은 Swift 메모리 관리의 핵심인 ARC에 대해 정리해보겠습니다. Swift 공식 문서를 바탕으로 ARC의 기본 동작 원리부터, 메모리 누수의 주범인 강한 참조 사이클이 왜 발생하는지, 그리고 weak와 unowned를 사용해 이를 어떻게 해결하는지 총정리해 보겠습니다. 바로 시작합니다.1. ARC란? ARC는 Automatic Reference Counting(자동 참조 카운팅)의 약자로, Swift가 앱의 메모리를 추적하고 관리하는 핵심 메커니즘입니다. 클래스 인스턴스처럼 참조 타입 데이터는 Heap이라는 메모리 영역에 저장되는데, ARC는 이 인스턴스가 더는 필요 없을 때 자동으로 메모리에서 해제해주는 역할을 합니다.잠깐 그러면 struct 나 enum 같은 값타입은 ..
swift
안녕하세요, iOS 개발하는 루피입니다. 오늘은 공식문서를 바탕으로 디자인 패턴 중 싱글톤에 관해 정리해 보겠습니다.바로 시작하겠습니다.Singleton(싱글톤) 싱글톤패턴은 하나의 클래스에서 오직 하나의 인스턴스만 가지는 디자인 패턴으로 클래스의 전역적으로 접근 가능한 공유 인스턴스를 제공하기 위해 사용됩니다. 앱 전반에서 공유되는 리소스나 서비스를 통합적으로 관리하기 위해 직접 싱글톤을 생성할 수 있습니다.예를 들어, 효과음을 재생하는 오디오 채널이나 HTTP 요청을 처리하는 네트워크 매니저를 싱글톤으로 구현할 수 있습니다. 이해가 가시나요? 조금 더 자세히 설명해 보도록 하겠습니다. 인스턴스를 생성하는 데는 생각보다 많은 비용이 드는데요. 이게 단순 작업보다는 I/O 바운드 경우를 확연하게 두드러집..
안녕하세요, 루피입니다. 저번 글에서는 함수형 프로그래밍의 의미에 대해 알아보았는데요. 오늘은 저번에 말씀 들렸던 거처럼 함수형 프로그래밍의 특징과 명령형 프로그래밍과의 차이점에 대해 살펴보겠습니다. 바로 시작합니다.함수형 프로그래밍 특징순수 함수 : 동일한 입력 값에 대해 항상 동일한 출력값을 반환하며, 외부 상태를 변경하지 않는 함수. (저번 글에서 수학적 함수랑 같은 의미라고 말씀 들렸습니다.불변성 : 데이터는 한 번 생성되면 변경되지 않습니다. (저번 글에서 원본 데이터를 변경하기보다는 하나의 데이터를 새로 생성하는 방식을 의미하는 것 같습니다.)고차 함수 : 함수를 인자로 받거나 반환값으로 사용하는 함수입니다. (일급 함수의 개념입니다.)참조 투명성: 동일한 입력값에 대해 항상 동일한 결과를 반..
안녕하세요, 루피입니다. 오늘은 함수형 프로그래밍에 대해 정리해보려고 합니다. 바로 시작합니다.함수형 프로그래밍수학적 함수의 계산을 기반으로 상태 변화와 가변 데이터를 최소화하는 프로그래밍 패러다임이다.처음부터 어려운 단어들이 나열 되는 군요 .... 수학적 함수,, 상태 변화,, 가변 데이터 너무 어렵습니다 ㅠㅠ. 단어의 의미들을 우선 정리해보겠습니다.수학적 함수란?수학에서 함수는 입력값을 받아서 항상 동일한 출력값을 반환하는 규칙입니다. 이는 곧 같은 입력값에 대해 항상 같은 결과를 반환한다는 것인데요. 예를 들어.. f(x) = x+2 이면, f(2) = 4, f(3) = 5 가 될것입니다. 이런 경우 f(2) 는 항상 4가 되고, 외부 환경이나 다른 요인에 영향을 받지 않는다고 볼 수 있는거죠! ..
안녕하세요, iOS 개발하는 루피입니다! 오늘은 저번 시간에 이어 클로저 문법 경량화(최적화)에 대해 정리해 보도록 하겠습니다. 바로 시작하겠습니다.클로저의 문법 경량화클로저 문법 사용 방식을 최적화하여 간단하게 코드를 작성하는 방식을 말합니다. 쉽게 이해할 수 있도록 몇 개의 단계로 나누어 순차적으로 말씀드리겠습니다. 한번 아래의 형식을 경량화해보겠습니다. 예시는 공식문서에 나와 있는 filter(:_)를 가지고 왔습니다!! let arr[1,2,3,4,5,6,7,8,9] arr.filter(isIncluded: (Int) throws -> Bool) arr.filter({ (num: Int) -> Bool in return num.isMultiple(of: 2) }) print(result) ..
안녕하세요, 루피입니다. 오늘은 클로저에 대해 공부하고 정리해 보겠습니다. 바로 시작하겠습니다.1. 클로저란?클로저는 코드 블록으로 특정 작업을 수행하는 기능을 캡슐화한 것입니다. 클로저는 함수와 유사한데요, 사실은 함수 역시 클로저의 일부분입니다. 무슨 말인지 바로 말씀드리겠습니다.클로저는 크게 named closure과 unnamed closure로 나뉘는데요.named closure : 우리가 흔히 부르는 함수unnamed closure : 우리가 흔히 부르는 클로저이름이 나뉘는 데는 이유가 있겠죠?? 사용 목적이 다르기 때문입니다. named closure는 반복하여 사용할 수 있는 코드블록으로 이때, 강조되는 부분은 반복이라는 부분입니다.반복적으로 호출하기 위해서는 명확한 이름을 가지고 명확한 ..
접근 제어자란..?코드를 작성하는 한 파일에서 다른 파일에 있는 코드에 대한 접근을 명시적으로 작성하여 이를 관리하는 것입니다.이를 이용해 우리는 module과 source file에 따라 다른 접근을 할 수 있게 됩니다.Module하나의 프레임워크를 의미하여 코드 상에서 import 키워드로 추가되는 것들이 바로 module이다. 대표적으로 UIKit, Foundation 등이 module에 해당하며, 프로젝트 하위에 있는 각각의 target들도 하나의 module에 속합니다.Source File각 module 안에 있는 파일들을 말한다. 예를 들어, viewContoller.swift 같은 파일들이 하나의 source file에 해당됩니다.Swift의 5가지 접근 제어자특정 접근 제어자가 적용되는 대..
안녕하세요, iOS 개발하는 루피입니다! 바로 안 나오면 모르는 거다. 바로 시작합니다.Cocoa Touch ClassiOS 앱개발을 위한 템플릿 기반 파일로 주로 Cocoa Touch 프레임 워크(UIKit,Foundation 등)의 클래스를 상속받아 시작할 수 있으며, 주로 UI와 관련된 코드를 작성하는 데 사용합니다.특징뷰 컨트롤러, 테이블 뷰 셀, 컬렉션 뷰 셀 등 UI 관련 클래스를 정의하는 목적으로 사용됩니다.선택한 상위 클래스를 상속받는 기본 구조가 자동으로 코드로 생성됩니다.예시import UIKitclass MyViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() ..
안녕하세요, iOS 개발하는 루피입니다! 오늘은 Collection Type 중 Set에 대해 정리해보려고 합니다. 바로 시작합니다.Set이란?Set은 정의된 순서 없이 값은 유형의 고유한 값을 컬렉션에 저장합니다. 항목의 순서가 중요하지 않거나 항목이 한 번만 나타나도록 해야 하는 경우 Array 대신 Set을 사용한다면, 좀 더 쉽게 작업을 진행할 수 있겠죠?Array 대신 Set을 사용하는 경우1. 요소의 포함 여부를 효율적으로 확인해야 할 때let set : Set = [ "AB", "AC", "AD"]if set.contains("AD") { print("True") }이렇게 contains()를 사용한다면, 효율적으로 한 번에 포함 여부를 확인할 수 있습니다.2. 컬렉션 내 요소의 순서가 중..
안녕하세요, 루피입니다. 오늘은 Swift에서 기본적인 문법 개념인 Array에 대해 글을 적어보려고 합니다. 가장 친숙한 개념이기에 잘 이해하고 넘어간다면 좋을 거 같습니다. 바로 시작합니다.Array는 Collection Type 중 하나입니다. Array 외에는 Set , Dictionary가 있는데요. Array는 같은 유형의 값을 정렬된 목록에 저장합니다. 즉 요소가 추가될 때마다 해당 인덱스에 저장되는 형태인 컬렉션입니다. 그렇기에 같은 값이 배열의 여러 위치에서 나타날 수 있죠. 자 그러면 Array를 사용하는 방법에 대해 설명을 해보도록 하겠습니다.1. 빈 Array 생성var arr: [Int] = []// 이런 식으로 빈 Int 타입의 Array를 생성할 수 있습니다.물론 String ..