Swift 2. 데이터 타입 기본

 Swift 2. 데이터 타입 기본



* 데이터 타입

프로그램 내에서 다뤄지는 데이터의 종류

Swift의 기본 데이터 타입들은 모두 구조체를 기반으로 구현됨

Swift의 모든 데이터 타입의 이름은 대문자로 시작



1. Int & UInt

정수 타입

Int 타입: +, - 타입을 포함한 정수

UInt 타입: -를 포함하지 않는 0을 포함한 양의 정수


8, 16, 32, 64 비트의 형태가 있음

Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

저장할 수 있는 데이터의 크기에 따라 타입이 분리

시스템이 몇 비트 환경이냐에 따라 Int와 UInt의 크기가 달라짐

ex) 32비트 환경 : Int -> Int32    /    64비트 환경 : Int -> Int64 


최댓값과 최솟값은 각각 max, min 프로퍼티로 알아볼 수 있음


* 예시

print(Int.max)

print(Int8.max)








Swift는 자료형에 엄격해서 Int와 UInt를 완전히 다른 타입으로 인식 -> 자료형을 선택할 때 잘 선 택해야 함  (Int 로는 표현이 안되고 UInt 로만 표현이 되는 범위의 값을 이용할 때만 UInt를 사용하고 나머지 경우에는 Int를 사용할 것을 권장



- 진수에 따라 정수 표현하기

10진수 : 그냥 표현

2진수 : 0b~

8진수 : 0o~

16진수 : 0x~


* 예시

let decInt : Int = 28       // 10진수 28

let binInt : Int = 0b11100  // 2진수 28

let octInt : Int = 0o34     // 8진수 28

let hexInt : Int = 0x1c     // 16진수 28


print("10진수 : \(decInt)")

print("2진수 : \(binInt)")

print("8진수 : \(octInt)")

print("16진수 : \(hexInt)")









2. Bool

불리언 타입

true, false만 값으로 가짐


* .toggle()

불리언 값을 반전시키는 함수


* 예시 

var boolean : Bool = true

print(boolean)


boolean.toggle()

print(boolean)










3. Float & Double

부동소수점을 사용하는 실수

부동소수타입

정수 타입 보다 훨씬 넓은 범위의 수를 표현

Float : 32 비트. 6자리 숫자까지 표현 가능 (64비트 환경)

Double : 64 비트. 15자리 숫자까지 표현 가능 (64비트 환경)

둘 중 어느 것을 사용해야 할지 잘 모르는 상황이면 Double을 사용하는 것을 권장


* 예시

var floatValue: Float = 1234567890.1

let doubleValue: Double = 1234567890.1


// Flaot이 수용할 수 있는 범위를 넘어서서 Float에서는 정확도가 떨어짐

// Double은 수용할 수 있는 범위의 수이기 때문에 정확하게 표현됨

print("floatvalue: \(floatValue)")

print("doubleValue : \(doubleValue)")


floatValue = 123456.1

// Float이 수용할 수 있는 범위의 값을 주면 정확하게 표현함

print(floatValue)









* 랜덤 숫자 만들기

Swift 4.2 부터 random() 메서드가 추가되어 랜덤으로 정수와 실수를 생성할 수 있음

() 안에 생성할 범위를 '...' 으로 표현


* 예시

print(Int.random(in: -10...10))

print(UInt.random(in: 0...10))

print(Double.random(in: -3.5...5.7))

print(Float.random(in: 2.3...7.5))









4. Character

문자

문자의 집합이 아닌 하나의 문자

Swift는 유니코드9를 지원해서 영어는 물론이고 유니코드에서 지원하는 모든 언어 및 특수기호 등을 사용할 수 있음

값 앞뒤에 큰 따옴표(" ")로 묶어줌

한글과 이모티콘을 코드에 사용할 수 있으나 권장 하지는 않음


* 예시 

let alphabetA: Character = "A"

print(alphabetA)


// Character 값에 유니코드 이모티콘 적용

let commandcharacter: Character = "🙏"

print(commandcharacter)


// 변수 이름을 한글로 하기

let 한글변수이름: Character = "ㄱ"

print("한글의 첫 자음: \(한글변수이름)")










5. String

문자열. 문자의 나열

Character와 마찬가지로 유니코드9를 사용

큰 따옴표로("  ") 묶어줌


- 빈 문자열 생성하기

이니셜라이저를 사용해서 빈 문자열 생성


* 예시

var emptyStr : String = String()


- 유니코드로 이모티콘 출력

문자열 변수나 상수에 "\u{유니코드}"를 대입하고 출력하면 해당 유니코드의 이모티콘이 출력


* 예시

let emoji1 : String = "\u{2665}"

let emoji2 : String = "\u{1F60A}"

print(emoji1)

print(emoji2)







- 문자열 다루기

문자열을 다루는 것은 까다로운 부분이지만 Swift에서는 문자열을 다루는 많은 메서드들과 프로퍼티들을 제공해서 문자열을 다루기 쉽도록 지원


* 문자열 결합

+ 나 += 연산자를 사용해서 문자열 결합

let hello : String = "Hello"

let world : String = "World"

print(hello + " " + world)


var hw : String = hello

hw += " "

hw += world

print(hw)

<실행결과>

Hello World

Hello World


* 문자열 추가 

.append() 메서드를 사용해서 문자열을 이어붙일 수 있음

var hw : String = String()

hw.append("Hello ")

hw.append("World")

print(hw)

<실행결과>

Hello World



* 연산자를 통한 문자열 비교

let hello : String = "Hello"

let world : String = "World"


var isSame : Bool = true


isSame = hello == "Hello"

print(isSame)

isSame = hello == "World"

print(isSame)

<실행결과>

true

false



* 메서드를 통한 저두어, 접미어 확인

.hasPrefix() : ()안의 문자열과 앞에서 부터 일치하는 지 확인

.hasSuffix() : () 안의 문자열과 뒤에서 부터 일치하는지 확인

.contains() : () 안의 문자가 포함되어있는지 확인 (( ) 안에 문자열 입력시 에러 발생)

let hello : String = "Hello"

let world : String = "World"


print(hello.hasPrefix("He"))

print(hello.hasPrefix("HE"))


print(world.hasSuffix("LD"))

print(world.hasSuffix("ld"))


print(hello.contains("l"))

print(hello.contains("r"))

<실행결과>

true

false

false

true

true

false



* 메서드를 통한 대소문자 변환

.uppercased() : 모든 문자열 대문자로 변환

.lowercased() : 모든 문자열 소문자로 변환

et hello : String = "Hello"

let world : String = "World"


print(hello.uppercased())

print(world.lowercased())

<실행결과>

HELLO

world



* 프로퍼티를 통한 빈 문자열 확인

.isEmpty : 해당 문자열이 빈 문자열인지 아닌지를 나타내는 프로퍼티 (빈 문자열이면 true)

let hello : String = "Hello"

let world : String = "World"


var isEmptyStr : Bool

let empty : String = ""


isEmptyStr = hello.isEmpty

print(isEmptyStr)

isEmptyStr = empty.isEmpty

print(isEmptyStr)

<실행결과>

false

true



* 프로퍼티를 이용해 문자열 길이 확인

.count : 문자열의 길이를 나타내는 프로퍼티

let hello : String = "Hello World"

let hi : String = "Hi!"

let empty : String = " "


print(hello.count)

print(hi.count)

print(empty.count)


<실행결과>

11

3

1




* 코드에서 여러줄의 문자열 사용하기

큰 따옴표 세개로 묶어줌

따옴표를 쓰고 한 줄 띄어서 내용을 쓰고 또 한 줄 띄어서 큰 따옴표 세개 작성

let hello : String = """

Hello World

Swift is great!

"""



print(hello)

<실행결과>

Hello World

Swift is great!




- 특수 문자

문자열 내에서 일정 기능을 하는 제어 문자

백슬래시(\) 에 특정한 문자를 조합해서 사용

문자열 내에서 특수문자를 사용하지 않으려면 문자열 앞뒤에 '#' 을 붙임(#"  "#)

\n : 줄바꾸기

\\ : 문자열 내에서 \ 사용

\" : 문자열 내에서 " 사용

\t : 탭 (Tab)

\0 : 문자열이 끝났음을 알림






6. Any, AnyObject, nil


- Any 

Swift에서 모든 데이터 타입을 사용할 수 있다는 뜻

변수나 상수의 데이터 타입이 Any로 지정 되었다면 해당 변수나 상수에는 어떤 종류의 데이터 타입도 할당될 수 있음

var someVar : Any = "Hello World"

print(someVar)

someVar = 100

print(someVar)

someVar = 3.141592

print(someVar)

<실행결과>

Hello World

100

3.141592


Any 타입으로 선언된 변수 someVar 에 문자열, 정수, 실수형 데이터가 대입 되었는데도 오류 없이 정상 작동



- AnyObject

Any 보다 조금 한정된 의미

클래스의 인스턴스에만 할당할 수 있음






- nil

'없음'을 나타내는 Swift 키워드

변수나 상수가 값이 없이 비어있음을 의미

변수나 상수가 nil인 경우 접근하면 에러 발생(잘못된 메모리 접근)






* Never

특정 함수의 반환 타입으로 사용될 수 있는 데이터 타입










댓글

이 블로그의 인기 게시물

Spring Boot 6. 계시판 프로젝트

Spring Boot 2. Maria 데이터베이스 & Spring Data JPA

Django 10. DB 연동