본문 바로가기
swift

스위프트 변수와 상수

by 승환파크 2024. 4. 3.

스위프트는 데이터가 저장되는 메모리 내 주소 공간을 개발자가 쉽게 인식하고 사용할 수 있도록 변수와 상수를 제공한다. 값을 저장한, 혹은 저장할 메모리 주소값을 이름으로 연결해 놓은 것을 변수와 상수라고 한다.

 

변수와 상수를 이용하여 메모리 주소에 해당하는 공간에서 손쉽게 값을 저장하거나 꺼낼 수 있다. 일반적으로 이같은 과정을 떠올리는 대신 변수와 상수에 값을 저장한다라고 생각해도 무방하다.

 

변수와 상수는 값을 저장할 수 있다는 공통점이 있지만, 상수는 한 번 저장된 값을 다른 값으로 변경할 수 없는 반면에 변수는 필요에 따라 저장된 값을 몇 번이라도 다른 값으로 변경할 수 있다. 그래서 변수에는 프로그램의 실행에 따라 변하는 값을 저장하고, 상수에는 변하지 않을 값을 저장한다.

 

하지만 변수라고 해서 아무 값이나 마음대로 저장할 수 있는 것은 아니다. 변수의 값을 변경할 때에는 처음 저장했던 값과 일치하는 타입이어야 한다. 즉 변수는 처음 입력한 값과 동일한 타입에 한해서만 값을 변경할 수 있다. 변경할 값이 처음 저장된 값과 일치하는 형태인지는 자료형을 배운 다음 알 수 있다.

 

상수가 필요한 이유는 성능이나 기타 다른 기술적 이점은 차치하고라도, 프로그래밍 소스 관리 목적상 변하지 않는 값은 상수에 저장하는 것이 훨씬 효율적이기 때문에 상수를 사용한다. 실수로 값이 변경되는 일도 막을 수 있고, 값의 성격이 명환히 분류되므로 관리하기에도 용이하기 때문이다.

 

어떤 경우에 변수를 사용하고 어떤 경우에 상수를 사용할지 기준이 모호하다면 일단 변수로 작성하면 된다. 스위프트에서는 변수에 한번 할당된 이후로 소스 코드에서 변경되지 않는 값이 있을 경우 이를 상수로 바꾸도록 컴파일러가 조언해준다. 이 조언에 따라 적절히 상수와 변수를 조절하다 보면 변수와 상수의 선택 기준에 대해 이해할 수 있다.

 

변수와 상수를 정의하는 방법

  • 변수를 선언할 때 : var + 변수명
  • 상수를 선언할 때 : let + 상수명

변수를 정의하는 방법은 아래와 같다.

var year = 1999 // 1. 정수형 변수
var message = "Hello, World" // 2. 문자열 변수

 

한번 정해진 타입은 바꿀 수 없어서, 정수형 타입의 변수에는 이후로도 정수만 대입할 수 있고, 문자열 타입의 변수에는 문자열만 대입할 수 있다. 스위프트에서 변수의 타입은 대부분 맨 처음에 대입된 값에 따라 정해지고, 이후로는 타입을 변경할 수는 없다.

 

var 키워드로 선언된 변수에 처음으로 값을 대입하는 과정을 초기화(Initialize)라고 한다. 예제에서 본 것처럼, 대입 연산자 '='를 이용하여 이루어진다. 스위프트는 대부분 초기화 과정에서 변수의 타입이 결정되는데, 이 때 활약하는 것이 바로 컴파일러이다. 컴파일러는 변수에 대입될 값을 검토하여 가장 적절한 타입을 추론하고 그에 맞는 메모리 공간을 확보한 다음, 여기에 값을 저장한다. 이때부터 변수를 사용할 수 있게된다.

 

상수에서도 별로 큰 차이는 없다. 선언 키워드가 var가 아니라 let이라는 점만 다를 뿐이다.

let birthYear = 1980 // 3. 정수형 상수
let welcomeMessage = "안녕하세요" // 4. 문자열 상수

 

변수와 상수의 이름 정의하기

스위프트에서 사용할 수 있는 변수와 상수의 이름은 그 범위가 무척 넓다. 영단어 대/소문자와 숫자 일부, 특수 문자 몇개만 허용하는 다른 언어에 비해 상당히 자유도가 높은 편에 속한다. 하지만 그럼에도 지켜야할 몇 가지 규칙이 존재한다.

1. 알파벳과 한글 자음 및 모음, 아라비아 숫자를 사용할 수 있으며, 특수 기호나 한자, 이미지용 바이너리코드까지 사용할 수 있다.

==> 하지만 영어, 숫자, 그리고 밑줄 이외에 다른 문자나 기호를 쓰지 않는다.

class Wedding {
	func add(man: Int, woman: Int) -> Int {
    	return man + woman
    }
}

var james = 3
var sofia = james + 5

var w = Wedding()
print(w.add(man: james, woman: sofia))

 

2. 연산자와 혼동할 수 있는 [+,-,*,/] 및 공백은 변수, 상수명에 사용할 수 없다. 단, _(언더바)는 사용할 수 있다.

// 연산자와 공백은 변수나 상수명에 들어가면 안 됨
var abc+t = "abc plus t" // 값을 더하는 연산자라서 사용 불가
var abc-t = "abc minus t" // 값을 빼는 연산자라서 사용 불가
var abc t = "abc space t" // 변수명이 어디까지인지 구분할 수 없어서 사용 불가

// 언더바는 예외적으로 사용 가능
var abc_t = "abc underbar t"

 

3. 스위프트에서 예약어나 키워드로 등록되어 있는 단어는 변수나 상수명에 사용할 수 없다. 단, 대소문자를 바꾸어 사용하는 것은 가능하다.

var class = 1			// (x), 'class'는 클래스 정의를 위한 키워드
var enum = 2			// (x), 'enum'은 열거형 정의를 위한 키워드
var struct = 3			// (x), 'struct'는 구조체 정의를 위한 키워드
var extension = 4		// (x), 'extension'은 확장을 위한 키워드
var protocol = 5		// (x), 'protocol'은 프로토콜 정의를 위한 키워드
var as = 6			// (x), 'as'는 타입 캐스팅을 위한 키워드

// cf) 허용되는 경우
var Class = 1			// (o)
var Enum = 2			// (o)
var Struct = 3			// (o)
var Extension = 4		// (o)
var Protocol = 5		// (o)
var As = 6			// (o)

 

4. 변수, 상수명의 첫 번째 자리에 숫자가 올 수 없다.

// 첫 번째 자리에는 숫자를 사용할 수 없음
var 1abc = 123 // (x)
var 2bcd = 345 // (x)

// 두 번쨰 자리부터는 숫자 사용 가능
var a123bc = 123
var b2cd = 345

'swift' 카테고리의 다른 글

스위프트 조건문  (0) 2024.04.06
스위프트 반복문  (1) 2024.04.05
스위프트 연산자  (1) 2024.04.03
스위프트 자료형  (1) 2024.04.03
스위프트 기초 문법  (0) 2024.04.02