티스토리 뷰

Develop/iOS

[SwiftBook] 타입 1/2

Nebori 2018. 9. 19. 09:50
Type

Type

안녕하세요. 이번 챕터에서는 Swift에서 사용하는 데이터 타입에 대해서 알아보려고 합니다.

오늘도 역시 아래 내용을 잘 확인해주세요. 시작하겠습니다.

아래 내용은 모두 Xcode 10, Swift 4.2 에서 작성되었습니다.

Nebori Swift Book


데이터 타입은 크게 3가지로 나누어 볼 수 있습니다.

  • 기본 제공 타입
  • 다수의 값을 다루는 타입
  • 사용자 타입

하나씩 알아보도록 합니다.


기본 제공 타입

  • 참/거짓: Bool
  • 정수: Int, UInt
  • 실수: Float, Double
  • 문자, 문자열: Character, String

 

참 / 거짓

부울은 다룰 수 있는 값은 true, false 두 가지 입니다.

아래는 부울 값 대입 예시입니다.

let boolExam: Bool = true

부울 타입의 경우 비교에 가장 많이 사용합니다.

예를들어 1과 1이 같느냐? 1과 2가 같느냐?를 물어 각각 true, false 값을 얻을 수 있죠.

let isTrueBool: Bool = 1 == 1
let isFalseBool: Bool = 1 == 2

 

정수

정수는 두 가지의 타입을 가지고 있습니다.

  • Int: 음수와 정수
  • UInt: 0 이상의 정수

바로 예시로 넘어가서 보여드리겠습니다.

let signedInt: Int = -100

UInt는 음수를 담으려고 시도하면 에러를 발생시킵니다.

// error: negative integer '-100' overflows when stored into unsigned type 'UInt'
let unsigned: UInt = -100

여기서 알고있어야 할 점 한가지는 정수 타입의 경우에는 타입 지정을 하지 않을경우 Int타입으로 자동 인식합니다.

정수 타입의 크기

정수는 타입을 타입 뒤에 비트를 적어 크기를 지정할 수 있습니다.

타입.max, 타입.min으로 해당 타입의 최대, 최소값을 대입할 수 있습니다.

해당 비트수 지정은 환경이 32비트일 때, 64비트일 때 나눠서 코드를 작성할 수 있겠죠?

아래는 정수 비트별로 다룰 수 있는 최대 값을 넣는 예시입니다.

let signedInt01: Int8 = Int8.max
let signedInt02: Int16 = Int16.max
let sigendInt03: Int32 = Int32.max
let sigendInt04: Int64 = Int64.max

정수로 변환하기 (캐스팅)

정수로 변환하는 예시는 바로 코드로 들어가겠습니다.

let castingInt01: Int = Int("12345")
// 아래의 경우 실수를 정수로 바꾸면서 소수점 이하를 잃는 값 손실이 있을 수 있습니다.
let castingInt02: Int = Int(1.2345)

다음은 변환이 실패하는 코드입니다.

아래 예시의 경우는 에러는 발생하지 않지만 failCastingInt01가 nil 값을 가지게 됩니다.

nil은 다른 언어에서 null과 비슷한 값으로 생각하시면 됩니다.

let failCastingInt01 = Int("이런 문자인 경우는 nil을 반환합니다.")

정수 타입에서 에러가 발생하는 경우

Int8타입의 경우 -128 ~ 127까지 다룰 수 있는 정수 타입입니다.

이 타입의 변수에 다룰 수 있는 범위를 넘는 값을 넘기면 어떻게 될까요?

// error: integer literal '200' overflows when stored into 'Int8'
let overflowInt01: Int8 = 200

다음으로 정수와 정수를 연산하는데 에러가 날 수 있을까요? 범위를 넘지 않는데!

네. 날 수 있습니다. 아래를 확인해주세요.

같은 정수 타입이라도 타입을 혼합해서 사용할 수는 없습니다.

let int8Value: Int8 = 1
let int16Value: Int16 = 1
// error: binary operator '+' cannot be applied to operands of type 'Int8' and 'Int16'
let typeErrorInt01 = int8Value + int16Value

실수

실수는 두 가지 타입을 가지고 있습니다.

  • Float
  • Double

여기서, 타입 지정을 생략할 경우 자동으로 Double타입으로 지정됩니다.

let floatValue01: Float = 1.2345
// 아래의 타입은 Double입니다.
let doubleValue01 = 1.2345

실수 역시 타입을 혼합해서는 연산할 수 없습니다.

타입 변환을 통해서는 가능합니다.

let sumValue = Double(floatValue01) + doubleValue01

 

문자와 문자열

  • 문자: Character
  • 문자열: String

문자

문자는 ' 작은 따옴표로 지정할 경우에 문자로 인식하는 언어들이 있습니다.

Swift의 경우에는 문자열과 동일하게 " 큰 따옴표로 지정하되, 1개의 문자만 입력하면 문자로 인식됩니다.

// error: single-quoted string literal found, use '"'
let charValue01: Character = 'a'
// error: cannot convert value of type 'String' to specified type 'Character'
let charValue03: Character = "abcdefg"
// 아래의 경우에만 제대로 선언됩니다.
let charValue02: Character = "a"
문자의 비교

문자의 비교는 비교 연산자를 사용하면 가능합니다.

let charValue04: Character = "a"
let isTrueValue01 = charValue04 == "a"
let isFalseValue01 = charValue04 != "a"

문자열

문자열은 " 큰 따옴표를 사용하면 자동으로 문자열로 인식됩니다.

바로 코드로 보여드리겠습니다.

let stringValue01: String = "이건 문자열이에요."
let stringValue02 = "이렇게 만들어도 타입 추론에 의해 문자열로 인식돼요."

아래와 같이 문자열 내에 바로 변수를 삽입해서 표현도 가능합니다.

일반적으로 문자열을 합칠 때 보다 훨씬 섬세하게 결합이 가능하죠.

let partString01: String = "네보리"
let partString02: String = "반가워요!"
let string03: String = "저는 \(partString01)에요. 정말 \(partString02)"

문자열로 변환하기 (캐스팅)

문자열로 변환하는 방법은 코드로 보여드리겠습니다.

let castingString01 = String(12345)
let castingString02 = String(true)

문자열의 비교

문자열의 비교도 비교 연산자를 사용하면 가능합니다.

let stringValue03: String = "abcd"
let isTrueValue = stringValue03 == "abcd"
let isFalseValue = stringValue03 != "abcd"

문자열은 비교하는 메서드가 존재합니다.

compare라는 메서드인데요.

사용 방법은 아래 있습니다.

let stringValue04 = "b"
let result = stringValue04.compare("a")
if result == .orderedSame {
    // 완전히 같습니다.
    print("same")
} else if result == .orderedAscending {
    // 호출한 문자열이 더 작습니다.
    print("ascending")
} else if result == .orderedDescending {
    // 호출한 문자열이 더 큽니다.
    // 위 결과는 이곳으로 들어오게 됩니다.
    print("descending")
}

문자열 비교를 하는데 크다? 작다? 이게 무슨말이지? 하시는 분이 계실껍니다.

String 타입에서 compare 메서드는 참 / 거짓 값을 돌려주지 않고

ComparisonResult타입을 돌려줍니다.

비교 결과를 저장하는 열거형 타입인데, 이는 뒤에서 나오니 이런 것이 있구나 하고 넘겨주시기 바랍니다.

문자에서 a 보다 b가 알파벳 순서에서 뒤에 있게됩니다.

"b".compare("a")b를 기준으로 a가 먼저있나? 늦게있나? 확인하는 메서드로 생각하면 쉽습니다.

그래서 위의 경우에는 ba보다 뒤에있는 값이므로 내림차순의 결과가 나오게 됩니다.


내용이 많이 길어져 챕터를 나누어야 할 것 같습니다.

해당 챕터에서는 기본 제공 타입에 대해서 알아보았습니다.

모든 타입에 대해서는 많은 메서드가 존재합니다.

그 내용은 공부하시면서, 사용하시면서 찾아보시기 바랍니다.

'Develop > iOS' 카테고리의 다른 글

[SwiftBook] 흐름 제어  (0) 2018.09.24
[SwiftBook] 타입 2/2  (0) 2018.09.20
[SwiftBook] 값  (0) 2018.09.18
[iOS] Swift Codable  (0) 2018.09.09
[iOS] Swift QRCode 읽기  (0) 2018.08.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
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