갈루아의 반서재

간단하게 다음과 같이 생각할 필요가 있다. 

모든 개는 4개의 다리는 갖는다. -> 맥스는 개다. -> 따라서 맥스는 4개의 다리를 갖는다. 

프로그래밍 언어에서도 마찬가지다. 

모든 문자열은 길이를 가진다. -> x 는 문자열이다. -> x 는 길이를 갖는다. 

실수의 집합이든, 자연수의 집합이든, 모든 집합의 구성요소는 해당 집합의 다른 요소들과 특징을 공유한다. 예를 들어 자연수의 집합인  ℕ 의 경우 결합법칙이 성립한다. 그리고 프로그래밍 언어에서 모든 값은 특정한 타입을 가지고 특정한 속성을 공유한다. 이런 식으로 수학에서의 집합은 프로그래밍 언어에서 타입과 유사한 면이 있다. 

Go 는 정적 타입 프로그래밍 언어이다. 이 말은 변수는 항상 특정한 타입을 가지며, 그 타입을 바꿀 수 없다는 의미다. 정적 타입은 처음에는 다루기 힘들게 느껴질 수도 있다. 하지만 타입은 프로그램이 무엇을 하고 있는지 생각하는데, 그리고 실수를 잡아내는데 도움을 준다. 

Go 에는 몇 가지 내장된 데이터 타입이 존재한다. 하나씩 살펴보자. 


Numbers

Go 에는 숫자를 나타내는 여러가지 타입이 존재한다. 일반적으로 2가지로 나눌 수 있는데, 정수와 실수가 그것이다.  


정수 

Go 의 정수타입에는 uint8, uint16, uint32, uint64, int8, int16, int32 그리고 int64 이 있다. 여기서 8, 16, 32, 그리고 64 는 해당 타입이 사용하고 있는 비트수를 의미한다.  uint 는 “unsigned integer” 를 의미하고, int 는 “signed integer” 을 뜻한다. Unsigned integers 은 0 또는 양의 정수만 포함한다. 그리고 타입에는 2가지 별칭이 있는데,  uint8 과 같은 byte와 int32와 같은 rune 이 있다. 


실수 

실수와 관련해서는 다음의 사항만 유념하면 된다.  

  • 실수는 정확하지 않을 수 있다. 예상하는 값에 가깝겠지만, 반드시 일치하지는 않는다.
  • 정수와 마찬가지로 실수는 32bit 또는 64bit 와 같이 일정한 크기를 갖는다. 
  • 수에는 양의 무한대 또는 음의 무한대, 0/0 과 같이 몇 가지 다른 값도 존재한다. 
Go에는 2가지의 실수 타입이 존재한다. float32 와 float64 (종종 단일정밀도 그리고 배정밀도라고 불리기도함) 이 그것이다.  그리고 복소수를 나타내기 위해 complex64 와 complex128 타입이 존재한다. 보통 float64 으로 작업한다. 


예제

chapter3 라는 폴더를 만들고 아래와 같은 내용의 main.go 파일을 만들자.

1
2
3
4
5
6
7
package main
 
import "fmt"
 
func main() {
 fmt.Println("1+1="1+1)
}
cs

프로그램을 실행하면 다음과 같은 결과를 얻는다.

1
2
3
~/go/src/golang-book/chapter3# go run main.go
1+1= 2
 
cs

그럼 이번에는 실수를 이용해서 실행해보자.

1
2
3
4
5
6
7
package main
 
import "fmt"
 
func main() {
 fmt.Println("1+1="1.0+1.0)
}
cs

라인 6에서 보듯이 .0 을 사용해 실수임을 Go 에게 알려주었다. 

실행을 해보면 이전과 동일한 결과를 얻음을 알 수 있다.

1
2
3
~/go/src/golang-book/chapter3# go run main.go
1+1= 2
 
cs

그럼 이번에는 실수를 이용해서 실행해보자.

Go에는 더하기 이외에 다음과 같은 연산자가 있다.


+ addition

- subtraction

* multiplication

/ division

% remainder