// 선언 방법
var name = "Swift"
var nubmer = 0
var valid = true
var x = 0.0, y= 0.0, z=0.0
// 새로운 값을 저장
name = "Steve"
print(name) // "Steve"
//다른 변수에 할당시
var anotherName = name
anotherNmae = "Daniel"
print(name, anotherName) // "Steve" "Daniel" name의 값은 변경되지 않는다.
변수와 상수변수변수를 만들때 변수를 선언한다고 말한다.
변수 선언 키워드는 var 옆에 이름으로 식별자(identify) 변수를 통해 값을 읽거나 새로운
값을 저장하는데 사용하고 다른 변수와 구분할때 쓰인다. 할당 연산자라고도 한다.
// 선언 방법
var name = "Swift"
var nubmer = 0
var valid = true
var x = 0.0, y= 0.0, z=0.0
상수는 변수와 문법적으로 유사하지만 값을 변경 할수 없다.
변수와 상수 모두 타입을 선언한 후에 다른 타입으로 변경할수 없다.
ex)
var number = 0
var number2 = 1
number = true // 에러
number = "Hello" // 에러
코드 작성시 상수를 더 많이 사용하는 이유
CamelCase로 작성하는 이유 - 코드의 가독성이 들어나고 코드 작성시 실수를 줄여준다.
UpperCamelCase
항상 모든 단어의 첫번째 문자가 대문자로 작성
Class, Structure, Enumeration,Extension,Protocol
lowerCamelCase
항상 첫번째 단어는 소문자이고 나머지 첫번째 단어는 대문자로 작성
Variable, Constant, Function, Property, Parameter, Method
종류 - Global Scope, Local Scope
Golbal Scope 는 {}밖에 있는 범위
Local Scope는 {}안에 있는 범위 다른 Scope 범위라면 이름을 중복하여 선언할수 있다.
Scope 규칙
1. 동일한 범위에 있는 변수와 상수에 접근이 가능하다.
2. 동일한 범위에서는 이전에 선언되어있는 변수와 상수에 접근할수 있다.
3. Local Scope에서는 상위 Scope이나 Gobal Scope에 있는 상수와 변수에 접근할수 있다.
4. 상위 Scope에서는 하위 Scope 범위의 변수나 상수에 접근할수 없다.
5. 변수와 상수는 {} 밖으로 벗어나면 라이프 사이클이 끝난다.
6. 서로다른 범위에 동인한 이름의 변수나 상수가 있다면 가장 가까운 범위에 저장된 값을 불러온다.
같은 범위의 Scope
1. #1 , #2는 Golbal Scope 그렇기때문에 #2에 g1은 컴파일 에러 발생
2. #3 , #5는 Local Scope
3. #4는 Local Scope
4. #7은 Local Scope
5. #8은 Local Scope
#1
let g1 = 123
print(g2) // g2가 아래에 선언 되지 않았기 떄문에 에러가 발생
func doSomething() {
#3
print(g1) // 123
print(g2) // Golbal Scope에 선언되어있기 때문에 접근 가능
let local1 = 123
let g1 = 1023
print(g1) // 1023
// 다른 Scope을 가지고 있기떄문에 같은 이름이여도 컴파일 에러가 발생하지 않는다.
// 가까운 g1 값인 1023을 출력해준다.
if true {
print(local1)
print(local2) // 선언되기 전에 접근했기 때문에 컴파일 에러
print(g1) // 1023
#4
let local3 = 789
}
#5
print(local3) // 하위 Scope에 있는 상수이기때문에 컴파일 에러 발생
let local2 = 456
}
#2
let g1 = 456
let g2 = 489
print(g1)
print(g2)
//여기서 g2를 선언후에 위의 print(g2)는 컴파일 에러는 생기지 않지만 올바른 코드는 아니다. 항상 선언후에 사용해야 한다.
struct Scope {
#6
print(g1)
print(g2)
// Golbal Scope에 선언되어있지만 컴파일 에러 발생 - 문법 규칙으로 인해 Declaration Scope이기 떄문에 맴버 선언이 와야한다. Class와 Struct에서 자세하게 확인 가능
func doSomething() {
#7
print(g1)
print(g2)
// 문제없이 접근 가능
}
}