[Go] #2.2 변수의 선언과 초기화
강의 링크 : 한 눈에 끝내는 고랭 기초 #2 변수와 상수 - 변수의 선언과 초기화
2. 변수 선언과 초기화
이번엔 변수다.
Go
에서의 변수 사용법을 알아보자.
Go
에서의 변수 선언 방식은 다음과 같다.
var 변수이름 변수형
어떤 형의 값을 저장한 공간을 선언한다.
또 여타 언어들처럼 변수를 선언한 곳에서 바로 초기값을 설정할 수 있다.
Go
에서 변수를 선언할 때 가장 큰 특징은 Short Assignment Statement
라고 불리는 :=
이다. 이를 사용하면 별다른 형 선언 없이 타입 추론이 가능하다.
하지만 주의해야할 점은, 이 용법은 함수(func) 내에서만 사용이 가능하다.
따라서 함수 밖에서(전역 변수)는 꼭 var
키워드를 선언해줘야 한다.
샘플 코드를 보자.
var a int = 1
var b string = "Hello"
c := 1
d := "Hello"
자 보면 …
var
를 사용한 변수 선언은 마치 여타 다른 언어에서의 선언에서 그냥 var
이 붙고, 순서만 좀 바뀐 것으로 보인다.
그런데 :=
을 사용한 방식은 좀 새롭다.
c
는 1이라는 값의 int
자료형으로 자동 지정되고,
d
는 “Hello” 라는 값의 string
자료형으로 자동 지정된다.
나는 C++
에서의 auto
와 비슷한 것이라고 받아들였다.
그리고 중요 !!!!
Go
에서는 변수를 선언하고 초기값을 설정하지 않으면 Zero value
로 설정된다.
마치 C++
에서 전역 변수로 변수 생성시 0
이 들어가는 것처럼 !!
bool
타입은false
int
와 같은 숫자 타입은0
string
타입은""(빈 문자열)
이렇게 설정된다.
자 여기서 또 중요 !!!!
Go
언어에서는 선언만 하고 쓰지 않았다면 에러를 발생하며 컴파일에 실패한다.
이는 변수, 패키지, 함수 등 모든 선언에서 동일하게 적용된다.
무슨 개떡같은 소리인고 하니 …
Go
언어의 특징으로 간결하고 가독성이 좋고 코드가 짧다고 했다.
따라서 이렇게 메모리를 아무 이유없이 차지하는 변수들에 대해 굉장히 단호하다.
따라서 꼭 쓰이는 변수만 선언해야 하며, 값을 지울 때는 선언한 모든 부분을 지워야 한다.
샘플 코드를 보자.
package main
import "fmt"
var globalA = 5 //함수 밖에서는 'var' 키워드를 입력해야함.
// 꼭 형을 명시하지 않아도 됨
func main() {
var a string = "goorm"
fmt.Println(a)
var b int = 10
fmt.Println(b)
var d = true
fmt.Println(d)
var e int
fmt.Println(e)
f := "short"
fmt.Println(f)
fmt.Println(globalA)
}
- 실행 결과
예상한대로 잘 나온다.
여기서 변수와 별개로, 주석에 대해서 알고가자.
C
언어와 동일하다고 생각하면 된다.
- 한 줄 주석 :
//
- 모두 주석 :
/* */
다른 언어처럼 Go
언어도 동일한 형의 변수를 한 번에 여러개 선언 가능하다.
이떄 변수의 개수와 초기화하는 값의 개수가 동일해야한다.
만약 초기화하지 않는다면, 모든 값을 초기화 하지 않아야한다.
아래 샘플 코드를 보자.
package main
import "fmt"
func main() {
var a, b int = 10, 20
fmt.Println(a, b)
i, j, k := 1, 2, 3
fmt.Println(i, j, k)
var str1, str2 string = "Hello", "goorm"
fmt.Println(str1, str2)
}
- 실행 결과
잘 나온다.
아까 보았듯이, C
언어의 경우 int a
처럼 데이터 타입이 먼저 오는데 비해 Go
는 변수 이름이 먼저 오고 그 다음에 타입이 와서 좀 생소하다.
이러한 선언 방식에는 인간의 언어에 좀 더 가깝게 하기 위해서라는 의견이 있다는데 … 사실 이미 기존의 방식에 익숙해져서 아직은 그냥 헷갈리기만 한다.
var a string
을 풀어 쓰면 “Variable a is string” 이런 식으로 순서대로 읽을 수 있어서 편할 수 있을지도 ??