본문 바로가기
Golang/Study

chapter3(1) variable

by 윤원용 2022. 1. 19.

책에서는 주석과 fmt 패키지를 설명하지만 난 생략한다 ㅎㅎ...

 

Go에서 변수의 타입으론 크게 세 가지로 구분할 수 있다.

  • 수치형 (literal)
  • 참조형 (slice, map, channel)
  • 포인터형

수치형은 정수, 실수, 논리 값, 문자, 문자열과 같은 값을 저장하고 참조형은 Collection을 말하는 것 같다.

공부하면서 조금 놀란 부분이 있는데 go언어는 사용하지 않는 변수가 있으면 경고가 아닌 에러를 표출한다. 이런 강제적인 규제를 함으로써 컴파일 속도가 빠른 건가...?라고 생각이 들었다.

변수선언 시 꼭 사용!

 

변수의 정의 방법은 크게 두 개가 있다.

  1. 명시적(explicit) 변수 정의
    변수를 명시적으로 정의한다는 것은 해당 변수가 저장할 수치형 타입을 정한다는 것이다.
    var라는 예약어를 사용하고 변수명과 변수가 저장할 수치형 타입을 명시하는 구조를 갖는다.
    명시적 변수 선언
    java에서도 지역변수인 경우 선언과 동시에 값을 초기화시켜주도록 권장하는데 go 역시 변수 선언 시 값을 초기화를 안 해주면 경고를 발생시킨다.
    변수 선언 시 권장 사항
    var 예약어를 사용해 한번에 여러 개의 변수를 선언할 수 있는데 모두 같은 타입으로 할 필요는 없다.
  2. 묵시적(implicit) 변수 정의
    변수 선언 시 타입을 명시하지도 않고 var 예약어도 사용하지 않는다. 
    묵시적 변수 선언
    엄청 심플하지만 컴파일 내부적으론 엄청난 이록이 숨겨져 있다. 이러한 기능을 타입 추론이라 하고 var1에 1을 넣으면 컴파일 시점에 int 타입으로 자동 설정된다. 그래서 var1에 정수 말고 실수, 문자와 같은 다른 값을 대입하려고 하면 에러를 발생시킨다.
    정수형 변수에 실수를 대입
    주위 깊게 봐야 하는 부분은 = 연산자가 아닌 := 연산자이다. 본인이 이해한 바로는 := 연산자는 변수의 선언과 초기화를 동시에 하는 거고 = 연산자는 단순히 대입을 하는 것뿐이다. 그래서 묵시적으로 선언한 var1변수를 다시 := 연산자를 사용하여 = 연산자와 같은 연산을 하려고 하면 에러가 발생한다.
    묵시적 변수 선언은 명시적 변수 선언처럼 var 예약어를 이용한 다중 변수 선언은 없다.

오늘은 변수의 선언에 대해 알아봤는데 책에서는 묵시적(implicit) 선언을 사용을 권장한다. 이유는 프로그램 전역에서 복잡한 자료형 지정이 필요하다는 단점을 피할 수 있다고 하고 명시적(explicit) 선언은 프로그램의 무결성을 얻을 수 있다고 한다.

 

개인적으로 javascript 코딩할 때 타입 때문에 짜증 난 경우가 있었는데 java는 그럴 필요가 없어 편하다 생각했지만 go에서는 javascript보단 빡빡하게 java보단 유연하게 변수를 선언할 수 있을 것 같다.

 

다음 시간에는 자료형에 대해 포스트 하겠다.

20000~

'Golang > Study' 카테고리의 다른 글

chapter3(3) primitive type - uint and casting and overflow  (0) 2022.01.24
chapter3(2) primitive type - boolean and int  (0) 2022.01.23
chapter2(3) go test  (0) 2022.01.18
chapter2(2)  (0) 2022.01.18
chapter2(1)  (0) 2022.01.17