Search

Golang - 4장

생성일
2024/08/13 14:29
Category
Study&Language
태그
Golang

변수

프로그래밍에서 변수는 값을 저장하는 메모리 공간을 가리키는 이름
컴퓨터 입장에서 프로그램은 “메모리에 있는 데이터를 언제 어떻게 변경할지를 나타낸 문서”
package main import "fmt" func main() { var a int = 10 var msg string = "Hello Var" a = 20 msg = "Good Morning" fmt.Println(msg, a) }
Go
복사
1.
텍스트 입출력 하는 내장 패키지 fmt 임포트
2.
a, msg 변수 선언
3.
a=20, msg=Good Mornig 으로 변수 값 변경

변수 선언

변수를 사용하려면 먼저 변수를 선언한다.
변수 선언은 컴퓨터에게 값을 저장할 공간 생성을 위한 명령을 내리는데 이것을 메모리 할당이라고 한다.
var a init = 10
Go
복사
package main import "fmt" func main() { var minimumWage int = 10 var workingHour int = 20 var income int = minimumWage * workingHour fmt.Println(minimumWage, workingHour, income) }
Go
복사
./ex4.2 ─╯ 10 20 200
Go
복사

변수의 4가지 속성

이름 : 프로그래머는 이름을 통해 값이 저장된 메모리 공간에 쉽게 접근할 수 있다.
값 : 변수가 가리키는 메모리 공간에 저장된 값이다.
주소 : 변수가 저장된 메모리 공간의 시작 주소를 말한다.
타입 : 변수값의 형태를 말한다. 정수, 실수, 문자열 등 다양한 타입이 있다. 자료형, 데이터 타입이라고 한다.

변수 이름

변수 이름을 변수명이라고 한다.
변수명을 사용해서 변수값이 저장된 메모리 공간에 접근하고 수정할 수 있다.
Go 언어에서 변수명을 만들때는 아래 규칙을 따라야 한다.
변수명은 문자, -, 숫자를 사용해 만들 수 있지만 첫 글자는 반드시 문자나 _로 시작해야 한다 (한글, 한문도 가능)
** abc, a123, abc, 하나, _둘
** 123, 1abc, %abcd
_를 제외한 다른 특수문자(space 포함) 를 포함할 수 없다.
** ab_cd, abc_, _abc
** ab!cd, ac$dc, 하나 둘, [[haha]]
반드시 지켜야 하는 건 아니지만, 아래와 같은 권장 사항이 있다.
변수명은 영문자를 제외한 다른 언어의 문자를 사용하지 않는다.
** 하나, 둘 같은 한글이나 한자는 쓰지 않는다. ~> ?
변수명에 여러 단어가 이어지면 두 번째 단어부터는 대문자로 시작한다.
** firstName, doMagic
** first_name, do_Magic
변수명은 되도록 짧게 한다. 로컬 변수는 한 글자를 권장한다.
밑줄 _은 일반적으로 사용하지 않는다.

파이썬의 변수

변수 타입

1.
타입은 공간 크기를 나타낸다.
변수는 메모리 주소를 가리킨다.
메모리 주소는 값이 있는 메모리 시작 주소만 알려준다.
크기를 알아야지 해당 메모리 주소에서 얼만큼 읽을지 결정할 수 있다.
타입을 알면 크기를 알 수 있다.
2.
타입을 알아야 컴퓨터가 데이터를 해석할 수 있다.
컴퓨터에 2진수 1000 0000 값은 uint8 타입으로 128, int8 타입으로 -128. float32 타입으로 1.79366203434e-43 이다.
Go 언어는 숫자, 불리언, 문자열, 배열, 슬라이스, 구조체, 포인터, 함수, 인터페잇, 맵, 채널 등의 타입을 제공한다.

변수 선언의 다른 형태

package main import "fmt" func main() { var a int = 3 var b int var c = 4 d := 5 fmt.Println(a, b, c, d) }
Go
복사
./ex4.2 10 20 200
Go
복사

타입별 기본값

타입
기본값
모든 정수 타입
0
모든 실수 타입
0.0
불리언
false
문자열
** (빈 문자열)
그외
nil

선언 대입문 :=

선언 대입문이란 선언과 대입을 한번에 하는 구문이다.
선언 대입문을 사용하면 var 키워드와 타입을 생략해 변수를 선언할 수 있다.
var b = 3.1415 ~> b는 float64 타입으로 자동 지정
Go
복사
c := 365 ~> c는 int 타입으로 자동 지정
Go
복사
s := “hello word” ~> s는 string 타입으로 자동 지정
Go
복사

타입 변환

Go 언어는 강 타입 언어 중에서도 가장 강하게 타입 검사를 한다.
Go 언어에서는 연산이나 대입에서 타입이 다르면 에러가 발생한다.
a := 3 ~> int
Go
복사
var b float64 = 3.5 ~> float64
Go
복사
var c int = b ~> error
Go
복사
d := a * b ~> 다른 타입끼리 연산 불가 error
Go
복사
var e int64 = 7
Go
복사
f := a * e ~> a는 int 타입, e는 int64 타입으로 같은 정수지만 타입이 달라서 error
Go
복사
다른 강 타입 언어에서도 자동으로 변환해주는 타입들도 Go 에서는 지원하지 않는다.
매번 타입 변환을 해서 귀찮을 수 있지만, 자동 변환으로 발생하는 버그를 미연에 방지하는 장점이 있다.
package main import "fmt" func main() { a := 3 var b float64 = 3.5 var c int = int(b) // 1 d := float64(a * c) var e int64 = 7 f := int64(d) * e var g int = int(b * 3) // 2 var h int = int(b) * 3 // 3 fmt.Println(g, h, f) }
Go
복사
실수 타입에서 정수 타입으로 타입 변환하면 소수점 이하 숫자가 없어진다.
1의 c 값은 3.5에서 소수점 이하 숫자가 사라진 3이 된다. 소수점 이하 숫자는 반올림되지 않고 버려진다.
그래서 2, 3 결과가 서로 달라진다.
2에서는 3.5 * 3이 먼저 계산되고, int 타입으로 변환되어 g 값이 10이 되지만, 3에서는 3.5가 먼저 int 타입으로 변환되어 9가 된다.
int32 ~> 부호 있는 32비트, 4바이트 정수
int8 ~> 부호 있는 8비트, 1바이트 정수 | -128 ~ 127