letvar

상수의 값은 최초 지정 후 변경이 불가능하지만 변수는 다른 값으로 변경이 가능합니다.

상수와 변수는 사용하기 전에 반드시 선언이 되어야 하며,

상수는 let키워드와 함께 선언하고 변수는 var키워드와 함께 선언합니다.

//8월
let save = 500000 //저축은 매달 50만원 고정이므로 let 선언
var spend = 400000 //지출액은 매달 변동되므로 var 선언

//9월
save += 200000 [ ⛔️ Left side of mutating operator isn't mutable: 'save' is a 'let' constant ]
spend += 200000 //9월은 명절으로 지출이 20만원 늘었다 (변경가능!!)

코드에서 저장한 값이 변경되지 않는다면 항상 let키워드로 상수로 선언해야 합니다.

var는 오직 값을 저장하고 변경이 필요할 때 선언합니다.

타입 명시와 타입 추론의 차이

위와 같이 상수와 변수를 선언할 때 타입 명시(Type Annotation)를 할 수 있고 그렇지 않을 수 있습니다. 타입을 명시하지 않으면 swift는 컴파일 할때, 타입 추론을 사용하여 타입을 자동으로 추론합니다.

따라서 타입 어노테이션을 사용하면 컴파일러가 추론할 필요가 없으므로 성능적인 측면에서 이점이 있다고 합니다. 그러나 이 이점이 성능에 큰 영향을 미칠만큼 크지는 않습니다.

결론은 타입에 관한 결정은 개발자의 몫이며 가독성이 좋은 방향으로 사용하면 될것 같습니다.

<aside> 💡 타입 명시와 추론 사이의 성능 실험 블로그 링크

  1. https://jeong9216.tistory.com/518
  2. https://babbab2.tistory.com/153

</aside>

타입

var number : Int = 10
var plusnumber : UInt = 10 //양의 정수 타입. 64비트 양의 정수형

var sosu1 : Float = 3.14 //32비트 부동소수형
var sosu2 : Double = 3.14 //64비트 부동소수형

var chars : Character = "Hello World!!" //문자 타입
var spring : String = "Hello World!!" //문자열 타입 (추후 자세히 다룰 예정)

var choose : Bool = false //true나 false만 가능

var all : Any = 100 //스위프트의 모든 타입을 지칭
all = "아무거나 넣을 수 있다" //마지막에 String 타입의 값을 넣었더라도 Any는 String이 아니기 때문에 할당 x
all = spring //ERROR

var box : Array<Int> = Array<Int>()
var integers = [Int]() //축약 (추후 자세히 다룰 예정)

var anyDic : Dictionary<String, Any> = [String : Any]() //[key : value]타입
var anyDictionary = [String : Any]() //축약

var integerSet : Set<Int> = Set<Int>() //중복되지 않는 멤버가 순서 없이 존재하는 컬렉션 (축약형 없음)

Chapter 3 데이터 타입 기본