[Swift 정면돌파] 01. 데이터 타입

H43RO·2021년 7월 28일
2

Swift 정면돌파

목록 보기
1/19
post-thumbnail

본 시리즈는 아래 강의자료를 기반으로 작성되었습니다.
https://www.boostcourse.org/mo122/joinLectures/38564

필자가 생각하기에 Swift 가 가지는 큰 특징으로는 소스코드 각각 요소의 가독성이 뛰어나다는 점이다. Swift 를 한 번도 공부해본 적 없어도 어느정도 코드를 이해할 수 있을 정도이다. 이 점을 필자의 주력 언어인 Kotlin 을 공부하면서도 느꼈는데, 서로 비슷한 부분이 많아 Swift 역시 익숙하게 접근할 수 있었다.


데이터 타입

1. Primitive 데이터 타입

Bool

truefalse 만을 값으로 가지는 타입

var boolVar: Bool = true
boolVar = false
// boolVar = 0  컴파일 오류
// boolVar = 1  컴파일 오류

Int

→ 64비트 정수형 타입

var intVar: Int = -100
// intVar = 100.11  컴파일 오류

UInt

→ 64비트 양의 정수형 타입

var uintVar: UInt = 100
// uintVar = -100  컴파일 오류

Float

→ 32비트 부동소수점 기반 실수형 타입

var floatVar: Float = 3.14
floatVar = 4

Double

→ 64비트 부동소수점 기반 실수형 타입

var doubleVar: Double = 3.14
doubleVar = 4
// doubleVar = floatVar  컴파일 오류

Character

유니코드를 사용하는 문자 타입 (큰 따옴표 "" 사용)

var characterVar: Character = "😇"
characterVar = "뮤"
// characterVar = "뮤츠"  컴파일 오류

String

유니코드를 사용하는 문자열 타입 (큰 따옴표 "" 사용)

var stringVar: String = "스위프트 스터디 가즈아 "
stringVar = stringVar + "홧팅"
print(stringVar)  // "스위프트 스터디 가즈아 홧팅"

stringVar = """
여러 줄 문자열의 경우 이렇게
큰 따옴표 세 개로 감싸면 됨미다
"""

2. Any, AnyObject, nil

Any

→ Swift 의 모든 타입을 지칭하는 키워드 (모든 데이터 타입은 Any 의 하위 타입들임)

var any: Any = 100
any = "어떤 타입도 수용 가능"
any = 3.141592

단, Any 에 Double 할당했더라도 Double 변수에 직접적으로 할당해줄 순 없음 (명시적 형 변환 필요)

AnyObject

→ 모든 클래스 타입을 지칭하는 프로토콜

class SomeClass { }
var anyObject: AnyObject = SomeClass()

// Any Object 는 클래스의 인스턴스만 수용 가능 
anyObject = 123.12  // 컴파일 오류 발생

nil

→ '없음'을 의미하는 키워드 (다른 언어에선 통상적으로 null 이라고 칭함)

3. Collection 타입

Array

→ 멤버가 인덱스를 가진 리스트 형태의 컬렉션 타입
→ 여러 리터럴 문법을 활용할 수 있어서 선언 및 생성 표현 방법이 다양함

var integers: Array = Array()
var integers: Array = [Int]()
var integers: Array = []
var integers: [Int] = Array()
var integers: [Int] = [Int]()
var integers: [Int] = []
var integers = [Int]()

integers.append(1)
integers.append(50)
integers.append(100)
print(integers)  // [1, 50, 100]
print(integers.contains(100))  // true

integers[0] = 30        // [30, 50, 100]
integers.remove(at: 0)  // [50, 100]
integers.removeLast()   // [50]
integers.removeAll()    // []
print(integers.count)   // 0

let immutableArray = [1, 2, 3]  // 불변 Array

Dictionary

→ key 와 value 의 쌍으로 이루어진 컬렉션 타입
→ 여러 리터럴 문법을 활용할 수 있어서 선언 및 생성 표현 방법이 다양함

var dict: Dictionary = [String: Any]()
var dict: Dictionary = Dictionary()
var dict: [String: Any] = Dictionary()
var dict: [String: Any] = [String: Any]()
var dict: [String: Any] = [:]
var dict = [String: Any]()

// 키에 해당하는 값 할당
dict["someKey"] = "value"
dict["anotherKey"] = 100

print(dict) // ["someKey": "value", "anotherKey": 100]

// 키에 해당하는 값 변경
dict["someKey"] = "dictionary"
print(dict) // ["someKey": "dictionary", "anotherKey": 100]

// 키에 해당하는 값 제거
dict.removeValue(forKey: "anotherKey")
dict["someKey"] = nil
print(dict)

// 불변 Dict
let immutableDict: [String: String] = ["name": "H43RO", "gender": "male"]
// immutableDict["name"] = "김현준"  컴파일 오류 발생

Set

→ 순서가 없고 각 멤버가 항상 유일한 것을 보장하는 컬렉션 타입

// 빈 Int Set 생성
var integerSet: Set = Set()
integerSet.insert(1)
integerSet.insert(100)
integerSet.insert(100)
integerSet.insert(100)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99)

print(integerSet)  // [100, 99, 1]
print(integerSet.contains(1))  // true

integerSet.remove(100)
integerSet.removeFirst()

print(integerSet.count)  // 1

// Set는 집합 연산에 매우 유용함
let setA: Set = [1, 2, 3, 4, 5]
let setB: Set = [3, 4, 5, 6, 7]

// 합집합
let union: Set = setA.union(setB)
print(union)  // [2, 4, 5, 6, 7, 3, 1]

// 합집합 오름차순 정렬
let sortedUnion: [Int] = union.sorted()
print(sortedUnion)  // [1, 2, 3, 4, 5, 6, 7]

// 교집합
let intersection: Set = setA.intersection(setB)
print(intersection)  // [5, 3, 4]

// 차집합
let subtracting: Set = setA.subtracting(setB)
print(subtracting)  // [2, 1]
profile
어려울수록 기본에 미치고 열광하라

0개의 댓글