스위프트(Swift) 가이드
애플이 WWDC2014에서 기습적으로 스위프트(Swift)를 발표해 버린 이후, 똥 밟은걸 털어낸다는 심경으로 스위프트를 공부해 보는 겸 블로그에 글을 써 왔다. 이 글은 지금까지 써 온 블로그 글을 한데 모은 길찾기용 글이다.
Swift?
스위프트를 대표하는 단어라면 type-safe 라는 단어가 있을 것 같다. 문법이 간단해서 쉽게 구현하니 뭐니는 장점이 아닌것 같다. 이 말은 요즘 스크립트 언어들의 대세인 동적인 언어와는 좀 다르다. 기능이 많아서 생각보다 복잡해 보인다.
언어의 모양을 보면 요즘 대세인 스크립트 언어 - 특히 Python - 의 특징을 가지고 있으면서도 Objective-C 스러운 모양을 아주 약간 가지고 있는 것 같다. 하지만 C와 비슷한 부분은 블럭을 중괄호({})로 구분한다는 점 뿐이지 완전히 다른 모습을 가지고 있다.
[관련글] Swift 언어에 대한 인상
[관련글] Swift - 기본 공통사항
[관련글] Objective-C에서 Swift로 넘어가기
[관련글] Objective-C에서 Swift로 넘어가기 #2
Swift Release Notes:
Swift 3:
변수와 상수(Variable and Constant)
변수는 일반적인 타입 변수, 즉 값을 설정하고 바꾸고 하는게 자유로운 이름을 가진 인스턴스(Instance 혹은 Object)다. 반대로 상수는 값을 바꿀 수 없는 인스턴스이다. 스위프트는 이 둘을 아주 편하게(?) 정의할 수 있는 문법을 가지고 있다.
[관련글] Swift - 변수와 상수 그리고 타입
[관련글] Swift - let(상수선언)에 대해 파고들기
[관련글] Swift - 문자열(String)
[관련글] Swift - 옵셔널(Optionals)
[관련글] Swift - 튜플(Tuple)
[관련글] Swift - 값(Value)과 레퍼런스(Reference)
[관련글] 연산형 지역 변수(Local Computed Variables)
컬렉션(Collection)
고전적인 자료구조(Data Structure)라는 표현과 비슷할 수도 있겠지만, 하나 이상의 데이터를 동적으로 가지는 컨테이너 타입을 대충 Collection 이라 부른다.
Swift 1.2 부터 컬렉션 타입으로 'Set' 타입이 추가될 예정이다.
[관련글] Swift - 컬렉션 타입(Collection Types)
[관련글] Swift - Collection 타입의 도구들: map, filter, reduce, zip
[관련글] Swift 1.2 - Set 타입
제어구조(Conditional Control)
'제어구조' 라는 말 자체는 아래 코드 예제면 설명이 될 것 같다.
[관련글] Swift - 논리 제어문(Conditional Statements)
[관련글] Swift - 옵셔널(Optionals)
[관련글] Swift 2.0 - guard 문
[관련글] Swift 2.0 - defer 문
[관련글] Range, 범위에 대한 이야기 | Swift
루프(Loop)
루프는 특정 코드를 2번 이상 실행시켜야 할 때 쓴다.
[관련글] Swift - 루프(Loop)
[관련글] Swift - 순차적 타입(Sequence Type) 만들기
함수(Function)
함수란 특정 코드 단위라고 부를 수도 있고 기능 단위라고 부를 수도 있다. 편리성과 가독성을 확보하기 위한 최소한의 예의일지도...
[관련글] Swift - 함수(Function)
클로져(Closure)
클로져도 일종의 함수라고 볼 수 있다. 하지만 그 선언 방식이나 동작에 있어서는 함수와는 좀 다른 방식으로 생성되고 동작한다.
[관련글] Swift - 클로져(Closure)
[관련글] Swift Memory Management #4 클로져(Closure)의 경우
[관련글] Swift 2.0 - CFunctionPointer 대신 클로저 사용하기
열거형(Enumerations)
열거형은 숫자가 아닌 키워드 형식으로 개발자가 원하는 여러 값을 선언하고 사용하는데 도움을 준다. C의 enum 과 거의 동일한 용도의 오퍼레이터다.
구조체(Structure)
구조체는 여러 개의 데이터를 한꺼번에 가지는 특수한 컨테이너 타입을 창조하기 위한 개념이다. 그런데 스위프트의 struct 문법은 클래스와 거의 비슷하다. 무려 메소드를 가질 수 있다.
[관련글] Swift - 프로퍼티(Properties)
[관련글] Swift - 메소드(Method)
[관련글] Swift - 생성자와 파괴자(Initialization and Deinitialization)
[관련글] Swift - 프로토콜(Protocols)
[관련글] Swift - 확장(Extensions)
[관련글] Swift - 서브스크립트(Subscripts)
[관련글] Swift - 제너릭(Generics)
[관련글] Swift Memory Management #3 구조체(struct)와 클래스(class)
[관련글] Swift - 언제 class 대신 struct 를 사용하는가
클래스(Class)
OOP(Object Orientation Programming)에서 가장 중요한 것이 클래스이다. 스위프트의 클래스는 단일상속을 지원하며 Objective-C 보다 좀 더 간결한 문법을 제공한다.
[관련글] Swift - 프로퍼티(Properties)
오퍼레이터 오버로드(Operator Overloads)
스위프트는 오퍼레이터(연산자)의 기능을 확장시키기 위한 오버로딩을 지원한다.
[관련글] Swift - 오퍼레이터 오버로드(Operator Overloads)
예제로 보는 스위프트
실제로 사용 할 수 있는 코드를 기반으로 언어를 공부하는 것도 좋은 선택이다. 도움이 될지는 잘 모르겠지만 관련 예제를 링크한다.
기타 스위프트 관련글
관련 외부 링크
Swift?
스위프트를 대표하는 단어라면 type-safe 라는 단어가 있을 것 같다. 문법이 간단해서 쉽게 구현하니 뭐니는 장점이 아닌것 같다. 이 말은 요즘 스크립트 언어들의 대세인 동적인 언어와는 좀 다르다. 기능이 많아서 생각보다 복잡해 보인다.
언어의 모양을 보면 요즘 대세인 스크립트 언어 - 특히 Python - 의 특징을 가지고 있으면서도 Objective-C 스러운 모양을 아주 약간 가지고 있는 것 같다. 하지만 C와 비슷한 부분은 블럭을 중괄호({})로 구분한다는 점 뿐이지 완전히 다른 모습을 가지고 있다.
[관련글] Swift 언어에 대한 인상
[관련글] Swift - 기본 공통사항
[관련글] Objective-C에서 Swift로 넘어가기
[관련글] Objective-C에서 Swift로 넘어가기 #2
Swift Release Notes:
- Xcode 6 Beta 3 변경점
- Xcode 6 Beta 4 변경점
- Xcode 6 Beta 5 변경점
- Xcode 6 Beta 7 변경점
- Xcode 6.1 Beta 변경점
- Swift 1.2 에서 바뀌는 것들
- Swift 2.0 - 예외처리(Error Handling Model)
- Swift 2.0 - guard 문
- Swift 2.0 - defer 문
- Swift 2.0 - CFunctionPointer 대신 클로저 사용하기
- Swift 2.0 - OptionSetType
- Swift 2.0 - 그 외 사소한(?) 변화들
Swift 2.2: Swift 2.2 에선 뭐가 바뀌었나
Swift 4:
변수와 상수(Variable and Constant)
변수는 일반적인 타입 변수, 즉 값을 설정하고 바꾸고 하는게 자유로운 이름을 가진 인스턴스(Instance 혹은 Object)다. 반대로 상수는 값을 바꿀 수 없는 인스턴스이다. 스위프트는 이 둘을 아주 편하게(?) 정의할 수 있는 문법을 가지고 있다.
// 상수 정의
let constantString = "THIS IS CONSTANT"
constantString = "UPDATE" // 컴파일 에러가 발생한다.
// 변수 생성
var variableName = 10
variableName = 20
let은 상수를 만들고 var는 변수를 만든다.[관련글] Swift - 변수와 상수 그리고 타입
[관련글] Swift - let(상수선언)에 대해 파고들기
[관련글] Swift - 문자열(String)
[관련글] Swift - 옵셔널(Optionals)
[관련글] Swift - 튜플(Tuple)
[관련글] Swift - 값(Value)과 레퍼런스(Reference)
[관련글] 연산형 지역 변수(Local Computed Variables)
컬렉션(Collection)
고전적인 자료구조(Data Structure)라는 표현과 비슷할 수도 있겠지만, 하나 이상의 데이터를 동적으로 가지는 컨테이너 타입을 대충 Collection 이라 부른다.
let myArray = [ 1, 2, 3, 4, 5 ]
let myDict = [ "A": 1, "B": 2 ]
많이 쓰이는 배열(Array) - 혹은 리스트 - 와 사전(Dictionary) 형이 주요 컬렉션이다.
Swift 1.2 부터 컬렉션 타입으로 'Set' 타입이 추가될 예정이다.
[관련글] Swift - 컬렉션 타입(Collection Types)
[관련글] Swift - Collection 타입의 도구들: map, filter, reduce, zip
[관련글] Swift 1.2 - Set 타입
제어구조(Conditional Control)
'제어구조' 라는 말 자체는 아래 코드 예제면 설명이 될 것 같다.
if a > b {
println("a is bigger than b")
}
비교(논리식)를 통해 분기를 결정하는 것은 언어에서 가장 중요한 부분이 아닐까. swift에서는 if 문을 비롯하여 switch-case 문을 자주 쓰게 될 것 같다.[관련글] Swift - 논리 제어문(Conditional Statements)
[관련글] Swift - 옵셔널(Optionals)
[관련글] Swift 2.0 - guard 문
[관련글] Swift 2.0 - defer 문
[관련글] Range, 범위에 대한 이야기 | Swift
루프는 특정 코드를 2번 이상 실행시켜야 할 때 쓴다.
for i in 1...10 {
println("i = \(i)")
}
말은 이상하지만, 어쨌든 루프라는 말은 거의 모든 언어에서 공통적으로 쓰이는 말이라 오해하는 사람은 없을 것 같다. -_-[관련글] Swift - 루프(Loop)
[관련글] Swift - 순차적 타입(Sequence Type) 만들기
함수(Function)
함수란 특정 코드 단위라고 부를 수도 있고 기능 단위라고 부를 수도 있다. 편리성과 가독성을 확보하기 위한 최소한의 예의일지도...
func someFunc(paramA: Int, paramB: String) -> String {
return "\(paramA) - \(paramB)"
}
someFunc(10, "Ten")
클래스와 클로져(Closure) 설명에도 꼭 필요한 내용이다.
[관련글] Swift - 함수(Function)
클로져(Closure)
클로져도 일종의 함수라고 볼 수 있다. 하지만 그 선언 방식이나 동작에 있어서는 함수와는 좀 다른 방식으로 생성되고 동작한다.
reversed = sort(nameList,
{ (s1: String, s2: String) -> Bool in return s1 > s2 })
위 코드는 스위프트 공식 전자책의 한 예제이다. 굵게 표시된 부분이 한 줄 함수로 구현된 간단한 클로져이다. 마치 Objective-C의 블럭 문법(Block Syntax)과 비슷한 것 같다.[관련글] Swift - 클로져(Closure)
[관련글] Swift Memory Management #4 클로져(Closure)의 경우
[관련글] Swift 2.0 - CFunctionPointer 대신 클로저 사용하기
열거형(Enumerations)
열거형은 숫자가 아닌 키워드 형식으로 개발자가 원하는 여러 값을 선언하고 사용하는데 도움을 준다. C의 enum 과 거의 동일한 용도의 오퍼레이터다.
enum LifeType {
case None
case Human
case Animal
case Bug
}
[관련글] Swift - 열거형(Enumerations)구조체(Structure)
구조체는 여러 개의 데이터를 한꺼번에 가지는 특수한 컨테이너 타입을 창조하기 위한 개념이다. 그런데 스위프트의 struct 문법은 클래스와 거의 비슷하다. 무려 메소드를 가질 수 있다.
struct MyDate {
var year = 1
var month = 1
var day = 1
func print() {
println("\(year)-\(month)-\(day)")
}
}
[관련글] Swift - 구조체(Structure) 훑어보기[관련글] Swift - 프로퍼티(Properties)
[관련글] Swift - 메소드(Method)
[관련글] Swift - 생성자와 파괴자(Initialization and Deinitialization)
[관련글] Swift - 프로토콜(Protocols)
[관련글] Swift - 확장(Extensions)
[관련글] Swift - 서브스크립트(Subscripts)
[관련글] Swift - 제너릭(Generics)
[관련글] Swift Memory Management #3 구조체(struct)와 클래스(class)
[관련글] Swift - 언제 class 대신 struct 를 사용하는가
클래스(Class)
OOP(Object Orientation Programming)에서 가장 중요한 것이 클래스이다. 스위프트의 클래스는 단일상속을 지원하며 Objective-C 보다 좀 더 간결한 문법을 제공한다.
class MyDate: BaseDate {
var year = 0
var month = 0
var day = 0
var name: String {
return "\(self.year)-\(self.month)-\(self.day)"
}
init(y: Int, m: Int, d: Int) {
self.year = y
self.month = m
self.day = d
}
func print() {
println(self.name)
}
}
[관련글] Swift - 클래스(Class) 훑어보기[관련글] Swift - 프로퍼티(Properties)
[관련글] Swift - 메소드(Method)
[관련글] Swift - 프로토콜(Protocols)
[관련글] Swift - 확장(Extensions)
[관련글] Swift - 제너릭(Generics)
스위프트는 오퍼레이터(연산자)의 기능을 확장시키기 위한 오버로딩을 지원한다.
@infix func == (left: MyType, right: MyType) -> Bool {
if (left.a == right.a && left.b == right.b) {
return true
}
return false
}
자신만의 타입을 만들었다면 오퍼레이터도 이를 지원하도록 하면 좋을(?) 것이다.[관련글] Swift - 오퍼레이터 오버로드(Operator Overloads)
예제로 보는 스위프트
실제로 사용 할 수 있는 코드를 기반으로 언어를 공부하는 것도 좋은 선택이다. 도움이 될지는 잘 모르겠지만 관련 예제를 링크한다.
기타 스위프트 관련글
- Swift - 유용한 전처리기(Preprocessor)
- Swift - 병렬 프로그래밍(Concurrency Programming) 가이드
- Swift 프로젝트에서 Objective-C 코드를 함께 사용하기
- Objective-C 프로젝트에서 Swift 코드 사용하기
- Swift Memory Management #1 기초 개념
- Swift Memory Management #2 ARC 기초
- Swift Memory Management #3 구조체(struct)와 클래스(class)
- Swift Memory Management #4 클로져(Closure)의 경우
- 싱글턴 패턴(Singleton Pattern)
- 딜리게이션 패턴(Delegation Pattern)
- Swift 와 C 포인터(Pointer) (Swift 3 이전 글)
- Swift 속의 C Pointer 이야기 - 시작 (Swift 3 기반 글)
- Swift - print 와 debugPrint 이야기
- Swift Documentation - 스위프트 코드 기반 문서화
관련 외부 링크
- Swift - Seorenn Note
- Swift 언어 개발문서(한글): 공식 문서 한글화 번역 프로젝트 결과물. 진작 알았다면 공부하는 시간이 많이 줄었을 기분이지만...
- Swift Cheat Sheet(영문): 한눈에 (아니 좀 길긴 하지만 -_-) 문법을 구경할 수 있는 치트시트. 문법에 대해 미리 공부했다면 치트시트로 금방 볼 수 있는 자료가 공부했던 것을 떠올리기에 유용하다.
- Kei님의 Swift 강의(한글): 구성이 시원시원해서 이해가 잘 된다.
댓글
이런 글로그를 보다니 꿈 같습니다.
해외에서 혼자 공부하고있는 중인데 한줄기 빛과 같은 곳이네요 ㅎ
앞으로도 좋은일만 가득하시길 바랍니다!
: )
궁금했던점을 많이 해소시킬 수 있었습니다. 감사합니다 ^^