본글은 『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다.
변수
프로그램이란 데이터를 연산/조작하는 일이다.
비디오,소리,글자는 모두 데이터라고 할 수 있는데 컴퓨터에게는 숫자에 불가하다. 그 숫자들을 저장하는 것이 메모리이다.
메모리에는 각각 메모리 주소가 존재한다. 컴퓨터는 메모리 주소를 이용해 데이터에 접근할 수 있다.
따라서 사람이 코드로서 편하게 메모리에 접근하기위해서는 변수가 필요하다.
변수의 4가지 속성
var a int = 10
다음의 코드로 변수의 속성을 살펴보자면
이름 : var a int = 10 (변수가 a라는 이름을 가진다.)
값 : a의 메모리 공간에 10이라는 값을 가진다.
주소 : 성북구 ... 뭐 뭐뭐 실생활에선 이렇게 주소를 쓰는데 컴퓨터도 변수가 가리키는 곳의 위치가 어딘지 주소를 가진다.
타입 : 어떤 형태의 변수인가? 문자타입 숫자타입 등등이 있다. 각타입은 그 크기가 정해져 있다.
변수의 크기를 알 수 있게된다.
타입
숫자는 정수와 실수로 나뉜다.
unsigned int = 부호없는 정수다. (양수) = uint
integer = int = 부호있는 정수다.
float 은 실수다.
👌별칭들
byte = uint8 의 별칭이다.
rune = 문자 한개 (C언어의 char와 비슷한듯) int32의 별칭이다.
int : 32비트 컴퓨터면 int32 와 같고 64비트 컴퓨터는 int64이다.
uint : 마찬가지다
새로운 타입 만들 수 있다. type myInt int
이렇게 만들 수 있다.
그 외 타입
변수 선언법
var a int = 10 //data 값의 타입과 같아진다. 지금 같은 경우는 int 가 된다.
var a int
var a = 10
a:=10
a:= 10 (많이 사용함)은 var a = 10 과 동일한데 var를 축약한 코드다.
타입별 기본값
complex 복소수다. 허수 진수로이루어지면 허수와 진수는 각각 float타입이다
타입 변환
고는 최강 타입 언어이다.
연산의 각항목의 타입은 반드시 같아야한다.
var a int = 10
var b int = 20 a+b 가능
var b float64 = 20 a+b 불가
var a int =10
var b int16 = 20 a+b 불가
타입을 다르게 계산하려고 하면 go언어 자체에서 경고를 준다.
따라서 서로다른 타입끼리 계산을 하기 위해서는 타입 변환을 해주어야한다.
다음은 타입변환 예제이다.
package main
import "fmt"
func main() {
a := 3 //a는 int타입 변수 설정
var b float64 = 3.5
var c int = int(b) // 3.5 -> 3 로 변한다.
d := float64(a)*b //d = 3*3.5
var e int64 = 7
f:= a*int(e) //int 와 int64 도 연산불가 그냥 타입 다르면 다 안됨
fmt.Println(a,b,c,d,e,f)
}
값의 범위에 따라 변수를 담을 수 있는 그릇의 크기를 알 수 있다.
65535까지는 외워둘만하다고 하셨다.
타입 변환 주의 사항
큰타입에서 작은타입으로 변할 때 데이터가 달라질 수 있다.
tucker님은 비유를 통해서 설명하는데 큰그릇에 있던 내용물이 작은 그릇으로 이동하면
내용물이 넘쳐흐르는 것과 같은 원리이다.
예제를 살펴보자
package main
import "fmt"
func main() {
var a int16 = 3456 // a is int16type -2byte integer
var b int8 = int8(a) //int16 -> int8
//int8의 범위는 -128 ~ 127이고
// 3456이 127까지밖에 못담는 int8로 바뀌면서 숫자가 버려짐
fmt.Println(a,b) // 출력값 : 3456 -128
}
2진수의 숫자표현
실수는 부호비트 , 지수부(8비트) , 소수부 (23비트)로 이루어진다.
ex)
4.266663e+06 이런 식으로 출력이 된다. 소수부 * 지수부
만약 12345678이 소수부라고 한다면 소수부가 표현할 수 있는 수는 7자리가 한계이니
12345678중 8이 잘린형태로 출력이된다.
예제)
package main
import "fmt"
func main() {
var a float32 = 1234.523
var b float32 = 3456.123
var c float32 = a*b //실제계산값 4,266,663.334329
var d float32 = c*3 //실제계산값 12,799,990.002987
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
//c 의 실제값과 d의 실제값은 다르다. float32는 7개의 숫자만 표현해주기 때문이다.
go언어 출력값
//1234.523
//3456.123
//4.266663e+06
//1.2799989e+07
}
전역변수
중괄호에 포함 안된 변수들을 패키지 전역변수라고 한다.
package main
import "fmt"
var g int = 10 //패키지 전역변수
func main() {
var m int = 20
{
var s int = 50
fmt.Println(m,s,g)
} //중괄호를 벗어나면 s를 인식하지 못한다. 컴퓨터 메모리에서 없어지는 것!
m = s+20
//변수는 그 변수가 속한 중괄호에서만 살아있다. 이 코드에서는 s가 포함된 중괄호를 벗어났으니
//오류로 인식
}
Uploaded by Notion2Tistory v1.1.0