이번 강의에서는 프로그래밍의 가장 대표적인 함수인 '콘솔 출력 함수'에 대해 알아보겠습니다. 다른 언어를 사용해본 개발자들은 printf, 혹은 System.out.println()와 같은 용법에 익숙할 것입니다.
Go언어에서 사용하는 fmt 패키지의 콘솔 출력 함수는 Println, Print, Printf 외에도 파일 출력을 위한 Fprintln, Fprint, Fprintf와 string형으로 반환되는 Sprintln, Sprint, Sprintf가 있습니다. F함수들은 파일 출력을 위해 사용되고 사용법이 크게 다르지 않기 때문에 이 챕터에서 다루지 않겠습니다. 그리고 Print와 같은 함수들도 사실 반환 값을 갖습니다. S함수들은 반환 값을 string 형으로 출력하는 함수입니다. 특별한 용도에 사용되고 표준 출력을 하지 않기 때문에 마찬가지로 이번 챕터에서 다루지 않겠습니다.
따라서 Println, Print, Printf 함수들이 어떤 특징이 있는지 차이점을 중점으로 설명하겠습니다.
import "fmt"
코드 상단에 import "fmt"를 선언함으로써 fmt 패키지를 사용할 수 있는데, 이는 C언어의 입/출력 함수인 printf와 scanf 함수같은 유사한 함수들을 형식화한 입/출력을 함수를 사용할 수 있다는 뜻입니다.
쉽게 말해서, 콘솔 입력 함수와 콘솔 출력함수를 사용하기 위해서는 fmt 패키지를 import 해야합니다.
Println, Print
Println 함수는 사용할 때마다 자동으로 개행이 되어서 출력됩니다. 하지만 Print 함수는 개행을 하지 않기 때문에 문자열(이중인용부호("") 혹은 Back Quote)내에서 이스케이프 시퀀스인 '\n'을 입력해 개행해야합니다. 하지만 두 함수는 하나의 인자를 출력할 수도 있고 여러 개의 인자를 콤마로 결합해 열거할 수 있다는 점에서 공통점이 있습니다.
아래 Println과 Print 함수를 사용한 예시 코드가 있습니다. 바로 실행해보세요.
Printf
Printf 함수는 C언어의 Printf 함수와 유사합니다. Go언어에서도 개발자가 포멧을 지정하여 원하는 형태로 출력할 때 사용합니다. 여기서 주의해야 할 점은 반드시 포멧을 지정해줘야 한다는 것입니다. 예를 들어 a := 5
일 때 fmt.Printf(a)
를 입력해 출력할 수는 없습니다. 한 개의 인자라도 출력하기 위해서는 fmt.Printf("%d", a)
형식으로 입력해야합니다. 그리고 C언어와는 다르게 조금 더 편리한 점은 배열을 한번에 출력이 가능하다는 것입니다. 예를 들어, C언어에서는 int arr[3] = {1, 2, 3}
일 때 printf("%d", arr)
이 불가능하고, Go언어에서는 var arr [3]int = [5]int{1, 2, 3}
일 때 fmt.Printf("%d", arr)
이 가능합니다.
마지막으로 Print 함수와 동일하게 자동 개행이 되지 않습니다. 따라서 개행을 하기위해서는 '\n'을 입력해야합니다.
아래 코드를 바로 실행해보세요.
서식문자의 종류와 그 의미
Printf 함수를 사용하면서 포멧을 지정해줄 때 '%d'와 같은 문자를 사용합니다. 이는 값을 입력하고 출력하는 데 있어서 서식을 지정하는 것입니다. 예를 들어,
"제 나이는 10진수로 %d살, 16진수로는 %X살 입니다."
라고 포멧을 지정할 수 있습니다. %d는 10진수 정수의 형태로 출력한다는 의미이며, %X는 데이터를 16진수로 출력하되, 알파벳은 대문자로 출력한다는 의미입니다. 이러한 %d와 %X를 가리켜 '서식문자'라고 합니다.
자세한 서식문자의 종류와 의미를 표를 통해 확인해보겠습니다.
서식문자 | 출력 형태 |
%t | bool |
%b | 2진수 정수 |
%c | 문자 |
%d | 10진수 정수 |
%o | 8진수 정수 |
%x | 16진수 정수, 소문자 |
%X | 16진수 정수, 대문자 |
%f | 10진수 방식의 고정 소수점 실수 |
%F | 10진수 방식의 고정 소수점 실수 |
%e | 지수 표현 실수, e |
%E | 지수 표현 실수, E |
%g | 간단한 10진수 실수 |
%G | 간단한 10진수 실수 |
%s | 문자열 |
%p | 포인터 |
%U | 유니코드 |
%T | 타입 |
%v | 모든 형식 |
%#v | #을 이용해구분할 수 있는 형식 표현 |
C언어와는 몇 가지 다른 점이 있습니다. C언어에서는 %u와 %x등과 같은 부호의 여부에 따라 표현이 다른 서식문자들이 있습니다. 그리고 Go언어에서는 %v 문자를 이용해 변수의 타입에 관계없이 출력할 수 있습니다. 표에 적어놓은 출력 형태에 실수, 정수라고 표현한 것은 정수는 정수 타입으로, 실수는 실수 타입으로만 출력할 수 있다는 것입니다. 그리고 포인터 서식문자인 %p는 값이 참조하는 주소값을 반환하는 서식문자입니다.
그리고 출력하는 형태를 따로 지정할 수 있습니다. 원하는 출력 폭을 지정할 때는 "%(폭)d" 형식으로 입력하고, 지정한 출력 폭에 0을 채워넣고 싶으면 "%0(폭)d"형식으로 입력하고, 출력할 때 왼쪽부터 출력을 원한다면 "%-(폭)d"형식으로 입력합니다. 그리고 출력할 소수점 이하 자리를 지정할 때 "%.(자릿수)f"형식으로 지정할 수 있습니다.
아래 코드를 바로 실행해보세요.