티스토리 뷰

[데이터 타입 안심]


- Swift는 타입에 매우 엄격하고 민감하여 서로 다른 타입끼리의 데이터 교환 시 반드시 타입 캐스팅을 거쳐야 함

- 엄밀히 말하여 새로운 인스턴스를 생성하여 할당하는 것

- Swift는 서로 다른 타입의 값을 할당하면 컴파일 오류를 내므로 실수를 줄일 수 있음



[타입 별칭]


- typealias 키워드 사용

1
2
3
typealias int = Int
let number: int = 42
let number2: Int = 42
cs




[튜플 Tuple]


- 지정된 데이터의 묶음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let person: (StringInt, Double) = ("noname"742142.3)
person.0    //"noname"
person.1    //742
person.2    //142.3
//기본적으로 튜플의 각 요소는 인덱스로 표현함
//간편하지만 각 요소가 어떤 의미가 있는지 유추하기 힘듬
 
let person2: (name: String, age: Int, height: Double) = ("noname2"852791.3)
person2.name    //"noname2"
person2.age     //852
person2.height  //791.3
person2.0       //"noname2"
//튜플 요소의 이름을 명시하여 이름으로 값에 접근
//물론 여전히 인덱스를 사용하여 값에 접근 가능
 
cs


- 컬렉션 타입이 아님



[컬렉션 타입 - 배열 Array]


- 같은 타입의 데이터를 일렬로 나열한 후 순서대로 저장하는 형태의 컬렉션 타입

- 각기 다른 위치에 같은 값이 들어갈 수도 있음

- 대괄호로 값을 묶어 Array 타입임을 표현할 수 있음

- 요소의 삽입 및 삭제가 자유로움

1
2
3
4
let array: Array<Int> = [12345]
let array2: [Int= [6,7,8,9]
let emptyArray1: [Int= [] //Int형 요소를 담을 수 있는 빈 배열 생성
let emptyArray2 = [Int]()   //Int형 요소를 담을 수 있는 빈 배열 생성
cs


- 배열 관련 여러 가지 메서드와 프로퍼티

 : first : 배열의 맨 처음 요소 반환

 : last : 배열의 맨 마지막 요소 반환

 : count : 배열 요소 수 반환

 : isEmpty : 빈 배열인지 확인

 : index(of:) : 해당 요소의 인덱스 확인

 : append(_:) : 배열의 맨 뒤에 요소 추가

 : insert(_:at:) : 해당 인덱스에 요소 추가

 : remove(at:) : 해당 요소의 요소 삭제

 : removeAll() : 모든 요소 삭제, 빈 배열로 만듦



[컬렉션 타입 - 딕셔너리 Dictionary]


- 순서 없이 키와 값의 쌍으로 구성되는 컬렉션 타입

- 키는 중복될 수 없음, 키는 값을 대변하는 유일한 식별자

- 대괄호로 키와 값의 타입 이름을 쌍으로 묶어 딕셔너리 타입임을 표현

1
2
3
4
let dictionary: Dictionary<StringInt> = ["Hi"3]
let dictionary2: [StringInt= ["Hi"4"Hello"5]
let emptyDictionary: [StringInt= [:]    //String 타입 키, Int 타입 값을 갖는 빈 딕셔너리 생성
let emptyDictionary2 = [StringInt]()  //String 타입 키, Int 타입 값을 갖는 빈 딕셔너리 생성
cs


- 각 값에 키로 접근

- 내부에 없는 키로 접근하면 nil을 반환

- 딕셔너리 관련 여러 메서드와 프로퍼티

 : isEmpty : 빈 딕셔너리인지 확인

 : count : 딕셔너리 요소 개수 확인

 : removeValue(forKey:) : 특정 키에 해당하는 값을 제거



[컬렉션 타입 - 세트 Set]


- 같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입

- 세트 내의 값은 모두 유일하고 해시 가능(Hashable 프로토콜을 준수)한 값

 : Swift의 기본 데이터 타입은 모두 해시 가능한 값

- 축약형이 없어 Set<Int>와 같이 써서 초기화함

- 배열과 같이 대괄호를 사용하며 때문에 타입 지정을 해주지 않으면 배열로 타입 추론됨

- 집합 관계를 표현하고자 할 때 유용하기 사용됨

1
2
3
let set: Set<Int> = Set<Int>()
let set2: Set<String> = []
let set3: Set<Int> = [2,6,1,2,3,4,2,4,2//{2, 4, 6, 3, 1}
cs




[열거형]


- 연관된 항목들을 묶어서 표현할 수 있는 타입

- 프로그래머가 정의해준 항목 값 외에는 추가/수정이 불가능

 : 제한된 선택지를 주고 싶을 때

 : 정해진 값 외에는 입력받고 싶지 않을 때

 : 에상된 입력 값이 한정되어 있을 때

- 항목별로 값을 가질 수도, 가지지 않을 수도 있으며, 각 항목이 그 자체로 고유의 값이 될 수 있음

- 원시 값(Raw Value) : 각 항목이 실제 값을 가질 수 도 있음

- Optional은 열거형으로 구현되어 있음

1
2
3
4
5
6
7
8
9
enum Method{
    case subway
    case address
    case random
}
//각 항목은 그 자체가 고유의 값
 
var method: Method = Method.subway
method = .address
cs

1
2
3
4
5
6
7
8
9
10
11
12
//원시 값 지정 : 먼저 열거형의 타입을 지정
 
enum Method: String{
    case subway = "지하철"
    case address = "주소"
    case random = "랜덤"
}
//각 항목은 그 자체가 고유의 값
 
Method.address.rawValue //"주소", String 타입
Method.address  //address, Method 타입
Method(rawValue: "지하철")    //원시 값으로 열거형 타입 변수 생성 가능, subway (Method 타입)
cs


1
2
3
4
5
6
7
8
9
10
//연관 값 : 열거형 내의 항목이 자신과 연관된 값을 가질 수 있음
 
enum Method{
    case subway(line: String)
    case address(city: String)
    case random(index: Int)
}
 
let what = Method.subway(line: "인천4")
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//순환 열거형 : 열거형 항목의 연관 값이 열거형 자신의 값이고자 할 때 사용
//indirect 키워드 사용
 
indirect enum ArithmeticExpression{
    case number(Int)
    case addition(ArithmeticExpression, ArithmeticExpression)
    case multiplication(ArithmeticExpression, ArithmeticExpression)
}
 
let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sum = ArithmeticExpression.addition(five, four)
let final = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))
 
func evaluate(_ expression: ArithmeticExpression) -> Int {
    switch(expression){
    case .number(let value):
        return value
    case .addition(let left, let right):
        return evaluate(left) + evaluate(right)
    case .multiplication(let left, let right):
        return evaluate(left) * evaluate(right)
    }
}
let result: Int = evaluate(final)
 
 
cs


'Swift > 야곰의 스위프트' 카테고리의 다른 글

6장 흐름 제어  (0) 2018.01.29
5장 연산자  (0) 2018.01.29
3장 데이터 타입 기본  (0) 2018.01.29
2장 스위프트 처음 시작하기  (0) 2018.01.29
1장 스위프트  (0) 2018.01.29
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함