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 강의(한글): 구성이 시원시원해서 이해가 잘 된다.
우와... 정말 대단하시네요.
답글삭제이런 글로그를 보다니 꿈 같습니다.
해외에서 혼자 공부하고있는 중인데 한줄기 빛과 같은 곳이네요 ㅎ
앞으로도 좋은일만 가득하시길 바랍니다!
: )
감사합니다.. :-)
답글삭제정말 많은 도움받아갑니다.
답글삭제궁금했던점을 많이 해소시킬 수 있었습니다. 감사합니다 ^^
대단한 정보예요 어디서 이렇게 많이???
답글삭제