본문 바로가기

Apple/Swift

[Swift] 타입 명시와 타입 추론

해당 포스팅은 The Swift Programming Language (5.9.2) 버전으로 작성되었습니다.

 

 

 

 

안녕하세요! 마루입니다. 😬

 

벌써 1월 말이 다가오고 있습니다.

모두 새해에 계획한 일들은 잘 진행되고 있나요~?

저는 새해를 맞이해 블로그를 오픈하고, 열심히 포스팅하는 것을 목표로 삼았습니다!

 

개발이 처음이라 이것저것 머리에 집어넣기 바뿌지만,

그래도 뽜이팅 해서 블로그 열심히 써볼 거예요!

(포스팅 속도가 느리긴 하지만요...😅)

 

 

 

 

오늘의 주제는

타입 명시(Type Annotaion)

타입 추론(Type Inference)


입니다!!!!

 

 

타입(Type)이 뭐냐구요?

 

골든 리트리버, 푸들, 보더 콜리, 비숑은 강아지 타입이구요! 🐶

러시안블루, 먼치킨, 뱅갈, 페르시안은 고양이 타입이에요! 🐱

 

불고기, 잡채, 된장찌개, 비빔밥은 한식 타입이구요! 🇰🇷 

가라아게, 규동, 덴푸라, 나베는 일식 타입이에요! 🇯🇵

 

공통점이 있는 여러 개체들을 우리는 통틀어서 타입이라고 합니다.

그럼 Swift 에는 어떤 타입들이 있는지 궁금해지죠!?

 

1️⃣ Swift 타입의 종류

 

Swift에서는 정말 수많은 타입들이 존재하는데 모두 아래의 2가지 타입 안에 속하게 됩니다.

 

1️⃣ Named Type

(명명된 타입, 이름이 있는 타입)

2️⃣ Compound Type

(복합 타입, 이름이 없는 타입)

 

이름이 있고 없고? 복합 타입? 흠... 어려운걸 😧

지금 당장은 
'Swift 언어의 모든 타입들은 저렇게 크게 2가지로 분류할 수 있구나~'

라고 생각하시면 됩니다!

(당장 궁금하신 분들은 공식문서를 참고해 주세요: Tpye에 대한 공식 문서)

 

 

자, 그럼 우리가 이번에 알아볼 타입의 종류는 무엇이냐!!!!

바로 데이터에 대한 타입입니다. 🥳

 

저번 포스팅의 [상수와 변수]에서 상수와 변수에 할당하는 데이터들 기억나시나요?

그 데이터들에 대한 타입(= 데이터 타입)을 알아보는 거죠.

 

Swift에서 사용하는 대표적인 데이터 타입은 다음과 같습니다.

 

Int

Float
Double

Character
String
Bool

 

위 6가지 데이터 타입들은 다음 포스팅에 두 차례로 나눠 설명드릴 예정입니다~~

(참고로 위 6가지 데이터 타입은 Named Type의 Struct 타입에 속해요.)

오늘은 타입 명시와 타입 추론에 대해 설명하기 위해 Int (Integer) 데이터 타입만 아주 살짝 설명드릴게요! 

 

-42, 0, 7, 252 와 같이 0을 포함한 정수를 Swift에서는 Int 타입이라고 부른답니다.

생각보다 간단하지요?

 

그럼 이제 타입 명시와 타입 추론이 뭔지 알아봅시다. 🙌

 

 

2️⃣ 타입 명시(Type Annotaion)

 

이름처럼 타입을 정확하게 명시한다, 알려준다 라는 뜻입니다.

예제 코드를 보면 더 쉽게 이해가 실 겁니다!

var number = 0

위 코드에서 데이터(정수 0)에 대한 타입이 어디에도 명시되어 있지 않습니다.

var anotherNumber: Int = 1

위 코드는 데이터(정수 1)에 대한 타입이 Int라고 명시가 되어 있습니다.

이렇게 데이터를 할당할 때 그 데이터가 어떤 타입인지 명시하는 것

타입 명시라고 합니다.

 

타입 명시는 상수나 변수 바로 오른쪽에 콜론(:)을 써주고  한 칸 띄운 후 타입 이름을 적어주면 됩니다.

 

예제 코드를 하나 더 보겠습니다.

// 타입 명시: otherNumber라는 이름을 가진 변수는 Int 타입의 데이터를 받을 수 있다.
var otherNumber: Int

// 이미 위에서 otherNumber는 var라고 선언했기 때문에, 변수 이름에 할당만 하면 된다.
otherNumber = "숫자"   // 오류 발생. "Hello"는 Int 타입이 아니다.
otherNumber = 2         // 문제 없음. otherNumber에 정수 2 할당.

otherNumber는 Int 타입이라고 명시를 했기 때문에

otherNumber는 Int 외의 데이터 타입들을 할당받게 되면 오류가 발생합니다.

 

 

Apple의 공식 문서도 살펴볼까요?

You can provide a type annotation when you declare a constant or variable, to be clear about the kind of values the constant or variable can store. Write a type annotation by placing a colon after the constant or variable name, followed by a space, followed by the name of the type to use.

annotation: 주석

 

타입 명시의 이유와 방법을 설명해주고 있습니다.

 

...

혹시 눈치채신 분 계신가요?

타입 명시를 안 했던

var number = 0

이 예제 코드가 바로 타입 추론입니다.

 

 

3️⃣ 타입 추론(Type Inference)

 

 

타입 명시를 안 해줘도 오류가 없는 것 같은데 매 번 타입 명시를 해줘야 할까요???

대부분의 상황에서 Swift의 *컴파일러는 자동으로 타입을 추론합니다.

따라서 매 번 타입 명시를 안해줘도 되는 것이지요.

*컴파일러: 우리가 작성한 코드를 컴퓨터가 이해할 수 있는 기계어로 바꿔주는 번역기

 

var myMoney = 2700

myMoney 이름을 가진 변수는 2700이라는 정수(Int 데이터 타입)가 할당되어 있습니다.

그럼 컴파일러는 다음과 같이 추론을 합니다.

 

'2700은 명확한 Int이고, myMoney 이름을 가진 변수에 할당되어 있으니 myMoney 변수는 Int 타입만 할당할 수 있는 변수겠군'

 

타입 추론에 의해 타입 명시와 동일한 효과가 나타납니다.

// 타입 추론: myMoney는 2700이라는 Int를 최초로 할당받고 있기 때문에,
// 컴파일러에 의해 myMoney는 Int 데이터 타입만 할당받을 수 있는 변수라고 추론된다.
var myMoney = 2700

// 이미 위에서 myMoney는 var라고 선언했기 때문에, 변수 이름에 할당만 하면 된다.
myMoney = "텅장"       // 오류 발생.Int 타입 외의 타입은 할당할 수 없다.
myMoney = 2000          // 문제 없음. 같은 Int 타입이기 때문에.

myMoney는 Int 타입이라고 추론이 되었기 때문에

myMoney는 Int 외의 데이터 타입들을 할당받게 되면 오류가 발생합니다.

 

이것이 바로 타입 추론입니다!!!

 

 

Apple 공식 문서도 한 번 살펴보겠습니다.

If you don’t specify the type of value you need, Swift uses type inference to work out the appropriate type. Type inference enables a compiler to deduce the type of a particular expression automatically when it compiles your code, simply by examining the values you provide.

specify: 특정한 / appropriate: 적절한 / deduce: 추론하다.

 

만약 당신이 값의 타입을 특정하지 않는다면, Swift는 적절한 타입을 찾기 위해 타입 추론을 한다.

당신이 제공한 값을 간단하게 검사한 후 당신의 코드를 컴파일할 때,

특정 표현문의 타입을 추론하여 컴파일러가 타입 추론을 자동적으로 가능하게 한다.

 

설명이 좀 어렵긴 한데 Swift의 컴파일러가 우리의 코드를 보고

자동으로 타입을 추론해 준다라고 이해하면 됩니다! 😌

 

 

 

 

= = = = = = = = = =

 

타입 명시와 타입 추론을 알아보았습니다. 어떠신가요?

'Swift는 타입에 되게 엄격하구나' 라고 생각이 드신다면,

그것이 Apple이 의도한 바입니다! Apple은 이를 두고 이렇게 말합니다.

 

Swift is a type-safe language.

Swift는 타입에 안전한 언어이다.

 

타입을 엄격하게 감시해서, 안전하게 만들겠다는 것이지요.

왜냐구요?

개발 과정에서 빠르게 오류를 발견하고 수정하기 위함입니다. 😎

 

 

다음 포스팅은 [데이터 타입_숫자형]으로 찾아뵙겠습니다!!!!!

 

긴 글 읽어주셔서 감사합니다. (_ _)

 

 

오탈자나 설명의 틀린 부분, 추가적으로 해주고 싶으신 설명이 있으시다면

주저없이 댓글을 달아주세요. 🙏

 

'Apple > Swift' 카테고리의 다른 글

[Swift] 제너릭(Generic)  (1) 2024.03.02
[Swift] 데이터 타입_문자형  (1) 2024.02.15
[Swift] 데이터 타입_숫자형  (0) 2024.02.03
[Swift] 상수와 변수  (2) 2024.01.07
[Swift] 마루의 공부 방법  (0) 2024.01.06