Swift

[Swift] 변수와 상수, 타입(Type), 타입 어노테이션, 타입 추론

띵지니어 2023. 7. 5. 22:20

 

■ 변수 (variables)

: 변할 수 있는 데이터를 담을 수 있는 공간 (mutable)

선언방식 : var 변수이름: 타입 = 값

var greeting: String = "Hello, playground"
greeting = "Hi Swift" // 값이 변할 수 있음
print(greeting)

// Hi Swift
Swift의 변수 이름은 camelCase사용 합니다.

 

상수 (constant)

: 변할 수 없는 데이터를 담을 수 있는 공간 (immutable)

선언방식 : let 변수이름: 타입 = 값

let myConst: Int = 5
// myConst = 7 // 주석 해제시 컴파일 에러⭐️
print(myConst)
// 5

 

단 상수와 변수를 선언과 동시에 초기화할 경우 아래와 같이 문법을 적용해도 좋습니다.

이 경우 타입 추론이 될 텐데, 타입 추론은 문자열 문단 아래에서 바로 다루고 있습니다!!

let name = "띵진"
var height = 175.0

 

 

선언된 값을 문자열 안에서 출력하기 (String interpolation)

1. \() 사용하기 , 파이썬의 f-string 과 비슷 합니다.

2. + operator 사용 하기

var greeting: String = "Hello, playground"
let myConst: Int = 5
print("선언된 변수는 \(greeting) 입니다.")
print("선언된 상수는 \(myConst) 입니다.")

// 선언된 변수는 Hello, playground 입니다.
// 선언된 상수는 5 입니다.

var name = "Thingjin"
"Your name is " + name // Your name is Thingjin

 

    Swift에서의 Semicolon 사용

let cat = "🐱"; print(cat)
// "🐱"

 


 

 

Swift의 기본 타입(Type) 의 종류

let minValue = Int32.min
let maxValue = Int32.max
print("Int32 의 범위는 \(minValue) ~ \(maxValue) 입니다.")

// Int32 의 범위는 -2147483648 ~ 2147483647 입니다.

 

    □ + 추가 UInt (Unsiged Int)

    64비트 플랫폼에서 UInt는 UInt64와 크기가 같습니다.

let maxValue = UInt64.max
print("64비트 UInt 의 최댓값은 \(maxValue) 입니다.")

// 64비트 UInt 의 최댓값은 18446744073709551615 입니다.

 

 

Type Safety and Type Inference

 

Swift는 Type Safety 한 언어이다.

Type Safety
: 코드에서 사용할 수 있는 값의 유형에 대해 명확하게 알려줍니다

따라서 타입 추론(Type Inference) 이 가능하다.

 

1. Type Inference ( 타입 추론 )

let typeInference = 123

type(of: typeInference)
// typeInference is inferred to be of type Int

let pi = 3.14159

type(of: pi)
// pi is inferred to be of type Double
⭐️ type(of: T)
: 타입을 확인하고 싶을때 사용

Swift가 타입을 추론하여 해당 자료형을 유추하게 됩니다.
좀 더 큰 범위의 자료형으로 추론하게 되는데 예를 들면 17.0 은 Float가 아니라 Double형으로 추론을 하고
"A"라는 문자도 Char가 아닌 String으로 추론을 하게 됩니다.

2. Type Annotation ( 타입 어노테이션)

타입 어노테이션은 변수 선언만 해놓고, 네트워크 통신 같은 이후에 변수 할당되는 경우에 사용 하게 됩니다.
즉 초기값을 정해두지 않고 선언만 할때 유용합니다.

또한 타입 추론보다, 상대적으로 시간도 빠르고 정확하게 자료형을 구분 할 수 있습니다.

let typeAnnotation: String = "HI" // Type Annotation
type(of: typeAnnotation)

// typeAnnotation is inferred to be of type String

 

3. Type Safety

: 컴파일러가 타입 추론을 Int로 검사하였기 때문에 Double 타입인 3.14는 할당되지 않습니다 ‼️

var typeSafety = 12
typeSafety = 3.14

// ERROR
// Cannot assign value of type 'Double' to type 'Int'

 

 

 

■ Type aliases

: 외부 소스에서 특정 크기의 데이터로 작업할 때와 같이 상황에 더 적합한 이름으로 기존 유형을 참조하려는 경우에 유용합니다.
  기존 유형의 대체 이름을 정의합니다. typealias 키워드로 typealias 을 정의합니다

typealias AudioSample = UInt16 // typealias

var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound is now 0