[Go] #4.3 자료형의 변환

[Go] #4.3 자료형의 변환

강의 링크 : 한 눈에 끝내는 고랭 기초 #3 자료형 - 자료형의 변환


3. 자료형의 변환


int 형으로 표현되어 있는 데이터 표현 방식을 float32 형으로 바꾸거나, int 형으로 표현되어 있는 데이터의 표현 방식을 uint 형으로 바꾸는 것이 바로 자료형의 변환 이다.
즉, 자료형의 변환이라는 것은 데이터의 표현 방식을 바꾸는 것이다.
이러한 자료형의 변환은 다른 언어들을 비추어 보았을 때 크게 두 종류가 있다.

  • 자동 형 변환(묵시적 형 변환)
  • 강제 형 변환(명시적 형 변환)

이름에서 볼 수 있듯이 자동 형 변환 은 자동으로 발생하는 형 변환이고,
강제 형 변환 은 프로그래머가 형 변환을 명시해서 강제로 변환이 일어나게 하는 것이다.

그런데 Go 언어에서는 형 변환을 할 때 변환을 명시적으로 지정해 주어야 한다.
예를 들어 float32 에서 uint 로 변환할 때, 암묵적 변환은 일어나지 않으므로 uint(변수이름) 과 같이 반드시 변환을 지정해 주어야 한다.
만약 명시적 지정이 없다면 런타임 에러가 발생한다.

package main

import "fmt"

func main() {
	var num int = 10
	var changef float32 = float32(num) //int형을 float32형으로 변환
	changei := int8(num)               //int형을 int8형으로 변환

	var str string = "goorm"
	changestr := []byte(str) //바이트 배열
	str2 := string(changestr) //바이트 배열을 다시 문자열로 변환

	fmt.Println(num)
	fmt.Println(changef, changei)

	fmt.Println(str)
	fmt.Println(changestr)
	fmt.Println(str2)
}
// 실행 결과

10
10 10
goorm
[103 111 111 114 109]
goorm

byte 형으로 형 변환이 이루어졌을 때 각 알파벳의 아스키코드가 배열 형식으로 쉼표(,) 없이 출력됨에 주의.

package main

import "fmt"

func main() {
	var num1, num2 int = 3, 4
	
	var result float32 = num1 / num2	
	
	fmt.Printf("%f", result)
}
// 실행 결과

# command-line-arguments
./Main.go:8:6: cannot use num1 / num2 (type int) as type float32 in assignment
make: *** [cmd] Error 2

위 코드는 에러를 반환한다.
그 이유는, 연산식의 결괏값과 그것을 저장하려는 변수의 자료형이 다르기 때문이다.
위에서 언급했던 것처럼 Go 언어는 자동으로 형 변환이 되지 않으므로, 에러가 발생한다.
연산의 결괏값의 자료형과 피연산자의 자료형이 일치해야하므로, num1num2float32 형으로 형 변환을 해야한다.

  1. var result float32 = float32(num1 / num2)
    • 이렇게 하면 결과가 나오긴 하나 0.000000 으로 의도와 다른 값이 나온다.
  2. var result float32 = float32(num1) / float32(num2)
    • 이렇게 하면 결과가 0.750000 으로 잘 나온다.

© 2022. All rights reserved.