2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

Swift 변수와 상수

2024. 2. 18. 20:30ㆍIOS/Swift
SMALL

Swift는 데이터가 저장되는 메모리 내 주소 공간을

개발자가 쉽게 인식하고 사용할 수 있도록 변수와 상수를 제공합니다.

값을 저장한, 혹은 저장할 메모리 주소값을 이름으로 연결해 놓은 것을 변수와 상수라고 합니다.

우리는 변수와 상수를 이용하여 메모리 주소에 해당하는 공간에

손쉽게 값을 저장하거나 꺼낼 수 있습니다.

일반적으로 이같은 과정을 떠올리는 대신

변수와 상수에 값을 저장한다라고 생각해도 무방합니다.

 

변수와 상수는 값을 저장할 수 있다는 공통점이 있지만,

상수는 한 번 저장된 값을 다른 값으로 변경할 수 없는 반면에

변수는 필요에 따라 저장된 값을 몇 번이라도 다른 값으로 변경할 수 있습니다.

그래서

변수에는 프로그램의 실행에 따라 변하는 값을 저장하고,

상수에는 변하지 않을 값을 저장합니다.

하지만

변수라고 해서 아무 값이나 마음대로 저장할 수 있는 것은 아닙니다.

변수의 값을 변경할 때에는 처음 저장했던 값과 일치하는 타입이어야 합니다.

즉, 변수는 처음 입력한 값과 동일한 타입에 한해서만 값을 변경할 수 있습니다.

변경할 값이 처음 저장된 값과 일치하는 형태인지는

곧이어 자료형을 배우고 나면 알게 될 겁니다.

이쯤에서 상수가 왜 필요한지에 대해

궁금한 독자들이 있을지도 모르겠습니다.

"변수에 값을 저장해 놓고 변경하지 않으면 그만이지,

왜 굳이 상수가 있어야 하냐?" 하고 말이죠.

 

하지만

성능이나 기타 다른 기술적 이점은 차치하고라도,

프로그래밍 소스 관리 목적상 변하지 않는 값은

상수에 저장하는 것이 훨씬 효율적입니다.

 

실수로 값이 변경되는 일도 막을 수 있고

값의 성격이 명확히 분류되므로 관리하기에도

용이하기 때문입니다.

어떤 경우에 변수를 사용하고 어떤 경우에 상수를 사용할지

기준이 모호하다면 일단 변수로 작성하면 됩니다.

스위프트에서는 변수에 한번 할당된 이후로 소스 코드에서

변경되지 않은 값이 있을 경우 이를 상수로 바꾸도록 컴파일러가 조언해줍니다.

이 조언에 따라 적절히 상수와 변수를 조절하다 보면

변수와 상수의 선택 기준에 대해 이해하게 될 것입니다.


변수와 상수를 정의하는 방법으로는 다음과 같습니다.

* 변수를 선언할 때 : 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))

연산자와 혼동할 수 있는 [+,-,*,/] 및 공백은 변수, 상수명에 사용할 수 없습니다.

단, _(언더바)는 사용할 수 있습니다.

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

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

스위프트에서 예약어나 키워드로 등록되어 있는 단어는 변수나 상수명에 사용할 수 없습니다.

단, 대소문자를 바꾸어 사용하는 것은 가능합니다.

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)

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

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

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

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

Swift 연산자  (0) 2024.02.18
Swift 자료형  (0) 2024.02.18
Swift 간단 기초 문법  (0) 2024.02.18
Swift 언어의 특징  (0) 2024.02.18
Swift 언어의 탄생과 배경  (0) 2024.02.18