
변수 : 변할 수 있는(값을 수정할 수 있는, mutable) 자료(데이터)를 담을 수 있는 바구니필요에 따라 값을 재할당할 수 있다변수 선언 방법: var 이름: 타입 = 값변수 이름 여러 개를 한번에 선언하는 방법변수의 이름(식별자)은 소문자로 시작(lowerCam
Swift에서 사용하는 데이터 타입Int: 정수(Integer)Float: 실수(부동소수점) 6자리 소수점Double: 실수(부동소수점) 15자리 소수점Character: 문자(글자 한개)String: 문자열Bool: 참과 거짓(true, false)기타 UInt, U

타입 주석은 변수를 선언할 때 변수의 자료형을 명확하게 지정하는 방식을 말한다변수 또는 상수를 선언할 때 타입을 지정하지 않아도 컴파일러가 타입을 유추하여 알맞는 타입으로 저장하는 방식위와 같이 변수 또는 상수 선언 시 타입을 지정하지 않아도 컴파일러가 타입을 유추하여

단항연산자(Unary Operator): +a, -a, !a단항연산자는 단일 대상의 바로 앞(prefix) 또는 바로 뒤(postfix)에 위치하는 연산자를 말한다단항연산자는 공백없이 반드시 붙여서 사용한다이항연산자(Binary Operator): a + b, a &l
특정 조건이 참(true)인지 검사하고, 그 조건이 만족되면 해당 코드 블록을 실행하는 제어문이다특정 값에 대한 다양한 경우(case)를 처리할 때 사용하는 조건 분기문이다여러 case를 명확하게 구분할 수 있으며, 각 case마다 해당하는 코드 블록이 실행된다모든 가
튜플은 여러 개의 값을 한 묶음으로 만드는 Compound(복합 / 혼합) 타입특별하게 타입이 정해져 있지 않다포함될 데이터의 갯수를 마음대로 정의할 수 있다사용하는 이유:관련 데이터 그룹화: 서로 관련 있는 여러 데이터를 하나로 묶어 관리하면, 코드가 더 깔끔해지고
삼항 연산자는 조건에 따라 두 가지 값 중 하나를 선택할 때 사용하는 간결한 문법이다일반적인 if-else 문을 한 줄로 표현할 수 있어 코드가 짧아지고 가독성이 좋아진다조건: Boolean 타입의 표현식이다참일 때의 값: 조건이 true일 때 선택되는 값거짓일 때의
Swift에서 범위 연산자는 시작값과 끝값 사이의 연속적인 값을 표현할 때 사용하는 연산자이다주로 반복문이나 배열의 특정 구간에 접근할 때 유용하게 사용된다시작값과 끝값 모두 포함하는 범위를 나타낸다시작값은 포함하지만, 끝값은 표함하지 않는 범위를 나타낸다시작점이나 끝
컬렉션이나 범위 등 반복 가능한 시퀀스의 각 요소에 대해 반복 실행할 때 사용하는 구문이다Swift에서는 주로 for-in 문을 사용하며, 간결하고 직관적인 문법으로 많은 반복 작업을 쉽게 처리할 수 있다간결함: 배열이나 범위의 모든 요소에 대해 일괄 처리할 때, 복잡
코드의 흐름을 조작할 수 있도록 도와주는 문장이다그 중 continue와 break는 반복문(for, while, repeat-while)에서 자주 사용된다break 문은 현재 실행 중인 반복문이나 switch 문을 즉시 종료하는 역할을 한다반복문에서 break를 만나
함수(Function)는 특정 작업을 수행하는 코드 블록이다Swift에서 함수를 사용하면 코드를 재사용할 수 있고, 더 깔끔하고 유지보수하기 쉬운 코드를 작성할 수 있다함수의 정의(Definition): func 키워드를 사용하여 함수를 만들고, 어떻게 동작할 것인지
코딩에서의 대원칙 : 중괄호 내애서 밖의 변수는 접근 가능, 중괄호 밖에서 중괄호 내의 변수는 접근 불가능Scope(스코프)는 변수나 함수가 유효한 범위를 의미한다즉, 어디에서 변수를 사용할 수 있고, 어디에서 사용할 수 없는지를 결정하는 규칙이다Swift에서는 스코프
제어 전송문(Control Transfer Statement)은 코드의 실행 흐름을 변경하는 문장이다즉, 프로그램이 특정 조건에서 어떤 코드 블록을 건너뛰거나 종료할 수 있도록 제어할 수 있다Swift에서 사용되는 주요 제어 전송문은 다음과 같다return 문은 현재
Swift에서 함수의 매개변수(Parameter)는 기본적으로 값 전달(Call by Value) 방식이다즉, 함수의 인자로 전달된 변수는 함수 내부에서 변경되더라도 원래 변수에는 영향을 미치지 않는다하지만 inout 키워드를 사용하면 변수를 직접 수정할 수 있는 "참
Swift의 guard 문은 특정 조건을 만족하지 않으면 실행을 중단하고 빠져나가는 제어문이다주로 빠른 종료(Early Exit)를 위해 사용되며, 코드의 가독성을 높이는 데 도움일 준다guard 문의 조건을 평가하고true(조건 만족) -> 다음 코드 계속 실행fal
Swift에서 Attribute Keyword(어트리뷰트 키워드)는 @ 기호로 시작하며, 컴파일러에게 특정한 동작을 지시하는 메타데이터이다즉, 코드의 특정 부분에 특별한 속성을 부여하여 컴파일러가 어떠헥 처리해야 하는지 알려주는 역할을 한다컴파일러의 동작을 조정가독성을
튜플(Tuple)은 여러 개의 값을 하나의 그룹으로 묶을 수 있는 자료형이다.Swift에서 튜플을 사용하는 이유는 여러 가지가 있지만, 함수와 연관지어 설명하는 더욱 유용성을 이해할 수 있다보통 함수는 하나의 값을 반환한다이 함수는 10 + 2의 결과인 5만 반환한다.
재귀 함수(Recursive Function) 재귀 함수(Recursive Function)란 자기 자신을 호출하는 함수를 의미한다 즉, 함수 내부에서 자신을 다시 호출하는 방식으로 특정 문제를 해결하는 기법이다 재귀 함수의 기본 구조 재귀 함수는 보통 다음과 같은
Swift의 옵셔널(Optional) 타입은 값이 있을 수도 있고 없을 수도 있는 상태를 표현할 수 있는 특수한 타입이다옵셔널을 이해하면 Swift에서 안전하게 nil 값을 다루고, 앱이 충돌하지 않도록 코드를 작성할 수 있다Swift에서는 변수나 상수가 nil 값을
Swift의 컬렉션(Collection)은 여러 개의 값을 저장하고 관리하는 데이터 구조이다컬렉션에는 배열(Array), 딕셔너리(Dictionary), 집합(Set) 세 가지 주요 유형이 있다Swift의 컬렉션은 다음과 같은 특성을 가진다값을 여러 개 저장할 수 있다
기본 타입은 Swift에서 가장 기본적인 데이터 타입이다. 우리가 흔히 사용하는 자료형이 여기에 포함된다하지만, 기본 타입만으로는 현실 세계의 복잡한 개념을 표현하기 어려울 때가 있다예를 들어, “요일”을 표현한다고 할 때 String으로 "Monday", "Tuesd
클래스는 객체를 만들기 위한 설계도(붕어빵 틀) 역할을 한다클래스를 사용하면 같은 속성과 기능을 가진 여러 개의 객체를 생성할 수 있다객체(인스턴스)의 데이터(정보) 를 저장하는 변수 또는 상수var 또는 let 키워드를 사용하여 선언예: 자동차의 브랜드(brand),
Swift에서 초기화(Initialization)는 새로운 인스턴스를 만들 때 속성(Property)에 초기 값을 설정하는 과정이다구조체(struct), 클래스(class), 그리고 열거형(enum) 모두 초기화 과정이 필요하다속성에 기본값을 설정하면, 따로 생성자(i
Swift에서 class(클래스)와 struct(구조체) 모두 데이터를 정의하는 기본적인 방법이다하지만 메모리 관리 방식, 상속 여부, 참조 방식, 속성 변경 가능 여부에서 큰 차이가 있다Swift의 구조체와 클래스의 가장 큰 차이점은 값 형식(구조체)과 참조 형식(클
저장 속성은 인스턴스가 가지고 있는 고유한 값을 저장하는 변수 또는 상수이다구조체와 클래스 모두 사용 가능하며, 인스턴스가 생성될 때 메모리에 저장된다var로 선언하면 값을 변경할 수 있다 (let으로 선언하면 값 변경 불가)인스턴스 생성 시 반드시 초기화되어야 한다각
계산 속성은 값을 정의하지 않고, 다른 저장 속성을 이용해 계산된 값을 제공하는 속성이다저장 공간을 사용하지 않으며, 값을 요청할 때마다 계산을 수행한다함수처럼 동작하지만, 속성처럼 사용되기 때문에 더 깔끔하게 표현할 수 있다주행 가능 거리를 확인하려면 calculat
타입 속성(Type Properties)는 인스턴스가 아닌 타입 자체에 속산 속성이다인스턴스를 생성하지 않고도 접근할 수 있으며, 모든 인스턴스가 공유하는 값을 저장하거나 계산된 값을 제공할 때 사용한다저장 타입 속성(Stored Type Properties)과 계산
속성 감시자(Property Observer)는 저장 속성의 값이 변경되는 것을 감지하고, 시점마다 특정 코드를 실행하도록 하는 기능이다저장 속성의 값이 변경되기 전과 후에 각각 코드를 실행할 수 있다willSet 감시자: 값이 저장되기 직전에 호출된다didSet 감
인스턴스 메서드는 특정 인스턴스에 속한 함수이다인스턴스의 속성을 읽거나 수정하거나, 인스턴스와 관련된 기능을 제공하는 메서드이다클래스, 구조체, 열거형에서 정의할 수 있다인스턴스의 속성이나 메서드를 지칭할 때 사용메서드 내에서 속성 이름과 매개변수 이름이 겹칠 때 명확
타입 메서드(Type Methods) 는 인스턴스가 아닌 타입 자체에 속한 메서드이다클래스, 구조체, 열거형에서 선언할 수 있다인스턴스를 생성하지 않고도 타입 이름을 통해 직접 호출할 수 있다타입 자체와 관련된 기능이나 공통된 동작을 구현할 때 사용된다클래스: stat
서브스크립트(Subscript)는 클래스, 구조체, 열거형에서 대괄호(\[]) 문법으로 값을 설정하거나 가져오는 기능을 제공한다인스턴스의 속성이나 메서드를 호출하는 대신, 특정 인덱스 또는 키로 값을 접근할 수 있게 하는 문법이다배열(array\[index]), 딕셔너
접근 제어는 코드의 접근 가능 범위를 설정하여 외부에서 사용 가능한 범위를 제한하는 기능이다외부 객체가 특정 기능이나 속성에 접근하는 것을 막아, 데이터 보호 및 캡슐화(Encapsulation) 를 강화한다싱글톤 패턴은 앱 전체에서 단 하나의 인스턴스만 존재하도록 보
상속(Inheritance) 은 클래스가 다른 클래스의 특성을 물려받아 사용하는 것을 의미한다새로운 클래스를 정의할 때, 기존 클래스의 속성(저장 속성)과 메서드(기능) 를 그대로 물려받아 사용할 수 있다상속은 Swift에서 클래스(Class) 에서만 사용 가능하며,
클래스, 구조체, 열거형의 인스턴스를 생성하는 과정이다각 저장 속성에 대한 초기값을 설정하여 인스턴스를 사용 가능한 상태로 만드는 과정이다열거형의 경우 저장 속성이 없으므로 case 중 하나를 선택하여 인스턴스를 생성한다생성자(Initializer)의 역할은 인스턴스를
하위 클래스는 상위 클래스의 생성자를 기본적으로 상속하지 않는다하위 클래스에 정의된 저장 속성이 초기화되지 않을 위험을 방지하기 위해서이다하위 클래스는 자신의 저장 속성을 완전히 초기화하기 전에 상위 클래스의 초기화를 호출해야 한다 (super.init())상위 클래스
하위 클래스에서 새로운 저장 속성이 추가되지 않았거나, 모든 저장 속성이 기본값으로 초기화된 경우이 경우, 상위 클래스의 모든 지정 생성자가 자동으로 상속된다하위 클래스에서 지정 생성자를 정의하거나 재정의하지 않으면, 자동 상속이 발생한다지정 생성자가 자동으로 상속된
필수 생성자 (Required Initializer) 는 클래스에서 반드시 구현해야 하는 생성자를 의미한다하위 클래스에서도 이 생성자를 반드시 구현하도록 강제할 때 사용된다클래스의 생성자 앞에 required 키워드를 붙여 선언한다required init() 또는 re
실패 가능 생성자는 인스턴스 생성에 실패할 수 있는 가능성을 가진 생성자를 의미한다인스턴스 생성이 실패할 경우, nil을 반환하여 생성이 실패했음을 나타낸다실패 가능 생성자는 클래스, 구조체, 열거형에서 모두 사용할 수 있다실패 가능 생성자는 init?() 또는 ini
소멸자는 클래스 인스턴스가 메모리에서 제거되기 직전에 실행되는 코드 블록을 의미한다소멸자를 정의하여 인스턴스가 사라지기 전에 필요한 정리 작업을 수행할 수 있다Swift는 자동 참조 카운팅(ARC)을 사용하여 메모리를 관리하기 때문에 대부분의 경우 소멸자를 사용하지 않
타입 캐스팅(Type Casting) 은 인스턴스의 타입을 확인하거나, 해당 인스턴스를 다른 타입으로 변환하는 방법이다Swift에서 타입 캐스팅은 클래스 상속 관계에서 주로 사용되며, 구조체나 열거형에서는 사용되지 않는다타입 캐스팅을 통해 인스턴스가 특정 클래스 타입인
확장은 기존의 타입(클래스, 구조체, 열거형, 프로토콜)에 새로운 기능을 추가하는 개념이다상속과는 다르게 기존 타입의 코드를 변경하지 않고, 새로운 기능을 추가하는 방식이다수직적인 개념으로 기존 타입을 상속받아 새로운 타입을 정의한다기존 타입의 속성과 메서드를 물려받아
확장을 사용하면 기존 타입에 새로운 기능을 추가할 수 있다특히 계산 속성(타입 계산 속성, 인스턴스 계산 속성)을 추가하여 값을 연산하여 반환할 수 있다String 타입에 새로운 타입 계산 속성 defaultGreeting을 추가하였다이 계산 속성은 항상 "Hello,
확장을 사용하여 기존 타입에 새로운 생성자를 추가할 수 있다구조체와 클래스에서 확장된 생성자를 정의하는 방식이 다르다구조체는 기본적으로 지정 생성자만 존재한다 (편의 생성자는 존재하지 않음)구조체는 상속과 관련이 없기 때문에 지정 생성자를 자유롭게 구현할 수 있다확장을
확장을 사용하여 기존 타입에 새로운 서브스크립트를 추가할 수 있다기존 타입의 동작을 변경하지 않고도 추가 기능을 제공할 수 있다extension Int: 기존 Int 타입을 확장하고 있다subscript(index: Int) ➡️ Int: 인덱스를 입력받아 특정 자리수
확장을 사용하여 기존 타입(클래스, 구조체, 열거형)에 새로운 중첩 타입(열거형, 구조체, 클래스 등) 을 추가할 수 있다기존 타입의 소스 코드를 수정하지 않고도 의미 있고 기능적인 구조를 제공할 수 있다중첩 타입의 사용은 코드의 가독성과 유지보수성을 향상시키는 데 도
프로토콜(Protocol)은 영어로 규약(Agreement) / 협약(Convention) 을 의미한다프로토콜은 특정 능력이나 기능을 정의하는 일종의 자격증 이라고 볼 수 있다프로토콜을 통해 구조체, 클래스, 열거형 등이 특정 기능을 반드시 구현하도록 강제할 수 있다프
MyProtocol은 요구 사항을 선언하는 역할을 한다실제로는 아무것도 구현하지 않지만, 채택하는 타입에서 요구사항을 반드시 구현해야 한다MyClass는 FamilyClass를 상속하면서 MyProtocol을 채택한다클래스 상속은 먼저 선언하고, 그 후에 프로토콜을 선
메서드의 요구사항 정의 프로토콜 메서드 요구사항 프로토콜은 메서드의 헤드 부분(입력 / 출력)의 형태만 요구사항으로 정의한다 mutating 키워드: 구조체와 열거형에서 속성을 변경할 수 있도록 허용하는 키워드 타입 메서드를 정의하려면 static 키워드를 사용한다 클래스에서 구현할 때는 static 또는 class로 구현할 수 있다'''''''''''''...
Swift에서 프로토콜은 타입(형식)으로 사용할 수 있다이는 프로토콜이 일급 객체(First Class Citizen) 이기 때문이다즉, 프로토콜은 클래스, 구조체, 열거형과 동일하게 타입으로 취급될 수 있다프로그래밍 언엉에서 일급 객체란 다음과 같은 조건을 모두 만족
Swift의 프로토콜은 다중 상속이 가능하다즉, 프로토콜이 다른 여러 프로토콜을 상속받아 요구 사항들을 모두 포함할 수 있다AdvancedDevice는 Device와 Adjustable을 상속받는다프로토콜 상속 시, 상속받은 모든 요구 사항들을 포함하게 된다SmartL
Swift에서는 프로토콜을 정의할 때, 선택적으로 구현할 수 있는 요구 사항을 선언할 수 있다이를 활용하면 객체가 필요할 때만 특정 기능을 구현하도록 할 수 있다Swift에서 어트리뷰트(Attribute) 는 컴파일러에게 특정 정보를 제공하는 키워드이다특정 선언이나 타
Swift의 프로토콜은 확장을 통해 기본 구현을 제공할 수 있다이 방식은 여러 타입에서 동일하게 구현해야 하는 기능을 프로토콜 확장으로 제공하여 코드 중복을 방지하고, 유지보수를 용이하게 만든다또한, Virtual Table과 Witness Table, 구조체의 메모리
프로토콜 지향 프로그래밍은 클래스 상속 대신 프로토콜과 프로토콜 확장(Extensions)을 이용하여 코드를 구조화하고 재사용성을 높이는 방법론이다Swift는 구조체와 열거형도 프로토콜을 채택할 수 있기 때문에, 값 타입을 적극 활용하는 스타일을 권장한다클래스 상속은
Swift의 프로토콜 확장은 모든 타입에 기본 구현을 제공할 수 있지만, 특정 조건을 만족하는 타입에만 적용되도록 제한할 수도 있다이 방식은 프로토콜을 확장하면서 특정 프로토콜을 추가로 채택한 타입에만 기본 구현을 제공할 때 유용하게 사용된다Swift에서는 where
Swift에서 메서드를 호출하는 방식(디스패치 방식) 은 크게 세 가지로 나뉜다Swift는 성능 최적화를 위해 상황에 따라 적절한 디스패치 방식을 자동으로 사용한다컴파일 타임에 메서드 호출이 결정된다메서드의 주소가 컴파일 시점에 결정되고, 런타임에 별도의 테이블을 탐색
Swift에서는 타입 내부에 다른 타입을 선언하는 것이 가능하다이러한 방식을 중첩 타입(Nested Types) 이라고 하며, 특정 타입 내에서만 사용되는 타입을 정의할 때 유용하다특정 타입과 밀접하게 관련된 타입을 내부에서 정의하여 범위를 명확히 할 수 있다타입 간의
Swift에서 self는 인스턴스를 참조하거나, 타입 내부의 특정 상황에서 타입 자체를 지칭할 때 사용된다클래스 또는 구조체의 인스턴스를 초기화하거나 프로퍼티에 접근할 때 self를 사용하여 인스턴스 자신을 참조한다구조체 또는 열거형에서 self를 사용하여 기존 인스턴
클로저는 이름이 없는 함수(익명 함수) 를 의미하며, 함수와 유사한 방식으로 사용된다 클로저는 변수, 상수에 할당하거나 다른 함수의 파라미터로 전달할 수 있다 클로저는 함수의 코드 블록을 간결하게 표현할 수 있다는 특징이 있다함수의 타입을 변수로 선언하는 방법을 알
# 클로저의 사용 클로저는 왜 사용하는가? 클로저는 함수처럼 동작하지만, 정의와 전달이 유연하다는 장점이 있다 주로 함수의 파라미터로 전달하거나 간단한 동작을 즉시 정의할 때 사용한다 함수의 흐름 중 특정 시점에 실행할 동작을 외부에서 주입할 수 있어 활용도가 높다
클로저는 함수처럼 동작하지만, 정의와 전달이 유연하다는 장점이 있다 주로 함수의 파라미터로 전달하거나 간단한 동작을 즉시 정의할 때 사용한다 함수의 흐름 중 특정 시점에 실행할 동작을 외부에서 주입할 수 있어 활용도가 높다 클로저는 대부분 일회성 작업이나 간단한
클로저는 외부 변수나 상수를 내부에서 사용할 수 있도록 캡처할 수 있다 클로저가 외부 변수에 대한 참조를 유지하기 때문에 실행 시점에도 해당 값을 사용할 수 있다 캡처된 값은 클로저가 메모리에 존재하는 동안 유지된다 클로저가 변수에 저장되거나 함수의 반환값으로 사
기본적으로 함수가 종료되면 파라미터로 전달된 클로저도 함께 메모리에서 해제된다하지만 클로저가 함수 종료 이후에도 실행되어야 할 경우, 클로저는 함수의 실행 스코프를 "탈출"해야 한다이럴 때 사용하는 키워드가 @escaping이다대표적으로 비동기 처리(GCD), 클로저
고차함수(Higher-order Function)는 함수를 인자로 받거나 함수를 반환하는 함수이다 Swift에서는 함수형 프로그래밍의 기본으로 map, filter, reduce 같은 고차함수를 자주 사용한다 배열, 딕셔너리, 세트 등 Sequence 또는 Coll