본문 바로가기

Programming/Swift for Beginners

[Swift] 007 Data Type (자료형) - 1 for beginners


Swift는 선언된 변수의 타입을 자동으로 추론합니다. 변수가 Int 형인지 또는 Double 형인지 추가 정보를 입력하지 않아도 된다는 의미입니다. Swift는 등호 표시(=) 오른쪽에 무엇이 있는지 확인하는 것만으로도 변수나 상수의 타입을 추론합니다.

타입은 컴퓨터 언어가 값과 값을 저장하는 컨테이너를 분류하는 데 사용하는 구조입니다. 타입은 값, 변수 또는 상수의 특징을 분명하게 정의하여 애매 모호함을 없애고 코드에 명확성을 부여합니다. 타입은 변수나 상수를 각각의 값에 확실하게 할당합니다. Swift는 타입을 확실하게 인식하는 언어이며, 이 내용은 앞서 사용한 예제를 통해서도 확인할 수 있습니다.


아래 표는 Swift에서 사용되는 기본적인 타입을 나타냅니다. 원래 이보다 더 많은 타입이 있지만, 우선은 이 정도를 알아보도록 하겠습니다.

타 입특 징예 제
Bool참 또는 거짓 중 하나를 표현하는 이진법True, False
Int, Int32, Int64큰 수(분수 제외)를 표현하는데 32 또는 64비트 음수나 양수의 정수값 사용4, 543, -674837, 5745
Int8, Int16작은 수(분수 제외)를 표현하는데 8 또는 16비트 음수나 양수의 정수값 사용-23, 58, 145
UInt, UInt32, UInt64큰 수(분주 제외)를 표현하는데 32 또는 64비트 양수값 사용5, 132, 70, 10023
UInt8, UInt16작은 수(분수 제외)를 표현하는데 8 또는 16비트 양수값 사용35, 86, 254
Float, Double음수 또는 양수의 부동 소수점 또는 분수를 포함할 수도 있다311.542, -3002.5899, 17.0
Character단일 글자, 숫자, 또는 다른 부호를 큰 따옴표로 묶어서 표현"T", "K", "*", "3"
String일련의 문자를 큰 따옴표로 묶어서 표현"Fish", "Pigs", "New York"

1. Limit 알아보기

위의 표에 나타난 타입은 각각 최고치 및 최저치를 가지고 있습니다. 즉, 각각의 타입은 최저치보다 더 작지 않은 숫자 또는 최대치보다 더 크지 않은 수를 저장할 수 있습니다. 그 이유는 수치 타입은 비트를 대변하는 데 사용할 수 있는 비트가 유한하기 때문입니다. Swift는 편리하게 각각의 타입에 저장된 최댓값과 최솟값 정보를 얻을 수 있게 해줍니다.

.min 또는 .max 를 타입 이름의 마지막에 추가함으로써 최댓값 및 최솟값의 용량을 정의할 수 있습니다.

2. 타입을 바꿀 수 있을까?

타입이 값, 상수, 또는 변수의 고유한 특징을 가지고 있기 때문에 다른 타입끼리 상호작용할 때 어떤 규칙이 적용되는지 궁금할 경우가 있다. 앞 장에서 다룬 예제에서 Double형 변수를 Int형 변수로 할당하려고 했던 것이 있었습니다. 이 부분을 재기해 보겠습니다.

x의 값을 Int 형으로 y의 값을 Double형으로 할당했습니다. 

그리고 y의 값을 x에 할당하려고 시도했습니다.

그런데 y를 x 에 할당하려고 시도하니 에러가 발생했습니다.

그래서 y를 Int형으로 타입 변환을 해주었습니다.

이런 처리를 변환(casting or conversion)이라고 하고, 한 가지 타입의 값을 강제로 다른 타입의 값으로 할당하는 것을 말합니다. 컴퓨터 언어에서는 "타입 변환(Type Conversion)"으로도 알려져 있습니다. 모든 컴퓨터 언어가 타입 변환을 처리하는 규칙을 가지고 있으며 Swift도 예외 없이 규칙이 있습니다.


한 가지 전형적인 규칙은 타입 변환이 "유사한" 타입 사이에서만 이루어진다는 것입니다. C 언어처럼 유명한 프로그래밍 언어는 Int 형을 Double 형으로 또는 Double 형을 Int 형으로 변환할 수 있습니다. C 언어에서는 정수형 및 Double 형이 모두 수치 타입이기 때문에 그렇습니다. 그러나 타입이 근본적으로 다르므로 정수를 문자열로 강제로 선언하는 것은 올바른 타입 변환이 아닙니다. 그러나 Swift는 이 부분에 있어서 조금 더 유연합니다.

변수 t 가 선언되었고 활식하레 Int 형인 숫자도 할당되었습니다. 또 다른 변수 s 는 정수형인 변수 t의 변환된 버전인 문자열형으로 선언되었습니다.

문자열을 Int형이나 심지어 Double 형으로 타입 변환시킬 수 있을까요?

예전 버전의 Swift에서는 아래 그림과 같이 타입 변환을 시도하면 에러 메시지를 출력하였습니다. 즉, Swift 언어로 수치 타입을 문자열 타입으로 변환하는 것은 가능하지만, 그 반대의 타입 변환은 허용하지 않았었습니다(past tense: 과거형이라는 얘기죠). 

그러나 Swift가 버전업 하면서 이런 에러는 나타나지 않고 타입형 뒤에 물음표 (?)가 붙어 있는 것을 알 수 있습니다. 이 물음표는 특별한 타입인 옵셔널(optional) 형임을 의미합니다. 과거에는 문자열을 정수형으로 바꾸는 메서드인 toInt() 를 사용하였는데, 이제는 이 메서드를 사용할 필요없이 그냥 옵셔널형태로 알아서(?) 자동 처리 해줍니다.