Go 언어 프로그래밍 - 변수
변수
- 수학 : 변하는 수
- 컴퓨터 : 값을 저장하는 메모리 공간을 가리키는 이름
컴퓨터에서 값을 저장하는 위치는 하드디스크(비휘발성)와 메모리(휘발성)이다.
프로그램이란 데이터를 연산/조작 하는 일로써, 이에 필요한 것이 변수이다.
CPU가 변수를 이용하여 계산을 하고 이 작업을 메모리가 진행하여 프로그램이 실행된다.
ex4.1.go
package main
import "fmt" //fmt 라는 패키지를 가져오겠다.
func main() {
var a int = 10
var msg string = "Hello Variable"
a = 20
msg = "Good Morning!"
fmt.Println(a, msg)
}
var
variable의 약자이다. 변수를 선언하는 것이다.
var 변수명 변수타입 = 실제 값
위와 같이 변수를 선언하여 사용할 수 있다.
빈 메모리 공간에 선언한 변수가 들어갈 수 있는 공간을 가르킨다.
그리고 그 해당 값에 실제 선언한 값을 삽입한다.
선언한 변수는 실제 값이 있는 위치를 가르키고, 메모리 공간에는 실제 값이 들어간다.
변수의 4가지 속성
이름
var a int =10
위의 경우 a가 변수의 이름이 된다.
값
a가 가르키는 위치에 실제 있는 값, 10을 의미한다.
주소
변수가 가르키는 곳이다. 변수는 주소 값을 갖고있다. 주소 값은 숫자로 되어있다.
주소는 변수 값의 시작점을 뜻한다.
타입
변수가 가르키고 있는 타입이 무엇인지를 의미한다. 대표적으로 정수, 실수, 문자열 등이 있다.
각 타입을 사이즈를 가지고 있다. 즉 우리가 타입을 안다면 해당 변수의 사이즈를 알 수 있다.
설명 | 타입 | 기본값 |
unsigned(부호 X) 정수타입 | uint8(8bytes), uint16(16bytes), uint32(32bytes), uint64(64bytes) | 0 |
정수타입 | int8(8bytes), int16(16bytes), int 32(32bytes), int64(64bytes) | 0 |
실수타입 | float32(32bytes), float64(64bytes) | 0.0 |
기타 숫자타입 | byte(부호 X, 별칭타입), rune(문자 1개, UTF-8 = 1~3bytes = int32 ==4bytes, 별칭타입), int(사이즈가 플랫폼에 따라 달라진다. 32/64bit), uint(사이즈가 플랫폼에 따라 달라진다. 32/64bit) | |
참 거짓 | bool(true/false) | false |
문자열 | string | "" (빈문자열) |
그외 타입 | 배열, 슬라이스, 구조체, 포인터, 함수타입, 맵, 인터페이스, 채널 | nil(정의되지 않은 메모리 주소를 나타내는 Go 키워드) |
별칭타입 | rune, byte 등 특정 타입에 대해 별칭이 주어진 것, 사용자에 따라 별칭타입을 선언하여 사용할 수 있다. |
변수 선언법
var a int = 10
var a int //값이 없이 변수만 선언
var a = 10 //초기값을 토대로 타입이 선언
a := 10 //초기값을 토대로 타입 선언 + 선언대입문(:=)을 활용하여 var 선언을 축소
ex4.3.go
package main
import "fmt"
func main() {
var a int = 3
var b int
var c = 4
d := 5
var e = "Hello"
f := 3.14
fmt.Println(a, b, c, d, e, f)
}
go mod init ex4.3
go build
3 0 4 5 Hello 3.14
위와 같이 출력된다.
타입변환
Go 언어는 강타입 언어이다. 타입이 매우 중요하다.
연산의 각 항목의 타입은 반드시 같아야 한다.
타입이 상이하지만 연산이 필요한 경우, 타입을 변환하여 연산을 진행해야한다.
package main
import "fmt"
func main(){
a := 3
var b float64 = 3.14
var c int = b
d := a * b
var e int64 = 7
f := a * e
}
위의 경우, 같은 정수이더라도 타입이 다르면 오류가 생긴다.
즉, 타입 변환이 필요하다.
package main
import "fmt"
func main() {
a := 3 // int 64 bit = int64
var b float64 = 3.5
var c int = int(b)
d := float64(a) * b
var e int64 = 7
f := a * int(e)
fmt.Println(a, b, c, d, e, f)
}
타입변환은 Go에서 허용하는 한에 위와같이 변환 될 수 있다.
String -> int
int -> string 은 위와같이 진행되지 않는다.
참고
Tucker의 Go언어 프로그래밍 - Go가 온당 1~3장
https://www.youtube.com/watch?v=g4PyJ10CSr0&list=PLy-g2fnSzUTBHwuXkWQ834QHDZwLx6v6j