본문 바로가기

swift 기본 문법

swift 변수, 상수(var, let), 타입 추론, 타입 어노테이션

반응형

iOS 개발을 공부한 분들이라면 모두 아시거나 보셨을 내용인 변수와 상수에 대해서 글을 적고자 합니다. 

 

한마디로 설명하자면 변수(var)는 값을 수정할 수 있고 상수(let)은 수정할 수 없습니다. 

swift는 상수 사용을 권장하고 있습니다. 때문에 다른 사람과 협업을 하고 있을 때, 변수(var)라면 '아 이 값은 어디선가 바뀌겠구나'

상수(let)라면 '바뀌지 않겠구나'라고 생각할 수 있습니다.

 

물론 저도 지금까지 개발을 하면서 그렇게까지 생각해서 변수, 상수를 지정해주진 않았습니다..! 때문에 반성하는 의미에서 공부를 좀 더 해보고자 합니다. 

 

먼저 스위프트(swift)는 정적인 프로그래밍 언어라고 합니다. 

 

여기서 정적인 프로그래밍 언어란? 

컴파일 시 변수, 상수의 타입을 결정하는 언어를 의미합니다. 

 

정적 프로그램의 장점

타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안전성이 높습니다. -> 대규모 프로그램 개발에 적합

컴파일 시 미리 타입을 결정하기 때문에 실행속도가 빠릅니다.

정적 프래그램의 단점

매번 코드 작성시 변수형을 결정해줘야하는 번거로움이 있습니다.

 

그렇다면 동적인 프로그래밍 언어란?

여기선 컴파일 시가 아닌, 런타임시 타입을 결정합니다.

 

동적 프로그램의 장점

런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 유연성이 높습니다.

정적 프로그램의 단점

실행 도중 변수에 예상치 못한 타입이 들어와 타입에러가 발생할 수 있습니다.

추가로)

컴파일타임은 컴퓨터가 인식할 수 있는 기계어 코드로 변환되어 실행 가능한 프로그램이 되는 과정

런타임은 컴파일 과정을 마친 프로그램이 사용자에 의해서 실행되어 지는 때는 의미

때문에 다음과 같이 런을 하지 않아도 그전에 에러를 이미 나타내줍니다. 

 

또한 말씀드린 것처럼 let은 수정할 수 없기 때문에 상수가 아닌 변수로 지정하라는 에러가 나타납니다.

 

 

 

위 이미지를 보면 age 상수는 타입에 대한 명시를 해주지 않았지만 에러를 발생시키지 않았습니다. 

왜냐하면 swift는 타입을 명시하지 않아도 선언과 동시에 초기화를 통해 타입을 추론하는 것을 말합니다. 

따라서 25를 보고 Int라는 것을 추론한 것을 볼 수 있습니다. 

 

타입추론

타입추론은 타입을 직접 명시하지 않아도 컴파일러가 초기화된 값을 보고 타입을 추론하는 것을 말합니다. 

 

그러면 타임추론과 함께 등장하는 단어는 바로 타입 어노테이션입니다.

 

타입 어노테이션

변수나 상수를 선언할 때 그 타입을 명시적으로 선언함으로써 어떤 타입의 값이 저장될 것인지를 컴파일러에 알려주는 것을 말합니다.

 

방금은 타입을 지정해주지 않더라도 자동으로 타입 추론을 통해서 타입을 얻을 수 있었다. 그러면 타입 어노테이션은 필요없는게 아닐까?

 

하지만 다음과 같은 경우에는 타입을 지정해 줄 필요가 있습니다.. 

같은 값을 지정해 주었지만 다른 타입으로 나타나게 되었습니다. 

타입 추론을 하면 자료형을 유추할 때 더 큰 값으로 타입추론을 해버립니다.. 

 

(Float보다는 Double, Character 보다는 String 이 더 넓은 범위이다.)

 

 

타입 추론을 하게 되면 타입을 지정해주는 것보다 시간이 좀 더 걸린다고 합니다.

개발을 하다보면 타입추론을 사용할 때가 있지만 좀 더 명시적으로 확인하기 위해서는 타입을 지정해주는 것이 좋을 것 같습니다!

 

 

 

 

 

 

https://babbab2.tistory.com/14

 

Swift) 타입 추론(Type Inference) vs 타입 어노테이션(Type Annotation)

안녕하세여 소드립니다 🌼 맨날 글자티콘 썼는데 이모지로 발전함 ㅎㅎ 쨌든 지금껏 좀 무거운 내용?의 포스팅을 다뤘다면 당분간은 Swift 포스팅을 하며 전환을 해보고자 합니다~~~ 첫 포스팅의

babbab2.tistory.com

 

반응형