스위프트(Swift)는 "Objective-C" 언어를 대체할 애플의 차세대 언어로 애플에서 iOS 또는 macOS의 앱 또는 프로그램을 개발할 때 사용하는 프로그래밍 언어입니다. 2014년 6월 2일 WWDC(애플 세계 개발자 회의)에서 처음 소개되었으며 그해 9월에
기본적으로 변수(var)와 상수(let)는 프로그램에서 사용될 데이터를 저장하는 공간이다. 저장된 데이터는 메모리 공간에 저장한다.Swift에서 변수를 사용할 때는 "var" 키워드를 사용한다.변수에 할당된 값은 변경이 가능하다.Swift에서 변수를 사용할때는 "let
컴퓨터에게 특정 데이터의 형태를 알려주기 위해 사용하는 일종의 표현 방법이다.자료형의 크기: 8바이트정수(소수점이 없는 수)를 저장하는 데 사용양수, 음수, 0 값을 저장할 수 있다.Double 자료형의 크기: 8바이트Float 자료형의 크기: 4바이트소수점이 있는 숫
조건식의 결과(true, false)에 따라 실행할 코드를 결정해주는 역할을 한다.참(true)이면 코드를 실행하고, 거짓(false)이면 코드를 건너뛴다.조건식이 거짓(false)일 경우에도 수행될 코드 추가다양한 조건을 바탕으로 결정해야 할 때 다중 else if
프로그램에서 특정 명령을 반복하여 수행하도록 제어하는 명령문입니다.for문의 기본 구조는 아래와 같다.와일드 카드 패턴(\_)을 사용하여 상수를 생략할 수 있다.범위 대신 컬렉션 타입(배열 등), 문자열, 함수 등이 들어갈 수 있다.for-in 문은 몇 번 정도 반복해
프로그래머 마음대로 여러 값을 하나의 개체에 일시적으로 묶어 만든 타입이다.튜플에 저장되는 항목들은 어떠한 타입도 될 수 있으며, 저장된 값들이 모두 동일한 타입이어야 한다는 제약도 없다.Swift에서 함수는 return 값의 데이터 타입이 1개이다. 그 때문에 여러
Swift에서 값이 없음(실제 값이 없는 것은 아님)을 나타내기 위해 사용한 방법이 Optional이다.nil(값없음)이 발생할 가능성이 있는 값을 임시타입(Optional)으로 감싸 사용하는 개념이다.Swift는 안전성을 중요시하는 언어이다. 값이 없는 상황 때문에
컬렉션(Collection) 타입은 말 그대로 데이터의 집합 타입을 의미합니다. 같은 타입의 데이터를 하나로 묶어 사용하기 때문에 여러 이유들이 존재하겠지만 같은 타입의 데이터들을 묶어서 사용하면 우리가 변수와 상수를 선언해서 사용하듯 하나 하나의 데이터들을 굳이 따
배열(Array)은 Swift뿐만 아니라 모든 프로그래밍 언어를 통틀어서 가장 많이 사용하는 컬렉션(Collection) 타입입니다.배열은 순서가 있는 컬렉션 타입이기 때문에 값의 중복을 허용합니다. 또한 같은 배열에는 동일한 데이터 타입만 할당할 수 있습니다. (An
딕셔너리(Dictionary)는 키값(key)과 벨류값(value)을 쌍으로 갖는 컬렉션 타입입니다.딕셔너리 내부의 키값은 고유한(유일한) 값을 가져야 하지만, 벨류값은 중복을 허용하고 있습니다.딕셔너리는 고유한 키값을 가지고 있기 때문에 순서를 고려하지 않습니다.딕셔
수학에서 사용하는 집합과 동일한 기능(교집합, 차집합 등...)을 제공하는 컬렉션 타입입니다. 세트(Set)는 데이터의 순서를 고려하지 않으며, 데이터는 중복을 허용하지 않습니다.(세트안에 중복 값이 있으면 1개의 값으로 취급)세트안에 들어가는 데이터는 Hashable
관련 있는 데이터 하나의 이름으로 구성하여 사용하는 데이터 타입이다.열거형(enum)은 입력값이 한정적일 때, 특정 값 중 하나만 선택할 때 주로 사용된다. 이러한 권고? 사항이 있음에도 불구하고 열거형을 사용하는 이유는 여러 가지 있지만, 가장 큰 이유는 "원치 않는
사실 Optional은 연관 값(associated value)을 갖는 enum이다...!?!?!😮Optional은 Swift에서 내부적으로 아래와 같이 정의되고 있다.Optional은 Swift에서 기본적으로 enum으로 구현되어 있기 때문에 아래와 같은 코드가 가
Swift에서 사용자가 정의하여 사용할 수 있는 커스텀 타입(Custom Type)은 크게 클래스(class), 구조체(struct), 열거형(enum) 이 있습니다.그중에서 클래스(class)와 구조체(struct)는 사용하는 방법, 코드 작성법 등이 비슷합니다.클래
속성(property)은 클래스(class)또는 구조체(struct)안에서 사용된 변수(var)와 상수(let)를 의미한다.Swift에서 사용되는 속성(property)은 크게 5개가 존재하며, 사용 목적과 용도에 따라 다르게 사용되고 있다. (클래스와 구조체에서 사용
메서드(method)는 클래스(class), 구조체(struct), 열거형(enum)의 코드 안에서 정의된 함수(func)를 의미합니다.클래스와 구조체에서 메서드는 속성(Property)과 다르게 사용하는 방법과 특징 그리고 종류가 조금 다르다. (클래스와 구조체는 메
배열, 딕셔너리, 열거형 등에서 이러한 대괄호를 사용하여 원하는 결과값을 얻을 수 있었는데, 이러한 대괄호가 서브스크립트(Subscripts)이다. 즉, 클래스, 구조체, 열거형이 컬렉션 멤버에 접근하기 위한 문법이다.많이 사용하는 서브스크립트(배열, 딕셔너리, 열
객체지향 언어의 대표적인 특징 중 하나인 상속(Inheritance)은 코드의 재사용과 확장성을 높여준다는 특징을 가지고 있습니다.Swift는 객체지향 언어의 한 종류이기 때문에 이러한 상속의 특징을 가지고 있으며, 유일하게 클래스(class)만이 상속을 사용할 수 있
Swift에서 재정의(override)는 상위 클래스의 프로퍼티 또는 메서드를 가져와서 수정하는 것을 의미합니다.프로퍼티의 경우에는 상위 클래스의 저장 속성(Stored Properties)을 수정할 수 없지만, 계산 속성(Computed Properties)의 경우에
초기화(Initialization)는 Custom Type(클래스, 구조체, 열거형)으로부터 만들어진 인스턴스를 만드는 과정을 의미합니다.클래스 또는 구조체로부터 인스턴스를 생성하려면 모든 프로퍼티에 기본값을 설정하거나, 옵셔널 타입으로 선언하여 nil값으로 설정하거나
타입 캐스팅(Type Casting)은 인스턴스의 타입을 확인해주는 기능과, 클래스의 인스턴스를 상위 클래스 타입으로 또는 하위 클래스 타입으로 취급해주는 기능을 가지고 있습니다.인스턴스가 가지고 있는 프로퍼티가 클래스의 프로퍼티를 포괄하면 true 반환/그렇지 않으면
다형성(Polymorphism)은 하나의 객체(인스턴스)에 여러 가지 타입을 대입하여 표현할 수 있다는 것을 의미합니다.프로퍼티는 힙(heap)영역에 저장된 값을 접근하지만, 메서드의 경우에는 데이터(data)영역에 저장된 코드(code) 주소를 사용하여 함수를 접근(
Swift에서 Any는 모든 데이터 타입(클래스, 구조체, 옵셔널 등등)을 표현할 수 있는 최상위 개념의 타입입니다.다른 타입에 비해 자료형의 크기가 크다는 단점이 있습니다. (32바이트)Any 타입으로 저장된 데이터는 정확하게 어떤 메모리 구조로 이루어졌는지 알 수
확장(Extension)이란 클래스, 구조체, 열거형 또는 프로토콜로 정의된 타입에 새로운 기능의 메서드를 추가하여 타입의 기능을 확장하는 문법입니다.Swift에서 확장은 메서드(함수)형태만 가능합니다. (저장 속성 X)확장으로 추가된 메서드는 상속이 가능하지만, 재정
프로토콜(Protocol) 프로토콜(Protocol)은 특정한 역할만을 수행가기 위한 메서드(함수), 프로퍼티(변수) 프로토콜(Protocol) 은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다. 구조체, 클래스, 열거형은 프로
프로토콜에서 정의 가능한 메서드의 종류와 형태는 다양합니다. (인스턴스 메서드, 생성자, 서브스크립트 등... / 파라미터의 유무, 리턴형의 유무 등...)메서드의 종류와 형태에 따라 프로토콜에서 정의하는 방법이 다르며, 채택(Adopt)후 사용하는 방법과 기능이 조금
일단 "1급 객체"와 "1급 시민"은 같은 뜻이다. (일반적으로 "1급 객체" 라고 부름)1급 객체는 아래 3가지 조건을 충족하는 변수에 저장할 수 있다.매개변수로 전달할 수 있다.리턴값으로 사용할 수 있다.
Swift에서 프로토콜은 다른 프로토콜을 상속할 수 있습니다.프로토콜은 다중 상속을 허용하고 있습니다.AnyObject는 프로토콜로 만들어진 타입이기 때문에 프로토콜 상속이 가능합니다.AnyObject를 상속받은 프로토콜을 채택하여 사용할 때는 AnyObject의 요구
어트리뷰트(Attributes)는 추가적인 정보를 제공하는 키워드입니다.어트리뷰트 키워드 앞에 "@"을 붙여 사용하는 것이 특징입니다.주로 선언(정의)부 위 또는 앞에 어트리뷰트 키워드를 작성합니다.타입 부분 앞에 어트리뷰트 키워드를 작성합니다.@discardableR
일반적으로 프로토콜을 채택하면 해당 프로토콜의 모든 기능을 구현해야 합니다.하지만 프로토콜에 정의된 기능을 모두 구현하기 싫을때는 어떡해야 할까??"@objc"어트리뷰트(Attributes)와 "optional" 키워드를 사용하면 선택적으로 기능을 구현할 수 있습니다.
Swift에서 프로토콜의 확장은 새로운 기능을 추가하는 것 뿐만 아니라, 코드의 중복을 줄일 수도 있습니다.일반적으로 프로토콜을 채택한 커스텀 타입(클래스, 구조체, 열거형)은 프로토콜의 모든 요구사항을 충족하여 사용해야 합니다.같은 프로토콜을 채택하여 사용하는 커스텀
소문자로 시작하는 self는 "모든 인스턴스들이 암시적으로 생성하는 프로퍼티"입니다. 특정 코드 내부 및 외부에서 모두 사용할 수 있으며, 자기 자신(인스턴스)을 가리키는 목적으로 주로 사용됩니다.대문자로 시작하는 Self는 특정 타입의 코드 안에서 사용되며, 해당 코
클로저(Closures) 클로저(Closures)는 이름이 없는 함수(익명 함수)입니다. 클로저는 특정 기능이 있는 코드들을 하나의 독립적인 코드 블록으로 묶어 사용할 수 있습니다. (함수와 동일) 클로저는 상황에 따라 축약 표현이 가능합니다. > #### ✅ 함
클로저를 파라미터로 사용하는 함수의 실행이 종료되면 해당 클로저는 제거됩니다.함수의 실행이 종료되더라도 클로저를 계속 사용하고 싶으면, "@escaping" 키워드를 사용하여 함수에서 클로저를 탈출시켜야 합니다.즉, "@escaping" 키워드를 사용하여 함수 내부에
"@autoclosure" 키워드는 함수의 파라미터가 클로저 1개일 때만 사용할 수 있습니다."@autoclosure" 키워드 사용 시 중괄호{ } 작성 없이 간결하게 표현할 수 있습니다."@autoclosure" 키워드를 무분별하게 사용할 경우, 코드의 가독성이 떨어
리턴값(return value)이 있는 함수(메서드)에서 리턴값을 사용하지 않을 때 컴파일러가 노란색 경고창을 보여줍니다.함수 위에 "@discardableResult" 키워드를 작성하면, 리턴값을 사용하지 않더라도 컴파일러가 경고창을 보여주지 않습니다.
함수를 파라미터로 사용하거나, 함수의 실행 결과를 함수로 return 하는 함수를 고차 함수(Higher-order function)라고 부릅니다.고차 함수는 스퀀스(Sequence), 컬랙션(Collection) 프로토콜을 따르는 컬렉션(배열, 딕셔너리, 세트 등)에
옵셔널을 반복적(연쇄적)으로 사용하는 방법의 문법을 "옵셔널 체이닝"이라고 부릅니다.옵셔널 타입에 대하여 접근 연산자를 호출하는 방법입니다. => 객체(멤버)?.멤버옵셔널 체이닝의 마지막 결괏값은 항상 옵셔널 타입입니다.옵셔널 체이닝의 중간값이 nil일 경우, 결괏
Swift에서 데이터는 크게 "값 타입"과 "참조 타입"으로 나뉘게 됩니다.값 타입(Value Type)기본 타입(Int, String...), 구조체, 열거형, 컬렉션 등...참조 타입(Reference Type)클래스, 클로저값 타입(Value Type)의 경우에는
메모리 누수(Memory Leak) 현상은 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다.이처럼 메모리 누수 현상이 지속되면 메모리(Heap) 공간이 꽉 차게 되어 프로그램이 다운되는 현상이 발생할 수도 있습니다.Swift에서는 메모리(Heap
✋ 참조 타입(Reference Type)인 클로저(Closures)는 메모리의 힙(Heap) 영역에 저장됩니다.클로저 외부에 정의된 변수(상수)를 클로저가 참조하여 지속적으로 사용할 때 해당 변수의 값을 클로저의 힙(Heap) 영역에 저장하게 되며, 이러한 현상을 캡
참조 타입(Reference Type)의 캡처와 캡처 리스트는 값 타입(Value Type)과 형태적으로 비슷(구현 방법 동일)하지만, 내부 동작 및 결과에 차이점이 있습니다.클래스로부터 만들어진 인스턴스의 속성값 주소를 클로저가 참조할 때 속성값의 주소가 할당된 변수
Swift에서 에러는 크게 두 가지로 나뉩니다.컴파일 에러는 개발자가 코드를 잘못 작성하여 발생하는 에러입니다.컴파일 에러가 발생시 컴파일러가 에러 메시지를 개발자에게 보여주기 때문에 비교적 쉽게 문제점을 해결할 수 있습니다.코드의 문법적인 문제 없지만, 코드 실행시
defer{ }문은 할 일을 미루는 코드 블록입니다.defer{ }문 안의 코드는 스코프(범위)가 종료되는 시점에 작동됩니다.일반적으로 defer{ }문은 어떠한 코드의 동작을 마무리하기 위해 사용합니다.defer{ }문은 최소 한 번의 접근(호출)이 있어야 해당 구문
제네릭(Generics) 문법은 하나의 코드 블럭(함수, 클래스, 구조체 등)에서 다양한 타입의 데이터에 대응할 수 있도록 해주는 문법입니다.즉, 한 번의 구현으로 모든 타입의 데이터에 대응할 수 있도록 하는 문법입니다.함수의 기능은 동일하지만, 데이터 타입 때문에 동
함수와 커스텀 타입(구조체, 클래스, 열거형)에서 제네릭을 구현하는 방법은 비슷했지만, 프로토콜에서 제네릭을 구현하는 방법은 조금 다릅니다.프로토콜의 제네릭 타입 구현은 프로토콜 내부에 "associatedtype" 키워드를 사용하여 타입 파라미터 "T"를 선언해야 합
Result Type은 Swift5 이후에 나온 기능입니다.Swift5 이전에 사용하던 에러 처리(Error Handling)의 단점과 불편한 점을 보안하고자 나왔으며, 코드의 간결화 및 가독성 향상 등의 장점을 가지고 있습니다.어떤 경우의 에러가 발생할지 미리 정의해
벨로그 폰트 색상 해당 변수의 값 자체를 클로저의 힙(Heap) 영역에 저장형광펜 폰트 사이즈🤔 접근 제어를 왜 사용할까??접근 제어(Access Controls), 접근 수정자(Access Modifiers), 접근 지정자(Access Specifie
Unicode는 "Universal Coded Character Set"의 축약 단어이며, 전 세계의 모든 문자를 다루도록 설계된 부호체계입니다.영문자는 아스키(ASCII)코드의 번호 체계를 유지하고 있습니다.유니코드의 인코딩 방법은 총 8, 16, 32 Bits 3가
Swift에서 문자열 사이에 변수(상수), 리터럴값 등을 표현하기 위해서 문자열 보간법(String Interpolation)을 사용했었습니다.문자열(" ")안에 "\\(변수 등)"을 대입하여 사용하는 방식입니다.문자열 보간법 \\(변수 등)은 미리 정해놓은 문자열(S
단순 숫자을 문자열로 반환하는 방법은 매우 간단합니다. (문자열 보간법(String Interpolation) \\()을 사용하면 간단하게 문자열로 반환 가능) 하지만 원주율(π)같은 무한소수 또는 소숫자리가 긴 숫자를 문자열로 반환해야 하는 경우에는 반올림과 같은 특
기존 문자열에 prefix() 등과 같은 문자열 메서드를 사용하여 만들어진 반환 값은 문자열(String) 타입이 아닌 서브 스트링(Substring)으로 만들어집니다.기존 문자열로부터 만들어진 서브 스트링은 새로운 메모리공간을 생성하여 할당하는 방식이 아닌, 기존 문
특정 문자들을 조합하여 만들어진 문자열(String)은 배열(Array)과 같은 데이터 바구니의 개념을 내포하고 있습니다.이러한 데이터 바구니의 개념적 특징 덕분에 문자열을 배열로 또는 배열을 문자열로 쉽게 변환할 수 있습니다.고차함수를 사용하여 문자열을 배열로 변환할
배열의 인덱스(Array Index)와 문자열의 인덱스(String Index)의 사용법은 서로 다릅니다.배열의 경우에는 정수(Int)형 인덱스 번호를 사용하여 원하는 값을 반환 받지만, 문자열의 경우에는 정수형 인덱스 번호를 사용할 수 없습니다.문자열의 경우에는 문자
특정 문자들을 조합하여 만들어진 문자열(String)은 배열(Array)과 같은 데이터 바구니의 개념을 내포하고 있으므로 배열에서 사용하는 삽입(insert), 교체(replace), 추가(append), 삭제(remove) 기능을 사용할 수 있습니다.
비교 연산자를 사용하여 문자열을 간단하게 비교를 할 수 있습니다.비교 연산자를 사용할 때는 각 문자열의 첫 번째 문자의 유니코드 값을 비교하여 논리값을 반환합니다.문자열을 간단하게 비교하여 논리값을 반환 받고 싶을 때는 비교연산자를 사용합니다.하지만 문자열의 대소문자
Swift에서는 문자열의 접두어(문자의 앞부분)와 접미어(문자의 뒷부분)를 추출해주는 메서드가 존재합니다..prefix(문자열의 길이).suffix(문자열의 길이).commonPrefix(with: 비교할 접두어)dropFirst(삭제할 문자열의 길이)dropLast(
특정한 규칙 또는 형식, 형태를 가지고 있는 문자열을 정규식/정규표현식(Regular Expression)이라고 부릅니다.(정규식의 대표적인 예로는 아래와 같습니다.)전화번호 : "010-1234-5678"이메일 : "abcd@naver.com"우편번호 : "04524
PC 또는 모바일 환경에서 문자열을 입력할 때 원치 않는 문자 또는 문자열이 포함되어 에러가 발생하는 경우가 존재합니다.다행히 Swift에서는 원치 않는 문자 또는 문자열이 들어와도 이를 제거해주는 문자열 메서드 및 방법이 존재합니다.문자열.trimmingCharact
Swift에서 논리 평가식(&&, ||)을 계산할 때는 단락 평가(Short-circuit Evaluation) 방식을 사용합니다.(단락 평가는 논리 평가식에서 결과 도출을 위해 최소한의 논리식만을 평가하는 방식입니다.)false &&의 경우 && 뒤에 어떠한 논리값이
코드를 작성하면서 자주사용했던 연산자(+, -, \* 등)들은 사실 메서드로 이루워져 있습니다.대표적인 예로 문자열의 덧샘을 확인해보면 알수 있습니다.
Swift에서는 기본적으로 제공해주는 연산자가 아닌 사용자가 직접 연산자를 정의하여 사용할 수 있습니다.기존에 없던 새로운 연산자를 사용할 때는 새로 만든 연산자를 선언해야 합니다.중위 연산자의 경우에는 새로 구현하는 연산자의 우선순위를 지정할 수 있습니다. (지정하지
Swift에서 Equatable 프로토콜은 동일성 비교 연산(==, !=)을 하기 위해 만들어진 프로토콜입니다.Equatable 프로토콜의 요구사항 코드는 아래와 같습니다.Swift에서 기본적으로 제공해주는 기본타입(Int, String, Double 등)은 Equat
Swift에서 Comparable 프로토콜은 크기 비교 연산(<, >, <=, >=)을 하기 위해 만들어진 프로토콜입니다.일반적으로 Comparable 프로토콜은 "<" 연산자만 구현하면 나머지 크기 비교 연산자(>, <=, >=)는 자동으로 구현
Hash: 어떠한 데이터를 고정된 길이와 유일한 값으로 반환 및 매핑해주는 함수, 코드, 체크섬 등을 의미합니다.HashValue: Hash에 의해 도출되는 값을 의미합니다.Hashable: 값의 고정된 길이와 유일성을 보장해주는 프로토콜입니다.Swift에서 Hasha
CaseIterable 프로토콜은 열거형에서 많이 사용되는 프로토콜입니다.CaseIterable 프로토콜을 채택한 열거형은 타입 속성allCases을 사용하여 열거형의 케이스를 배열로 반환할 수 있습니다.열거형의 모든 케이스를 배열로 반환할 경우 다양한 기능을 사용할
키패스(keyPath)는 인스턴스가 속성에 보다 편하게 접근할 수 있도록 미리 경로를 만들어 주는 기능이 있습니다.
셀렉터(selector)는 메서드의 주소를 통해 특정 메서드를 가리키는 개념입니다. (셀렉터는 메서드를 가리키기만 할 뿐, 메서드를 실행하는 것이 아닙니다.)셀렉터(selector)의 경우에는 Objective-C 언어의 문법이기 때문에 가리키고 싶은 함수 앞에 @ob