[Go] #2.2 변수의 선언과 초기화

[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)
}
  • 실행 결과

1

예상한대로 잘 나온다.

여기서 변수와 별개로, 주석에 대해서 알고가자.
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)
}
  • 실행 결과

2

잘 나온다.

아까 보았듯이, C 언어의 경우 int a 처럼 데이터 타입이 먼저 오는데 비해 Go 는 변수 이름이 먼저 오고 그 다음에 타입이 와서 좀 생소하다.

이러한 선언 방식에는 인간의 언어에 좀 더 가깝게 하기 위해서라는 의견이 있다는데 … 사실 이미 기존의 방식에 익숙해져서 아직은 그냥 헷갈리기만 한다.

var a string 을 풀어 쓰면 “Variable a is string” 이런 식으로 순서대로 읽을 수 있어서 편할 수 있을지도 ??


© 2022. All rights reserved.