chapter 4
에서는 Go 언어의 변수가 가지는 속성과 사용법에 대해서 설명한다. 크게 아래의 주제로 설명한다.
변수는 말 그대로 변할 수 있는 값을 의미한다. 컴퓨터 프로그램은 값들을 메모리 위에 적재한 상태로 연산을 수행하는데, 이때 변수라는 단위로 메모리에 적재하여 연산을 수행한다.
그렇기 때문에 변수는 메모리 상에 어디에 위치해있는지(주소), 해당 주소에서 얼마만큼의 크기의 메모리 공간을 할당받아 차지하는지(크기)에 대한 정보를 가지고 있다.
프로그래머가 변수를 변경하고 사용(접근)하기 위해서는 아래와 같이 선제적으로 선언과 할당(기본값이라도) 과정이 필요하다.
var
키워드는 변수를 선언하기 위해서 표시하는 키워드다.a
, 'b' 는 변수의 이름을 나타내는 키워드로, 프로그래머는 변수이름으로 변수에 접근할 수있다.int
는 변수의 타입을 나타내는 키워드로, 이를 통해 변수의 타입과 변수의 크기를 알 수 있다.= 3
은 a
라는 int
타입 변수에 3이라는 값을 할당(초기화)하는 것을 의미한다. 또한, = a
와 같이 다른 변수를 통해 할당할 수 있다. 이때 모든 할당 과정에서 값을 복사하여 할당 하는 방식으로 값을 전달한다.:=
연산자는 선언 대입문
으로, var
과 타입
을 생략할 수 있다. 아래의 예시에서 c := 16.5
는 c라는 변수에 16.5를 할당한다. 할당된 값을 통해서 타입을 유추하는데, 만약 numeric literal이라면 정수는 int
실수는 float64
로 결정된다.var a int = 3
var b int = a
c := 16.5
변수는 앞서 언급한 것과 같이 여러 속성을 가지는데, 교재에서는 4가지 속성으로 설명한다.
변수의 타입은 매우 많은 종류가 있고, 크기도 다양하니 블로그를 참고하자
Go 언어는 강타입 언어중에서 최강 타입 언어다. 다른 언어에서 지원해주는 자동 타입 변환은 지원해주지않는다. 어찌보면, 프로그래머에게 더욱 강한 제약을 걸어 예기치 못한 오류를 방지하고 하는 것 같기도 하다. 물론 나는 강타입을 매우 선호하기 때문에, 맘에 드는 특징인 것 같다. 심지어 같은 정수를 나타내는 타입이라도 int
와 int64
끼리도 연산이 불가능하다.
만약 타입 변환을 수행하고 싶다면, int64(3.141592)
와 같이 타입 변환을 해주어야한다. 물론 타입 변환의 결과물은 여타 다른 프로그래밍 언어와 비슷하다. 여기서 주의할 점은 다른 프로그래밍 언어와 동일하게,
비교적 큰 크기의 타입을 작은 크기의 타입으로 변환했을 때 비트 단위에서 유실되는 비트들이 있을 수 있어 이 때는 조심해주어야한다.(ch4.ex4_5 참고)
숫자 표현은 크게 정수형과 실수형으로 나뉘는데, Go언어도 컴퓨터 위에서 동작하고, 컴퓨터는 이진수로 데이터를 처리한다는 점을 유의해야한다. 즉, 2의 보수
를 도입하여 음수와 양수를 구분하며, 소수점을 가지고 있는 실수
에서는 exponent
와 mantissa
를 통해 이진 비트로 표현 가능한 가장 근사치로 값을 표현한다는 것이다. 그렇기 때문에, 정수의 값이 같은지 비교하는 연산은 어떤상황에서도 정확한 결과를 반환하지만, 실수형 변수에서는 그렇지 않다. (근사치로 표현된 값을 비교하는 것이기 때문에) 그래서 실수형의 비교는 최대한 지양해야한다. 2의 보수를 통해 정수, 실수 표현하는 방법을 한번 따라해보면 절대 이러한 특징을 평생 잊어버리지 않을 수 있다.