본문 바로가기

0x0a Programming/0x0b Go Lang

Go 강좌 3편. 변수(Variable), 상수(Constant)



1. 변수(Variable)



수학을 공부하신 분들은 '변수'에 대해 알고 계실 겁니다.


수학에서의 변수와 프로그래밍에서 쓰이는 변수는 비슷합니다.


프로그래밍의 변수는 쉽게 말하자면 무언가를 담는 박스라고 생각하시면 됩니다.


값을 저장할 수 있고, 우리가 필요할 때는 그 값을 참조하여 사용할 수 있습니다. 


잠깐의 이해를 도우려고 간단한 코드로 예를 들어보겠습니다.


시나리오

"어머니께서 심부름을 시키기 위해 천 원을 주셨습니다.

상추 한 잎을 사오라고 하셨습니다.

상추 한 잎에 800원이라고 하였을 때, 우리가 거스름돈으로 받아야 할 금액은 200원이 됩니다."


이에 상황에 맞는 코드를 작성하면 이러한 코드가 됩니다. 



위의 코드에서의 money, sangchoo 는 변수이며 변수가 담고 있는 값을 잘 출력하는 것을 볼 수 있습니다.

9행에 보시면 money 변수에 1000이라는 값이 들어가고

10행에서는 sangchoo 변수에 800이라는 값이 들어가는 것을 볼 수 있습니다.


12~13행은 그 변수 안에 있는 값을 가져와 출력을 하는 것을 볼 수 있으며,

15행에서는 각 변수의 값들을 뺀 값을 출력을 합니다.



1-1. 깊게 파고 들자


Go 언어에서 변수를 선언하는 방법은 var 키워드를 사용하는 방식과 자료형을 생략하는 방법이 있습니다.



(1) Var 키워드



※ var 변수명 데이터 타입


다른 언어와는 달리 데이터 타입이 변수 명의 뒤에 옵니다.


변수 명을 작성할 때의 주의하여야 할 점이 있습니다.

변수 명은 문자와 숫자로 이루어져야 합니다.

※ 단, 문자 또는 _ (언더 바)로 시작해야 하며 숫자로 시작할 수 없습니다.


ex) hubeen0(O), _hubeen_is_sexy(O), 18Love22(X)



(2) 자료형 생략 선언




자료형을 생략하고 선언을 하시려면 반드시 초기 값을 대입하셔야 됩니다.

자료형을 생략하고 초기 값을 대입하면 초기 값의 데이터 타입으로 결정됩니다.


ex) var a = 10(O), var b = "fukkk"(O), var sexy(X)



(3) 손 쉽게 선언하기


빠른 선언과 여러 개의 변수를 선언하는 방법을 소개합니다.



 :=를 사용하면 위에서 소개한 방법들을 사용하지 않고 간단히 변수를 선언하고 초기화 할 수 있습니다.

여기서 변수의 타입은 대입 값의 타입으로 선언됩니다.



이 변수 선언 방법은 if, for 제어문 안에서 임시 변수를 사용할 때 매우 유용하게 사용됩니다.


변수를 여러 개 선언할 때에는 콤마(',')로 구분하여 나열합니다.

여기서 나열되어 선언되는 변수의 대입되는 개수는 서로 같아야됩니다.

여기서 변수의 타입은 지정하지 않으면 변수의 타입은 대입되는 값의 타입으로 선언됩니다.



변수를 여러 개 선언할 때에도 처음에 소개한 방법으로도 선언이 가능합니다.



이런 식으로도 선언이 가능합니다.

ex) var a,b,c int = 10,20,30 (O), var a,b = 10, "Hello" (O), a,b,c := 10,20,30,40 (X)


1-2. 기본 데이터 형식 (Basic types)



Go 언어에서 제공하는 기본 데이터 형식들을 표로 정리하였습니다.

※ 잘못 번역된 부분도 있을 수 있으며 틀릴 수도 있습니다.



 구분

 데이터 형식

 설명

 값의 범위

 논리

 bool

 -

 True, False 

 문자열

 string

 -

 -

 정수

 rune

 int32와 크기가 동일, 

유니코드 문자코드를 저장할 때 사용

 -

 정수

 int

 32bit에서는 int32

64bit에서는 int64

 -

 정수

 int8

 부호 있는(signed) 8비트,

1바이트 정수

 -128 ~ 127

 정수

 int16

 부호 있는(signed) 16비트,

2바이트 정수

 -32768 ~ 32767

 정수

 int32

 부호 있는(signed) 32비트,

4바이트 정수

 -2147483648 ~ 2147483647

 정수

 int64

 부호 있는(signed) 64비트,

8바이트 정수

 -9223372036854775808 ~ 9223372036854775807

 정수

 uint

 32bit에서는 uint32

64bit에서는 uint64

 -

 정수

 uint8

 부호 없는(unsigned) 8비트,

1바이트 정수

 0 ~ 255

 정수

 uint16

 부호 없는(unsigned) 16비트,

2바이트 정수

 0 ~ 65535

 정수

 uint32

 부호 없는(unsigned) 32비트,

4바이트 정수

 0 ~ 4294967295

 정수

 uint64

 부호 없는(unsigned) 64비트,

8바이트 정수

 0 ~ 18446744073709551615

 정수

 uintptr

 uint와 크기가 동일하며,

포인트를 저장할 때 사용

 -

 정수

 byte

 uint8와 크기가 동일하며,

바이트 단위로 저장할 때 사용

 -

 실수

 float32

 IEEE-754 

32비트 단정밀도 부동 소수점,

7자리 정밀도 보장

 -

 실수

 float64

 IEEE-754 

64비트 배정밀도 부동 소수점,

15자리 정밀도 보장

 -

 실수

 complex64

 float32 크기의 실수부와 허수부로 된 복소수

 -

 실수

 complex128

 float64 크기의 실수부와 허수부로 된 복소수

 -



(1) 정수 데이터 형식


정수 데이터 형식의 변수에 값을 담고 그 값을 출력하는 예제를 작성할 수 있습니다.





(2) 실수 데이터 형식


실수 데이터 형식의 변수에 값을 담고 그 값을 출력하는 예제를 작성할 수 있습니다.





(3) 문자열 데이터 형식


문자열 데이터 형식의 변수에 값을 담고 그 값을 출력하는 예제를 작성할 수 있습니다.





(4) 논리 데이터 형식


논리 데이터 형식의 변수에 값을 담고 그 값을 출력하는 예제를 작성할 수 있습니다.





2. 형식 변환(Type conversion)



형식 변환이란 다른 데이터 형식에 옮겨 담기 위해 데이터 형식을 변환하는 것을 말합니다.

쉽게 말하자면 이 변수는 정수를 받는 박스인데 

저희가 집어넣으려는 값을 실수인 상황인 겁니다!

이러한 상황에서는 실수를 정수로 변환한 뒤에 넣어야 되게 되기 때문에

이러한 상황에 쓰이는 녀석입니다.


아래에 예제들을 보도록 하겠습니다.



2-1. 정수 → 실수, 실수 → 정수 형 변환

정수에서 실수로 변환하는 과정과 실수에서 정수로 변환하는 과정의 차이를 눈으로 확인할 수 있습니다.



정수에서 실수로 바꾸는 과정에서는 아무 문제 없이 잘 바뀜을 알 수 있습니다.



실수에서 정수로 바꾸는 과정에서는 소수점 아래는 모두 버리는 것을 알 수 있습니다.

500.1234에서 소수점 아래의 1234가 버려지고 b에 들어가는 것을 알 수 있습니다.



3. 상수(Constants)



상수란 무엇일까요?


상수(常數)란 수식에서 변하지 않는 값을 뜻한다. 이것은 변하는 값 변수와 반대이다.

라고 위키백과에 적혀있습니다.


위와 같이 상수란 변하지 않는 고정된 값입니다.


수천 줄 수만 줄인 프로그램을 작성하게 될 때 수 많은 변수를 선언하게 됩니다.

그러나 이 수많은 변수들 중 값이 도중에 변경되어도 프로그램에 영향을 주는 변수와 도중에 변경되면 심각하게 영향을 주는 변수가 있습니다.

ex) admin, auth


만약에 코드를 작성하다가 나도 모르게 값을 변경하지 말아야 되는 변수를 건드려서 버그가 생길 수 있다는 겁니다!


Go 언어에서는 const 키워드로 상수를 만들 수 있습니다.


이 const 키워드를 선언과 동시에 초기화된 값은 절대로 변하지 않습니다. 



위와 같이 선언할 수 있습니다.


변수와 마찬가지로 문자 또는 언더바 ('_')로 시작하여야 하며 숫자로는 시작할 수 없습니다.

ex) 18Love22, 7eleven, 24hour


그리고 이 아래의 있는 코드는 잘 못된 코드입니다.




(1) 자료형 생략 선언



변수와 같이 자료형을 생략하고 선언이 가능합니다.



위와 같이 선언할 수 있습니다.

변수처럼 초기에 대입하는 값의 자료형으로 선언됩니다.


※ 초깃 값을 꼭 대입해줘야 됩니다. 



(2) 여러 개 선언



상수를 여러 개 선언하고 초기화할 때는 변수와 값을 콤마(',')로 구분하여 나열합니다.

상수를 선언한 순서대로 값이 대입되며 반드시 선언한 상수의 개수와 대입할 값의 개수가 같아야 합니다.


선언할 때 자료형을 지정하지 않으면 대입하는 값의 자료형으로 선언됩니다.



또 const 키워드와 ( )를 사용하면 상수 여러 개를 한 번에 선언하고 초기화할 수 있습니다.



여기서도 상수의 자료형을 지정하거나 생략할 수 있습니다.

마찬가지로 자료형을 지정하지 않으면 상수의 자료형은 대입하는 값의 자료형으로 결정됩니다.


※ 변수와는 달리 초깃값을 반드시 지정해줘야 됩니다.


이번 강좌에 변수와 데이터 형식 그리고 상수에 대한 설명이 끝났습니다.

이 긴 글을 읽어주셔서 감사합니다.


다음 강좌에서는 연산자(Operators)에 대해 알아보도록 하겠습니다.