본문으로 바로가기

[Golang] 변수

category Programming/Go 2022. 10. 22. 19:16

Go언어를 더 잘 이해하고 예기치 못한 버그의 발생없이 프로그래밍을 하기위해서는 변수를 잘 알아야 한다.

변수의 4가지 속성

1️⃣ 이름

프로그래머는 이름을 통하여 값이 저장된 메모리 공간에 쉽게 접근할 수 있다.

2️⃣ 값

변수가 가리키는 메모리 공간에 저장된 값.

3️⃣ 주소

변수가 저장된 메모리 공간의 시작 주소.

4️⃣ 타입

변숫값의 형태.

변수명 규칙

  1. 문자, _, 숫자 사용가능
  2. 첫 글자는 반드시 문자 혹은 _로 시작해야함.
  3. _를 제외한 다른 특수문자를 포함할 수 없다.

권장사항

반드시 지켜야 하는것은 아님.

  1. 변수명은 영문자를 제외한 다른 언어의 문자를 사용하지 않는다.
  2. 여러 단어가 이어지면 두 번째 단어부터는 대문자로 시작한다.
    • firstName, doMagic
  3. 변수명은 되도록이면 짧게한다.
  4. 잠시 사용하는 로컬변수는 한 글자로 한다.
  5. 밑줄 _ (underscore)는 일반적으로 사용하지 않는다.

변수는 왜 타입을 가지고 있나요?

타입은 공간 크기를 가지고 있고, 타입이 있어야 컴퓨터가 데이터를 해석할 수 있다.

  • 만약 타입이 없으면 메모리 시작 주소는 알 수 있지만 크기를 알 수 없게 될 것이다.

Golang Type

  • 숫자
  • 불리언
  • 문자열
  • 배열
  • 슬라이스
  • 구조체
  • 포인터
  • 함수 타입
  • 인터페이스
  • 채널

다양한 변수선언 방법

package main

import "fmt"

func main() {
	var a int = 1
	var b int // 초기값 생략
	var c = 4 // 타입 생략
	d := 5 // 선언 대입문

	fmt.Println(a, b, c, d)
}

1️⃣ 초깃값 생략 var b int

초깃값을 생략하면 타입별 기본값으로 대체된다.

2️⃣ 타입 생략 var c = 4

우변의 타입으로 좌변(변수)의 타입이 지정된다.

  • 만약 우변이 숫자면 기본 타입으로 결정된다.
  • 정수는 int, 실수는 float64가 기본타입임.

3️⃣ 선언 대입문 :=

말 그대로 선언과 대입을 한꺼번에 하는 구문이다.

  • 초깃값이 생략되어있으므로 타입이 자동으로 지정된다.
c := 365 // int 타입으로 자동지정
s := "hello world" // string 타입으로 자동지정

형변환

같은 숫자값이라도 변수 타입이 다르면 연산이 되지 않으므로 형변환(type convention)을 해줘야 한다.

  • 원하는 타입명을 적고 ()로 변화시키고 싶은 변수를 묶어준다.

형변환시 유의사항

  1. 실수 타입에서 정수 타입으로 형변환 시 소수점 이하 숫자가 없어진다.
  2. 큰 범위를 갖는 타입에서 작은 범위를 갖는 타입으로 형 변환 시 값이 달라질 수 있다.
package main

import "fmt"

func main() {
	var a int32 = 360
	var b int8 = int8(a)

	fmt.Println(b)
}

---
104

변수 a 값인 360을 2진수로 변환하면 101101000 이고 int8은 1 Byte 범위(-128 ~ 127)만 표현할 수 있기 때문에 마지막 1 Byte 값만 남고 나머지가 사라져서 1101000만 인식하게 되고 10진수로 변환 시 104가 출력이 된다.

실수의 표현

Golang은 실수를 표현하는데 IEEE-754 표준을 (부동소수점 방식) 따라서 실수를 표현한다.

단정도의 부호부, 지수부, 가수부

  • 4바이트 실수에서는(단정도) 제일 왼쪽 1비트가 부호비트, 그 뒤 8비트는 지수부, 나머지 23비트는 소수부를 나타낸다.

소수부 비트수가 정해져 있기 때문에 모든 실수를 표현할 수 없고 한계가 있다.

 

타입 최솟값 최대값 소수부
float32 1.175494351e-38 3.402823466e38 7자리
float64 2.2250738585072014e-308 1.7976931348623158e308 15자리
  • 그래서 Go 언어에서는 실숫값을 표현할 때 정확한 값이 아닌 타입이 허용하는 범위에서 가장 가까운 근삿값으로 표현하게 된다.

'Programming > Go' 카테고리의 다른 글

[Golang] 함수 (Function)  (1) 2022.10.29
[Golang] 연산자 (Operator)  (0) 2022.10.29
[Golang] 표준 입출력  (0) 2022.10.23
[Golang] 코드 실행과정  (0) 2022.10.17
[Golang] Go는 어떤 언어?  (1) 2022.09.23