1. 변수란?
변수는 빈번하게 사용되는 것이기에 매우 중요한 항목입니다.
쉽게 이야기 하자면 변수란 어떠한 값을 저장하는 이름을 지니는 공간 이라고 생각하면 되는데요
박스에 이름을 적어 놓았다고 생각하면 조금 이해하기가 쉬울 걸로 생각됩니다.
근데 이 박스가 정사각형이 있고 직사각형이 있고...
또 박스마다 크기가 제각각이듯
변수 또한 담을 수 있는 값의 종류가 다르고 그 값의 제한이 각각 다르게 되어 있습니다.
2. 변수의 종류
변수는 크게 전연벽수와 지역변수로 나뉘게 되는데요.
전역변수는 프로그램 내에서 어디서든 사용이 가능한 형태이고
지역변수는 함수 등 일정 영역에서만 사용할 수 있는 형태입니다.
(함수에 대한 건 나중에 자세히 다루도록 하겠습니다.)
3. 변수와 상수
변수는 값이 변하지 않아야 되는 것과 값이 변해도 상관이 없는 것으로 나눌 수가 있습니다.
변하는 것은 변수, 변하지 않는 것은 상수 라고 하는데요.
우리가 일상에서 사용하는 단위가 상수에 해당합니다.
예를 들면 1M가 100cm 라고 하는 것과 같이 딱 정해진 값이 있는 경우라고 할 수 있습니다.
변수의 선언에는 var을 사용하고 상수의 선언에는 let을 사용합니다.
만약 a 라는 변수를 let을 이용해 선언을 하고 나중에 값을 변경하려고 하면 에러가 발생하게 됩니다.
이 a는 처음 선언을 할 때 변경하지 않겠다고 선언을 했는데 왜 변경을 하냐? 라는 거죠
반면, 변수는 언제든 변경이 가능하니 자료형만 다르지 않는다면 에러가 나오거나 하진 않습니다.
4. 전역변수
전역변수는 앞에서 이야기 했듯 어디에서든 사용할 수 있는 변수 입니다.
이게 좋은 점이 뭐냐면
함수에서 불러와서 사용하게 될 경우 원래의 값이 변하는 거기 때문에 따로 전달을 해주거나 할 필요가 없다는 거죠.
이제 막 프로그래밍을 시작했을 경우에는 안 와닿을 수 있는데
이게 정말 편한 겁니다.
근데 문제는 좋다고 전역변수를 남발하면 프로그램 짜다가 꼬일 수가 있다는 거죠 ㅠㅠ
쨌든.
전역변수는 함수를 비롯한 어느곳에서도 사용할 수 있다 정도만 알고 계셔도 사용하는데 큰 문제는 없습니다.
5. 지역변수
지역변수는 함수 내에서 특정 동작을 하고 그 값을 다른 곳으로 전달해 주거나 그냥 없어지거나 하는 경우에 사용됩니다.
가령 A 와 B 의 값을 바꿔야 될 경우
A와 B를 전역변수로 선언을 하고
함수에서 temp라는 변수를 지역변수로 선언을 했다고 하겠습니다.
A의 값이 10 이고 B의 값이 20 인 상태에서 서로 바꾼다고 할 때
A = B
B = A
요런 식으로는 안 되겠죠.
둘 중 하나의 값을 다른 곳에 임시로 저장을 해 둬야 되는 상황인데
temp = A
A = B
B = temp
요렇게 하게 되면
A = 20 이 되고 B = 10 이 됩니다.
이걸 swap라고 하는데요. OS에서 중요하게 생각하는 스택과도 관련이 있는 내용이긴 합니다.
지역 변수 설명하려다 다른 걸 설명하게 되어 버린 거 같긴 한데
여기서 보셔야 될 건 temp라는 지역변수는 특정 상황에서만 잠깐 쓰이고 사라지는 변수다 정도면 됩니다.
6. 전역변수와 지역변수의 사용에 따른 변화 예제
소스코드 내에
전역변수 a, b, c 가 있습니다.
그리고 임의로 만들어낸 함수가 있고 그 안에 지역변수 b 라는 변수가 있습니다.
전역변수와 지역변수의 이름이 같은 게 있는 상황이지요.
이 경우에 어떻게 처리가 될지에 대한 부분을 이야기 하고자 합니다.
Xcode를 실행하고 맥os용으로 command line 을 만든 다음
import Foundation
var a = 12
valtest()
print("전역 변수 a : \(a)")
func valtest(){
var a = 11
print("지역 변수 a : \(a)")
}
요렇게만 입력해 보세요.
그리고 실행을 해보면
요런 결과가 나옵니다.
분명 함수를 통해 a의 값을 11로 변경을 했는데도 전역변수였던 a의 값은 12인 그대로가 되는 거죠.
이제 다음 코드를 입력한 후 다시 실행해 보세요.
import Foundation
var a = 12
valtest()
print("전역 변수 a : \(a)")
func valtest(){
let b: Int = 20
a = b
print("함수 내 a : \(a)")
}
바뀐 부분이 보이시나요?
함수 내에서 a 라는 변수를 따로 선언하지 않고 그냥 a = b 이라고 지정을 했습니다.
물론 b의 값은 20이라고 그 전에 선언을 해뒀고요.
이 경우에 결과는...?
보시다시피
함수라는 영역 에서 값을 변경한 것임에도 a라는 전역변수의 값이 변경이 된 것을 확인 할 수 있습니다.
전역변수와 지역변수에 대해 알고 있는 내용에 대해서 자세히 설명을 했다고 생각하는데 잘 전달이 되었을지 모르겠네요.
보시고 잘못되었거나 궁금하신 게 있으시면 댓글 달아 주시면 감사하겠습니다.
'Programming > Swift' 카테고리의 다른 글
[강좌] Swift 03. 변수의 종류(자료형) (0) | 2021.01.16 |
---|---|
[강좌] Swift - 01. Hello world 출력하기 (0) | 2021.01.14 |