Go언어를 더 잘 이해하고 예기치 못한 버그의 발생없이 프로그래밍을 하기위해서는 변수를 잘 알아야 한다.
변수의 4가지 속성
1️⃣ 이름
프로그래머는 이름을 통하여 값이 저장된 메모리 공간에 쉽게 접근할 수 있다.
2️⃣ 값
변수가 가리키는 메모리 공간에 저장된 값.
3️⃣ 주소
변수가 저장된 메모리 공간의 시작 주소.
4️⃣ 타입
변숫값의 형태.
변수명 규칙
- 문자, _, 숫자 사용가능
- 첫 글자는 반드시 문자 혹은 _로 시작해야함.
- _를 제외한 다른 특수문자를 포함할 수 없다.
권장사항
반드시 지켜야 하는것은 아님.
- 변수명은 영문자를 제외한 다른 언어의 문자를 사용하지 않는다.
- 여러 단어가 이어지면 두 번째 단어부터는 대문자로 시작한다.
- firstName, doMagic
- 변수명은 되도록이면 짧게한다.
- 잠시 사용하는 로컬변수는 한 글자로 한다.
- 밑줄 _ (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)을 해줘야 한다.
- 원하는 타입명을 적고 ()로 변화시키고 싶은 변수를 묶어준다.
형변환시 유의사항
- 실수 타입에서 정수 타입으로 형변환 시 소수점 이하 숫자가 없어진다.
- 큰 범위를 갖는 타입에서 작은 범위를 갖는 타입으로 형 변환 시 값이 달라질 수 있다.
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 |