Swift, iOS Foundation
iOS 개발을 공부하기 위해 기초적으로 알아야하는 Swift 문법과 기본 Foundation 개념을 정리합니다.
-
예전 @IBInspectable @IBDesignable 글에서 Swift에서 사용하는 @ 키워드는 컴파일러에게 추가적인 속성이 부여되었음을 알리는 역할이라고 설명한 적이 있었다. 즉, 코드에 메타 데이터 (special attribute와 directive)를 추가하는 역할을 하는 키워드라고 생각하면 된다. 이번 글에서는 @키워드를 사용한 @discardableResult에 대해 설명해보고자 한다. 1. @descardableResult 기본 개념 descardable = 버릴 수 있는, result = 결과 즉, "결과를 버릴 수 있도록 하는 속성"을 추가로 부여한다는 키워드가 @descardableResult이다. 이 키워드가 함수에서 사용되는 키워드라는 점에서 볼 때, 함수에서 해당하는 결과는 "..
[Swift] @discardableResult란 무엇일까?예전 @IBInspectable @IBDesignable 글에서 Swift에서 사용하는 @ 키워드는 컴파일러에게 추가적인 속성이 부여되었음을 알리는 역할이라고 설명한 적이 있었다. 즉, 코드에 메타 데이터 (special attribute와 directive)를 추가하는 역할을 하는 키워드라고 생각하면 된다. 이번 글에서는 @키워드를 사용한 @discardableResult에 대해 설명해보고자 한다. 1. @descardableResult 기본 개념 descardable = 버릴 수 있는, result = 결과 즉, "결과를 버릴 수 있도록 하는 속성"을 추가로 부여한다는 키워드가 @descardableResult이다. 이 키워드가 함수에서 사용되는 키워드라는 점에서 볼 때, 함수에서 해당하는 결과는 "..
2024.04.18 -
1️⃣ 내가 이 글을 쓰게 된 이유 프로그래밍을 조금이라도 배워본 사람이라면, 반복문의 대표주자로 for-in문이 있다는 것은 당연히 알 것이라 생각한다. Swift에도 당연히 for문을 지원하기에 평소 for-in 코드를 사용한 반복을 많이 사용하곤 했었는데, 반복을 목적으로 짠 코드에서 forEach문 역시 동일한 기능을 제공한다는 것을 다른 협업 팀원들의 코드에서 많이 확인할 수 있었다. 이에 그동안 나도 무지성 따라 치기(?) 스킬로 forEach라는 코드를 사용했지만, 사실 for문과 어떤 점에서 차이가 있는지, 성능 차이는 존재하는지에 대한 고찰이 없었기에 항상 공부하고 싶었던 내용이었다. 여기에 덧붙여, 최근 진행하던 프로젝트에서 iOS 멘토님에게 받은 피드백 중 하나가 "for + appe..
[Swift] for-in문과 forEach 사이의 차이, 그리고 고차함수(map, filter, reduce)의 활용까지1️⃣ 내가 이 글을 쓰게 된 이유 프로그래밍을 조금이라도 배워본 사람이라면, 반복문의 대표주자로 for-in문이 있다는 것은 당연히 알 것이라 생각한다. Swift에도 당연히 for문을 지원하기에 평소 for-in 코드를 사용한 반복을 많이 사용하곤 했었는데, 반복을 목적으로 짠 코드에서 forEach문 역시 동일한 기능을 제공한다는 것을 다른 협업 팀원들의 코드에서 많이 확인할 수 있었다. 이에 그동안 나도 무지성 따라 치기(?) 스킬로 forEach라는 코드를 사용했지만, 사실 for문과 어떤 점에서 차이가 있는지, 성능 차이는 존재하는지에 대한 고찰이 없었기에 항상 공부하고 싶었던 내용이었다. 여기에 덧붙여, 최근 진행하던 프로젝트에서 iOS 멘토님에게 받은 피드백 중 하나가 "for + appe..
2024.03.11 -
오늘은 Swift에서 에러를 처리하는 방법, Error Handling에 대해 배워보도록 하겠다. 모든 프로그래밍 언어가 에러를 처리하는 방법을 가지고 있듯이, Swift도 마찬가지로 프로그램에서 발생한 에러 조건에 응답하고, 처리하는 프로세스를 갖고 있다. 공식문서 상에서는 이것을 "Swift는 런타임 에러를 던지고(throwing), 잡고(catching), 전파하고(propragating), 조작하는(manipulating) 방법을 모두 지원한다"라고 표현했다. 에러를 "던지고", "잡고", "전파"하고, "조작"한다는 말이 혹시 어렵지는 않은가...? (나만 그런가) 내가 공부를 했을 때, Swift 공식문서를 보고 공부하기에는 번역상으로 이해가 안 가는 말이 많아서 많은 어려움을 겪었는데, 이번..
[Swift] Swift는 에러를 어떻게 처리할까? (Error Handling)오늘은 Swift에서 에러를 처리하는 방법, Error Handling에 대해 배워보도록 하겠다. 모든 프로그래밍 언어가 에러를 처리하는 방법을 가지고 있듯이, Swift도 마찬가지로 프로그램에서 발생한 에러 조건에 응답하고, 처리하는 프로세스를 갖고 있다. 공식문서 상에서는 이것을 "Swift는 런타임 에러를 던지고(throwing), 잡고(catching), 전파하고(propragating), 조작하는(manipulating) 방법을 모두 지원한다"라고 표현했다. 에러를 "던지고", "잡고", "전파"하고, "조작"한다는 말이 혹시 어렵지는 않은가...? (나만 그런가) 내가 공부를 했을 때, Swift 공식문서를 보고 공부하기에는 번역상으로 이해가 안 가는 말이 많아서 많은 어려움을 겪었는데, 이번..
2024.02.13 -
1️⃣ Nib와 Xib 핵심 내용만 정리해보기 Nib와 Xib 두 개 모두 iOS 화면을 구성하기 위한 파일이다. Nib : Nextstep Interface Builder의 줄임말, 바이너리 파일 (데이터의 저장과 처리를 목적으로 0과 1의 이진 형식으로 인코딩된 파일, 사람은 읽지 못하고 컴퓨터만 읽을 수 있는 언어)이다. Xib : Xml Interface Builder의 줄임말, Xml 파일 (데이터들을 쉽게 구조화해서 전달하기 위해 만들어진 언어가 xml이고 이 xml로 쓰여진 파일이 xml 파일, 컴퓨터와 사람 모두 읽을 수 있는 언어)이다. 2️⃣ Nib와 Xib 핵심 내용에서 살을 더 붙여보자! ✔️ 새로운 Cocoa Touch Class 파일을 만들 때, "Also create XIB f..
[iOS] iOS 화면을 구성하는 파일, Nib와 Xib 개념 정리해보기1️⃣ Nib와 Xib 핵심 내용만 정리해보기 Nib와 Xib 두 개 모두 iOS 화면을 구성하기 위한 파일이다. Nib : Nextstep Interface Builder의 줄임말, 바이너리 파일 (데이터의 저장과 처리를 목적으로 0과 1의 이진 형식으로 인코딩된 파일, 사람은 읽지 못하고 컴퓨터만 읽을 수 있는 언어)이다. Xib : Xml Interface Builder의 줄임말, Xml 파일 (데이터들을 쉽게 구조화해서 전달하기 위해 만들어진 언어가 xml이고 이 xml로 쓰여진 파일이 xml 파일, 컴퓨터와 사람 모두 읽을 수 있는 언어)이다. 2️⃣ Nib와 Xib 핵심 내용에서 살을 더 붙여보자! ✔️ 새로운 Cocoa Touch Class 파일을 만들 때, "Also create XIB f..
2023.10.08 -
오늘 글에서는 Swift의 고차 함수(Higher-order function)에 대해서 배워보도록 하자. 고차 함수(Higher-order function)는 다른 함수를 전달인자(매개변수)로 받거나, 함수 실행의 결과를 함수로 반환하는 함수를 의미한다. 어 잠깐, 함수를 인자로 전달될 수 있고, 함수의 반환값이 될 수 있다는 말,,, 어디서 들어본 적이 있지 않는가....? 예전 내가 올린 글을 읽었으면 알겠지만, 이 부분은 클로저와 Swift의 일급객체(first-class object)라는 특성과 연관되어 있다! (오랜만에 아래 글을 참고해서 읽어볼까..?) [Swift] Closure 완전 정복하기: 일급 객체부터 작성법, 그리고 @escaping까지 1. 클로저(Closure)란? 솝트에서 서버..
[Swift] 고차함수 개념 완전 정복하기: map, filter, reduce오늘 글에서는 Swift의 고차 함수(Higher-order function)에 대해서 배워보도록 하자. 고차 함수(Higher-order function)는 다른 함수를 전달인자(매개변수)로 받거나, 함수 실행의 결과를 함수로 반환하는 함수를 의미한다. 어 잠깐, 함수를 인자로 전달될 수 있고, 함수의 반환값이 될 수 있다는 말,,, 어디서 들어본 적이 있지 않는가....? 예전 내가 올린 글을 읽었으면 알겠지만, 이 부분은 클로저와 Swift의 일급객체(first-class object)라는 특성과 연관되어 있다! (오랜만에 아래 글을 참고해서 읽어볼까..?) [Swift] Closure 완전 정복하기: 일급 객체부터 작성법, 그리고 @escaping까지 1. 클로저(Closure)란? 솝트에서 서버..
2022.01.24 -
이번 글에서는 구조체(Struct)와 클래스(Class)에 대해 아주 자세하게 다뤄보려 한다. 처음 Swift를 배우는 입장도 아닌데, 이제 와서 이 내용을 포스팅하는 이유가 뭐냐고 물어본다면... 음... 몇 번 반복에서 강조해도 아깝지 않을 만큼 정말 중요하기 때문이랄까.....? 본격적으로 들어가기 전에, 객체지향 프로그래밍에서의 중요한 4가지 특성을 먼저 간단하게 살펴보겠다. 왜냐고? 구조체와 클래스를 배우는 내용이 객체지향 프로그래밍에서의 중요한 특징에 많이 해당하기 때문이다. 얼만큼 해당하는지 한번 살펴볼까? 1️⃣ 추상화 : 객체의 공통적인 속성과 기능을 추출하여 정의하는 것 [오늘 배울 클래스, 구조체와 관련] 2️⃣ 캡슐화, 은닉화 : 목적에 따라 데이터 구조 및 처리 방법을 결합시키고,..
[Swift] 구조체(Struct)와 클래스(Class) 완전 정복하기: 기본 개념부터 프로퍼티, 인스턴스, 상속까지이번 글에서는 구조체(Struct)와 클래스(Class)에 대해 아주 자세하게 다뤄보려 한다. 처음 Swift를 배우는 입장도 아닌데, 이제 와서 이 내용을 포스팅하는 이유가 뭐냐고 물어본다면... 음... 몇 번 반복에서 강조해도 아깝지 않을 만큼 정말 중요하기 때문이랄까.....? 본격적으로 들어가기 전에, 객체지향 프로그래밍에서의 중요한 4가지 특성을 먼저 간단하게 살펴보겠다. 왜냐고? 구조체와 클래스를 배우는 내용이 객체지향 프로그래밍에서의 중요한 특징에 많이 해당하기 때문이다. 얼만큼 해당하는지 한번 살펴볼까? 1️⃣ 추상화 : 객체의 공통적인 속성과 기능을 추출하여 정의하는 것 [오늘 배울 클래스, 구조체와 관련] 2️⃣ 캡슐화, 은닉화 : 목적에 따라 데이터 구조 및 처리 방법을 결합시키고,..
2022.01.22 -
이번 글은 iOS 개발을 하면서 아주 유용하게 쓸 수 있는 꿀팁을 하나 가져왔다. 나도 코드 리뷰에서 알게 된 내용인데, 성격이 같은 넘버링으로 되어있는 Outlet 변수들을 묶어서 사용하는 방법이 있다고 한다. 그것이 바로 IBOutlet Collection이라는 것을 활용하는 방법인데, 바로 어떻게 사용하는지 확인하러 가보자 ^__^ iOS 개발을 하면서, 특별한 이유 없이, first.. second.. third... 이런 순서대로 나열되어 있는 것들을 만들어본 적이 있지 않은가..? @IBOutlet weak var firstTmiLabel: UILabel! @IBOutlet weak var secondTmiLabel: UILabel! @IBOutlet weak var thirdTmiLabel:..
[Swift] IBOutlet Collection이란 무엇일까?이번 글은 iOS 개발을 하면서 아주 유용하게 쓸 수 있는 꿀팁을 하나 가져왔다. 나도 코드 리뷰에서 알게 된 내용인데, 성격이 같은 넘버링으로 되어있는 Outlet 변수들을 묶어서 사용하는 방법이 있다고 한다. 그것이 바로 IBOutlet Collection이라는 것을 활용하는 방법인데, 바로 어떻게 사용하는지 확인하러 가보자 ^__^ iOS 개발을 하면서, 특별한 이유 없이, first.. second.. third... 이런 순서대로 나열되어 있는 것들을 만들어본 적이 있지 않은가..? @IBOutlet weak var firstTmiLabel: UILabel! @IBOutlet weak var secondTmiLabel: UILabel! @IBOutlet weak var thirdTmiLabel:..
2022.01.09 -
Xcode에서 커스텀 뷰를 만들어 사용할 때, 신기하기도 하고 꿀팁이기도 한 속성에 대해서 오늘은 다뤄보려 한다. @IBInspectable, @IBDesignable이라는 속성인데, 이 친구들을 사용하면 "스토리보드에서 실시간으로 랜더링을 하는 것이 가능"하게 된다. 이것이 무슨 말인지는 글을 읽어보며, 하나씩 이해해보자. 1️⃣ 뜻부터 하나씩 알아보자 우선, Swift에서 @는 코드 자체의 특성을 가리킬 때 사용하는 키워드이다. 컴파일러에게 어떤 속성이 부여되었음을 알리는 역할이라고 생각하면 된다. IB는 Interface Builder의 줄임말이다. Xcode에서는 스토리보드를 가리킨다고 이해하면 된다. 즉, 우리가 흔히 사용했던 @IBAction func 키워드는 컴파일러에게 인터페이스 빌더와 A..
[Swift] @IBInspectable, @IBDesignable을 사용해보자Xcode에서 커스텀 뷰를 만들어 사용할 때, 신기하기도 하고 꿀팁이기도 한 속성에 대해서 오늘은 다뤄보려 한다. @IBInspectable, @IBDesignable이라는 속성인데, 이 친구들을 사용하면 "스토리보드에서 실시간으로 랜더링을 하는 것이 가능"하게 된다. 이것이 무슨 말인지는 글을 읽어보며, 하나씩 이해해보자. 1️⃣ 뜻부터 하나씩 알아보자 우선, Swift에서 @는 코드 자체의 특성을 가리킬 때 사용하는 키워드이다. 컴파일러에게 어떤 속성이 부여되었음을 알리는 역할이라고 생각하면 된다. IB는 Interface Builder의 줄임말이다. Xcode에서는 스토리보드를 가리킨다고 이해하면 된다. 즉, 우리가 흔히 사용했던 @IBAction func 키워드는 컴파일러에게 인터페이스 빌더와 A..
2021.12.20 -
iOS에서는 ViewController 간 데이터를 전달하는 방식을 크게 2가지로 나눌 수 있다. 데이터를 직접 전달하는 직접 전달(동기) 방식과, 데이터를 저장하고 필요할 때 꺼내오는 방식인 간접 전달(비동기) 방식으로 나누어진다. 오늘은 이 두 방식 중에서, 필요할 때 값을 꺼내올 수 있도록 쓸 수 있는 비동기 방식 중, UserDefaults라는 것을 사용하는 방법에 대해 공부를 해보려고 한다. UserDefaults란 iOS 프로젝트 내에 있는 데이터 저장소라고 이해하면 된다. 기본 프로젝트 폴더를 보면 info.plist라는 파일이 있는 것을 확인할 수 있는데, UserDefaults도 plist처럼 Key-Value 형태로 값을 저장하고 꺼내올 수 있는 것이 특징이다. UserDefaults ..
[Foundation] UserDefaults를 사용해서 데이터를 전달하는 방법iOS에서는 ViewController 간 데이터를 전달하는 방식을 크게 2가지로 나눌 수 있다. 데이터를 직접 전달하는 직접 전달(동기) 방식과, 데이터를 저장하고 필요할 때 꺼내오는 방식인 간접 전달(비동기) 방식으로 나누어진다. 오늘은 이 두 방식 중에서, 필요할 때 값을 꺼내올 수 있도록 쓸 수 있는 비동기 방식 중, UserDefaults라는 것을 사용하는 방법에 대해 공부를 해보려고 한다. UserDefaults란 iOS 프로젝트 내에 있는 데이터 저장소라고 이해하면 된다. 기본 프로젝트 폴더를 보면 info.plist라는 파일이 있는 것을 확인할 수 있는데, UserDefaults도 plist처럼 Key-Value 형태로 값을 저장하고 꺼내올 수 있는 것이 특징이다. UserDefaults ..
2021.12.17 -
💡 접근 제어(Access Control)란? 특정 코드에 다른 파일과 모듈이 접근할 수 있는 범위를 제한하는 것이다. 클래스, 구조체, 열거형, 프로퍼티, 메서드 등 전혀 상관없이 코드 모든 곳에 적용할 수 있고, Swift에서는 총 5가지 접근 수준(Access Level)에 따른 각각의 키워드를 사용해서 적용을 하게 된다. ✔️ 객체지향 프로그래밍에서의 캡슐화(Encapsulation), 은닉화(Hiding) 개념이 적용되었다고 보면 된다. 💡 접근 제어가 왜 필요한데? 세부적인 코드의 구현 내용을 접근 제한해서 큰 틀에서 재사용할 수 있을 만큼만 공개를 하기 위해서이다. 또한, 불필요한 접근이 발생해 예상치 못한 결과를 초래하는 경우를 막거나, 공유하고 싶지 않은 내용을 가리기 위해서 사용한다. ..
[Swift] 함수 앞에 private가 붙어 있던 이유, 접근 제어(Access Control)💡 접근 제어(Access Control)란? 특정 코드에 다른 파일과 모듈이 접근할 수 있는 범위를 제한하는 것이다. 클래스, 구조체, 열거형, 프로퍼티, 메서드 등 전혀 상관없이 코드 모든 곳에 적용할 수 있고, Swift에서는 총 5가지 접근 수준(Access Level)에 따른 각각의 키워드를 사용해서 적용을 하게 된다. ✔️ 객체지향 프로그래밍에서의 캡슐화(Encapsulation), 은닉화(Hiding) 개념이 적용되었다고 보면 된다. 💡 접근 제어가 왜 필요한데? 세부적인 코드의 구현 내용을 접근 제한해서 큰 틀에서 재사용할 수 있을 만큼만 공개를 하기 위해서이다. 또한, 불필요한 접근이 발생해 예상치 못한 결과를 초래하는 경우를 막거나, 공유하고 싶지 않은 내용을 가리기 위해서 사용한다. ..
2021.11.08 -
오늘 다룰 내용은 iOS 개발을 하다가 누구나 쉽게 마주칠 수 있는 is, as, as?, as!이다. 이런 표현을 통틀어서 Swift에서는 "타입 캐스팅(Type Casting)"이라 부르는데, Swift에서 타입 캐스팅은 '해당 인스턴스의 타입이 무엇인지?' 혹은 '해당 인스턴스를 부모 타입 혹은 자식 타입처럼 사용할 수 있는지?'를 처리하기 위해 사용된다. 여기서 결론부터 말하자면, 전자의 내용은 is로, 후자는 as를 사용해 표현하게 될 것이다. 자세한 내용은 아래 글을 따라 계속 읽어보자. 1. is : 해당 인스턴스가 우측의 타입에 해당하는지? 다시 언급하자면, is는 해당 인스턴스의 타입이 무엇인지 즉, "너는 정말 이 타입에 해당하니?"에 대한 대답을 얻고자 할 때 사용된다. (인스턴스) ..
[Swift] 타입캐스팅(Type Casting) 완전 정복하기: is? as as? as! 키워드 내용 정리오늘 다룰 내용은 iOS 개발을 하다가 누구나 쉽게 마주칠 수 있는 is, as, as?, as!이다. 이런 표현을 통틀어서 Swift에서는 "타입 캐스팅(Type Casting)"이라 부르는데, Swift에서 타입 캐스팅은 '해당 인스턴스의 타입이 무엇인지?' 혹은 '해당 인스턴스를 부모 타입 혹은 자식 타입처럼 사용할 수 있는지?'를 처리하기 위해 사용된다. 여기서 결론부터 말하자면, 전자의 내용은 is로, 후자는 as를 사용해 표현하게 될 것이다. 자세한 내용은 아래 글을 따라 계속 읽어보자. 1. is : 해당 인스턴스가 우측의 타입에 해당하는지? 다시 언급하자면, is는 해당 인스턴스의 타입이 무엇인지 즉, "너는 정말 이 타입에 해당하니?"에 대한 대답을 얻고자 할 때 사용된다. (인스턴스) ..
2021.11.06 -
옵셔널(Optional)은 Swift의 언어적 특징을 가장 잘 나타내 주는 부분이다. 애플의 Swift는 안전성을 굉장히 중시하는 언어로 프로그래머가 행할 수 있는 실수를 문법 차원에서 미연에 방지할 수 있도록 되어 있는데, 그 일환으로 옵셔널(Optional)이라는 문법, guard구문, 오류처리, 강력한 타입 통제 같이 강력한 통제 수단을 활용해서 프로그래머가 코드를 작성하도록 Swift는 유도하고 있다. 오늘은 이 중에서 가장 많이 쓰린다고 볼 수 있는 옵셔널(Optional)에 대해서 알아보려 한다. Apple Developer Documentation developer.apple.com 1️⃣ 옵셔널(Optional)은? 옵셔널(Optional)은 "값이 있을 수도 있고 없을 수도 있는 경우"를..
[Swift] 옵셔널(Optional) 완전 정복하기: 개념부터 옵셔널 바인딩까지옵셔널(Optional)은 Swift의 언어적 특징을 가장 잘 나타내 주는 부분이다. 애플의 Swift는 안전성을 굉장히 중시하는 언어로 프로그래머가 행할 수 있는 실수를 문법 차원에서 미연에 방지할 수 있도록 되어 있는데, 그 일환으로 옵셔널(Optional)이라는 문법, guard구문, 오류처리, 강력한 타입 통제 같이 강력한 통제 수단을 활용해서 프로그래머가 코드를 작성하도록 Swift는 유도하고 있다. 오늘은 이 중에서 가장 많이 쓰린다고 볼 수 있는 옵셔널(Optional)에 대해서 알아보려 한다. Apple Developer Documentation developer.apple.com 1️⃣ 옵셔널(Optional)은? 옵셔널(Optional)은 "값이 있을 수도 있고 없을 수도 있는 경우"를..
2021.08.24