반응형
참고 사이트: iOS 프로그래밍을 위한 스위프트 기초(edwith)
참고 문서: The Swift Language Guide (한국어)
실행 환경: Xcode 12 실행 → Create a new Xcode project → macOS → Command Line Tool 선택 → Product Name, Organization Identifier 입력 후 프로젝트 생성
목차
- 스위프트(Swift) 5 배워보기 - 1. 다양한 타입
- 스위프트(Swift) 5 배워보기 - 2. 함수, 제어문, 옵셔널
- 스위프트(Swift) 5 배워보기 - 3. 클래스, 구조체, 열거형
- 스위프트(Swift) 5 배워보기 - 4. 클로저
- 스위프트(Swift) 5 배워보기 - 5. 프로퍼티
- 스위프트(Swift) 5 배워보기 - 6. 상속, 인스턴스 생성/소멸
- (계속)
상수와 변수
- 상수(let)는 한 번 선언된 후에는 변경이 불가능하다.
- 변수(var)는 선언 후 변경이 가능하다.
// 상수, 변수 선언법
// 타입은 생략 가능
let 상수명:타입 = 값
let 상수명 = 값
var 변수명:타입 = 값
var 변수명 = 값
- 상수와 변수를 선언 할 때 값을 할당할 수 있다.
- 만약 선언과 동시에 값을 할당하는 것이 아닌,선언 후 나중에 값을 할당하려면, 선언 할 때 반드시타입명을 명시해야 한다.
let sum: Int
let numA: Int = 10
let numB: Int = 20
// 선언 후 값 할당
sum = numA + numB
// 만약 상수에 값을 할당 한 뒤,
// 다시 값을 할당하려고 하면 오류가 발생한다.
let sum: Int = 10
let numA: Int = 10
let numB: Int = 20
sum = numA + numB // Cannot assign to value: 'sum' is a 'let' constant
기본 데이터 타입
스위프트의 기본 데이터 타입은 아래와 같다.
- Bool
- Int, UInt
- Float, Double
- Character, String
1. Bool
- true와 false 값만 가진다.
- 스위프트에서는 타 언어와는 다르게true 대신 1,false 대신 0을 넣으면 오류가 발생한다.
var bool: Bool = true
bool = false
2. Int, UInt
- Int: 정수 타입(64비트 정수형)
- UInt: 양의 정수 타입(64비트 양의 정수형)
var int: Int = 100
// int = 100.1 은 오류 발생
var uint: UInt = 100
// uint = -100 은 오류 발생
3. Float, Double
- Float: 실수 타입(32비트 부동소수형)
- Double: 실수 타입(64비트 부동소수형)
var float: Float = 3.14
float = 3 // 정수형 할당도 가능하다.
var double: Double = 3.14
double = 3 // 정수형 할당도 가능하다.
// Double형 변수에 Float형 변수 값을 할당 할 수 없다.
double = float // Cannot assign value of type 'Float' to type 'Double'
4. Character, String
- Character: 문자 타입(유니코드)
- String: 문자열 타입(유니코드)
// 문자 할당은 큰따옴표(")로 한다.
// Character는 한 문자만 할당 가능하다.
var character: Character = "🇰🇷" // 이모지 할당 가능
character = "😄"
character = "가"
// 문자열 할당도 큰따옴표(")로 한다.
// 여러 문자를 할당할 때에는 String을 사용한다.
var string: String = "가나다라"
Any, AnyObject, nil
스위프트에는 기본 데이터 타입 외에 Any, AnyObject, nil 타입이 있다.
1. Any
- 모든 타입을 지칭하는 키워드
var any: Any = 100
any = "모든 타입 할당 가능"
// 단, 아래 코드와 같이 any 변수에 Double형 값을 할당 했어도,
// Double 타입 변수에 할당할 수는 없다.
// 이 경우는 명시적으로 형변환을 해줘야 한다.
any = 123.12
let double: Double = any // 오류발생
2. AnyObject
- 모든 클래스 타입을 지칭하는 프로토콜
class SomeClass {}
var anyObject: AnyObject = SomeClass()
// AnyObject는 클래스의 인스턴스만 수용 가능하기 때문에 클래스의 인스턴스가 아니면 할당할 수 없습니다.
anyObject = 123.12 // 컴파일 오류발생
3. nil
- '없음'을 의미하는 키워드
- NULL, Null, null 등과 비슷
// any는 Any 타입이고, anyObject는 AnyObject 타입이기 때문에 nil을 할당할 수 없습니다.
var any: Any = 100
var anyObject: AnyObject = SomeClass()
someAny = nil // 컴파일 오류발생
someAnyObject = nil // 컴파일 오류발생
컬렉션 타입
스위프트에는 여러 값들을 묶어서 하나로 표현하는 컬렉션 타입이 있다.
1. 배열(Array)
- 순서(index)가 있는 멤버(value) 리스트 형태의 컬렉션 타입
- 변수(var)로 할당하면 Array 변경이 가능하고, 상수(let)로 할당하면 변경 불가능하다.
- 빈 배열 생성
var someInts = [Int]()
// 배열에 3을 추가
someInts.append(3)
// 배열 비우기
someInts = []
- 기본 값으로 빈 배열 생성
// [0.0, 0.0, 0.0] 배열 생성
var doubles = Array(repeating: 0.0, count: 3)
반복할 값 반복횟수
- 배열 합치기
// [2.5, 2.5, 2.5] 배열 생성
var threeDoubles = Array(repeating: 2.5, count: 3)
// [0.0, 0.0] 배열 생성
var twoDoubles = Array(repeating: 0.0, count: 2)
// 배열 합치기
// [2.5, 2.5, 2,5, 0.0, 0.0]
var sixDoubles = threeDoubles + twoDoubles
- 문자열로 된 배열 생성
var shoppingList: [String] = ["Eggs", "Milk"]
// 타입 생략 가능
var shoppingList = ["Eggs", "Milk"]
- 배열의 멤버수 확인: count
// count를 사용하여 멤버 수를 셀 수 있다.
var shoppingList = ["Eggs", "Milk"]
print("shoppingList의 멤버 수는 총 \(shoppingList.count) 개입니다.")
// shoppingList의 멤버 수는 총 2 개입니다.
// 위 print 함수의 큰따옴표("") 안에 있는 \()는
// 문자열 보간법(String Interpolation) 이라고 한다.
// 프로그램 실행 중 문자열 내에 변수 또는 상수를 넣어 실행할 때 사용한다.
- 배열이 비었는지 확인: isEmpty
if shoppingList.isEmpty {
print("쇼핑 목록이 비었습니다.")
} else {
print("쇼핑 목록이 비어있지 않습니다.")
}
- 배열에 멤버 추가: append, +=
shopingList.append("Four")
// 또는 +=로 추가할 수 도 있다.
shoppingList += ["Banking Powder"]
- 특정 위치의 멤버에 접근: array[index]
// index는 0부터 시작한다.
var firstItem = shoppingList[0]
// firstItem: "Eggs"
- 특정 위치에 멤버 추가/삭제: insert, at, remove, removeLast
// 0번 위치에 값 추가
shoppingList.insert("Maple Syrup", at:0)
// 0번 위치의 값을 제거하고 상수에 값 할당
let mapleSyrup = shoppingList.remove(at: 0)
// mapleSyrup: "Maple Syrup"
// 가장 마지막 멤버 삭제
let apples = shoppingList.removeLast()
- 배열 순회: for-in, enumerated()
// for-in 반복문 사용
// 멤버만 출력된다.
for item in shoppingList {
print(item)
}
// Eggs
// Milk
// Four
// Baking Powder
// Chocolate Spread
// Cheese
// enumerated() 사용
// 인덱스와 멤버를 같이 출력할 수 있다.
for (index, value) in shoppingList.enumerated() {
print("Item \(index + 1): \(value)")
}
// Item 1: Eggs
// Item 2: Milk
// Item 3: Four
// Item 4: Baking Powder
// Item 5: Chocolate Spread
// Item 6: Cheese
2. 셋(Set)
- 중복되지 않은 멤버가 순서없이 존재하는 컬렉션
- 멤버의 타입은 반드시 hashable 이어야 한다.
- hashable 타입: String, Int, Double, Bool
- 빈 Set 생성
// Set은 축약형이 없다.
var letters = Set<Character>()
// 멤버 추가
letters.insert("a")
// Set 비우기
letters = []
- 배열 문자열을 이용한 Set 생성
var musicGenres: Set<String> = ["Rock", "Classical", "Pop"]
// 타입 생략 가능
var musicGenres: Set = ["Rock", "Classical", "Pop"]
- Set 멤버수 확인: count
var musicGenres: Set = ["Rock", "Classical", "Hip hop"]
print("내가 좋아하는 음악 장르의 수는 \(musicGenres.count)개 입니다.")
// 내가 좋아하는 음악 장르의 수는 3개 입니다.
- Set 비었는지 확인: isEmpty
if favoriteGenres.isEmpty {
print("좋아하는 음악 장르가 없습니다.")
} else {
print("좋아하는 음악 장르가 있습니다.")
}
- Set 멤버 추가/삭제: insert, remove
// 멤버 추가
musicGenres.insert("Kpop")
// Set 에서는 +=를 사용하여 멤버를 추가할 수 없다.
// 멤버 삭제
musicGenres.remove("Rock")
- Set 멤버 포함 여부 확인: contains
print(musicGenres.contains("Kpop"))
// 포함: true, 미포함: false
- Set 순회: for-in
for genre in musicGenres {
print("\(genre)")
}
// Kpop
// Hip hop
// Classical
// Set은 index가 없기 때문에 enumrated()를 사용할 수 없다.
- Set 결합: intersection(), symmetricDifference(), union(), subtracting()
- 수학의 집합 연산자와 동일하다
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
// 합집합
oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// 교집합
oddDigits.intersection(evenDigits).sorted()
// []
// 차집합
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
// 여집합
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]
3. 딕셔너리(Dictionary)
- [Key: Value] 형태로 이루어진 컬렉션 타입
- 빈 딕셔너리 생성
var namesOfIntegers = [Int: String]()
// Key: Value 추가
namesOfIntegers[16] = "sixteen"
// 딕셔너리 비우기
namesOfIntegers = [:]
- 문자열을 이용한 딕셔너리 생성
var airports: [String: String] = = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
- 빈 딕셔너리 확인
if airports.isEmpty {
print("airports 딕셔너리가 비어있습니다.")
} else {
print("airports 딕셔너리가 비어있지 않습니다.")
}
- 딕셔너리에 Key: Value 할당
airports["LHR"] = "London"
- Key에 해당하는 값(Value) 변경
// Key: Value 추가
airports["KOR"] = "Seoul"
// Value 변경
airports["KOR"] = "Incheon"
- Key에 해당하는 값(Value) 제거: removeValue
airports.removeValue(forKey: "KOR")
// 또는, nil 할당
airports["KOR"] = nil
반응형
'IT' 카테고리의 다른 글
스위프트(Swift) 5 배워보기 - 3. 클래스, 구조체, 열거형 (0) | 2020.10.09 |
---|---|
스위프트(Swift) 5 배워보기 - 2. 함수, 제어문, 옵셔널 (0) | 2020.10.06 |
파워목업(PowerMockup) 체험판 간단 사용기 (0) | 2020.10.04 |
[정리] 데이터 과학을 위한 통계 (0) | 2020.10.04 |
[정리] 이것이 리눅스다 (2장~6장) (0) | 2020.10.04 |
최근댓글