언어/go

[go] 왕초보 go언어 스터디 - 변수와 데이터형, 명시적 선언과 묵시적 선언

Soyeon0111 2021. 10. 29. 20:26
반응형

왕초보 go언어 스터디.

오늘은 변수와 데이터형, 명시적 선언(explicit declaration)과 묵시적 선언(implicit declaration)에 대하여 스터디를 하였다.

 

 


변수와 데이터형

 

go에서는 아래와 같이 변수를 선언한다.

var 변수명 자료형 

변수명의 규칙 : 첫번째 문자로 숫자는 불가. 공백 불가. 특수문자 불가. 약속된 예약어 불가. (예를 들어 import)

 

< 자료형의 종류 >

자료형 저장범위 설명
uint8 0~255 부호 없는 8비트 정수형
uint16 0~65,535 부호 없는 16비트 정수형
uint32 0~4,294,967,295 부호 없는 32비트 정수형
uint64 0~18,446,744,073,709,551,615 부호 없는 64비트 정수형
uint   32비트 시스템에서는 uint32, 
64비트 시스템에서는 uint64
int8 -128~127 부호 있는 8비트 정수형
int16 -32,768~32,767 부호 있는 16비트 정수형
int32 -2,147,483,648~2,147,483,647 부호 있는 32비트 정수형
int64 -9,223,372,036,854,775,808~9,223,372,036,854,775,807 부호 있는 64비트 정수형
int   32비트 시스템에서는 int32, 
64비트 시스템에서는 int64
float32   IEEE-754 32비트 부동소수점, 7자리 정밀도
float64   IEEE-754 64비트 부동소수점, 12자리 정밀도
complex64   float32 크기의 실수부와 허수부로 구성된 복소수
complex128   float64 크기의 실수부와 허수부로 구성된 복소수
uintptr   uint와 같은 크기를 갖는 포인터형
bool   참, 거짓을 표현하기 위한 8비트 자료형
byte   8비트 자료형
rune   유니코드 저장을 위한 자료형, 크기는 int32와 동일
string   문자열을 저장하기 위한 자료형

 


1. 저장 범위를 초과하여 저장을 시도할 때

number라는 변수명을 갖는 uint8 자료형 변수를 선언. uint형 저장 범위는 0~255인데, 저장 범위를 벗어나는 256을 할당해보았다. 

 

실행하였더니 overflow 에러가 발생한다.

 

실행 전에 vscode 'PROBLEMS' 탭에서 에러 내용을 파악할 수 있다.

 

 

2. 사용하지 않는 변수도 문제로 인식한다. 

uint8 범위인 255로 수정하였다.

그러나 number라는 변수를 선언하였지만 그 어느 곳에서도 사용하고 있지 않다. 

이런 경우 실행하면..

 

실행하지 않아도 vscode PROBLEMS 탭에서 확인 가능

number 변수가 선언되었지만 사용되지 않았다는 에러가 발생한다.

 

변수를 사용하였더니 에러가 발생하지 않고 잘 동작한다. 내가 할당한 255라는 값이 출력되었다.

 

 

3. 숫자형 변수로 연산을 해보자.

number 변수에 1을 할당하고 100을 더해주었다. 

101로 출력되었다. 

So Simple~ :) 

 

위에서 말했듯이 uint8형은 255가 최대이다. 255로 할당한 변수에 100을 더하면...?

255 + 1 = 0

255 + 2 = 1  

....

255 + 100 = 99 

99 가 출력되었다!

 


명시적 선언과 묵시적 선언

명시적 선언(explicit declaration)과 묵시적 선언(implicit declaration)

말이 왜 이렇게 거창한 느낌...?

 

 

1. 명시적 선언과 묵시적 선언을 해보자 

 

위에서 변수 선언은 var 변수형 자료형 으로 한다고 했다.

이처럼 자료형을 명시하면 '명시적 선언'이 된다. 

'묵시적 선언'은 자료형을 빼면 된다. So Simple~

 

 

2. 묵시적 선언을 한 변수의 데이터형을 확인해보자

데이터형을 명시하지 않았지만 int로 알아들었다.

포맷을 지정하여 원하는 형태로 출력하는 Printf를 사용하여 확인해보았다.

number라는 변수에 데이터형을 명시하지 않았는데. %T로 해당 변수의 데이터형을 확인해보니....

컴퓨터가 int로 알아들었다.                                                                                                                                                                                                                                                                              

이번에는 29000000.7888888 을 넣어보았다.

어떤 형태인지 알려주지 않아도 go가 알아서 데이터형을 float64로 알아들었다.

 

 

3. 묵시적 선언을 했는데 데이터형을 변경하여 다시 선언한다?

 

go에서는 아래와 같이 변수를 지정할 수 있다. 이번엔 제일 짧은 := 를 사용하여 묵시적 선언을 해보았다.

var 변수명 데이터형 = 
var 변수명 = 
변수명 := 

 

number := 29로 선언하여 컴퓨터가 number를 int로 알아들었는데, 아래에서 데이터 형을 변경하여 다시 선언하였다. number := "str" 는 컴퓨터가 string으로 알아듣는다.

 

실행해보았더니 int로 할당한 데에 "str" 은 사용할 수 없다는 에러가 발생하였다.

( 그 위 에러는 잠시 무시.. )

 

 

이번에는 동일한 데이터형을 두번 선언해보았다. 

💡 강의 동영상에서는 에러 없이 실행 가능했는데, 내가 해보니 새로운 변수가 아닌 변수를 선언할 수 없다는 에러가 발생한다. 나의 go 버전은 1.17.2 ....... 동영상 강의에서 왜 에러가 발생하지 않았는지 너무 궁금.... ㅠㅠ 아시는 분 Comment 좀...!

 

 

 

 

4. 컴퓨터가 알고있는 데이터형의 기본값은?

uint64형의 number라는 변수를 선언만하고 값을 넣지 않았다. number를 출력하면 uint64의 기본값이 나온다. 

기본값은 0!

 

bool형의 boo라는 변수를 선언만하고 출력해보자. bool의 기본값은 false! 

 

 

 


<참고 강의>

변수와 데이터형 : https://www.youtube.com/watch?v=4Rs-7AkAuZ0&list=PLsGh7Wc318kjJj1NdyZG8xcIrsuBNNiWs&index=2

명시적 선언과 묵시적 선언 : https://www.youtube.com/watch?v=PZsAyQ81ltU&list=PLsGh7Wc318kjJj1NdyZG8xcIrsuBNNiWs&index=3

반응형