Golang 스터디(with 큐시즘 개발팀) - 2주차

PM/iOS Developer KimKU·2022년 9월 19일
0

Go Study

목록 보기
2/4

ㅇ

Go Study

1. 표준 출력

표준 입출력을 사용하면 목적지에 상관없이 간편하게 입출력 처리를 할 수 있다. Go 언어에서는 fmt 패키지를 사용해서 간편하게 표준 입출력을 처리할 수 있다.

fmt 패키지

표준 입출력 기능은 Go 언어 기본 패키지인 fmt에서 제공한다. 패키지를 사용하려면 import를 사용해서 사용할 패키지를 불러와야 한다.

import "fmt"

fmt 패키지는 3가지 표준 출력용 함수를 제공한다.

Print()힘수 입력값들을 출력한다.
Println()함수 입력값들을 출력하고 개행한다.
Printf()서식(format)에 맞도록 입력값들을 출력한다.

이 표준 출력 함수들을 사용하는 예제를 통해서 이들의 기능 차이를 알아보겠다.

package main

import "fmt"

func main() {
	var a int = 10
	var b int = 20
	var f float64 = 32799438743.8297

	fmt.Print("a:", a, "b:", b) //1
	fmt.Println("a:", a, "b:", b, "f:", f) //2
	fmt.Printf("a: %d b: %d, f: %f\n", a, b, f) //3
}
//출력결과
//a:10b:20a: 10 b: 20 f: 3.27994387438297e+10
//a: 10 b: 20, f: 32799438743.829700
  1. Print() 함수를 이용해서 기본 서식에 맞춰 표준 출력을 한다. 호출한 결과 a:10b:20이 출력되었다. Print() 함수는 출력이 끝나고 개행을 하지 않기 때문에 바로 Println() 함수 출력 결과가 이어진다.
  2. Println() 역시 기본 서식에 맞춰서 표준 출력을 한다. 출력값 사이에 공란을 삽입하고 출력이 끝나면 개행한다는 점이 Print() 함수와 다르다.
  3. Printf() 함수는 주어진 사용자 서식에 맞춰서 입력값을 출력한다. 출력 서식에 입력값들이 들어갈 자리를 만들어주고 각 입력값이 해당 자리에 들어가게 된다. 값이 들어갈 자리는 서식 문자를 적어준다. 또한 Printf() 함수는 출력이 끝난 뒤 자동 개행을 제공하지 않는다.

2. 표준 입력

표준 입력은 표준 입력 장치에서 데이터를 얻어온다. 일반적으로 표준 입력을 변경하지 않았다면 키보드가 표준 입력 장치이다. fmt 패키지는 표준 입력으로부터 입력받는 Scan(), Scanf(), Scanln() 함수를 제공한다.

Scan()표준 입력에서 값을 입력받는다.
Scanf()표준 입력에서 서식 형태로 값을 입력받는다.
Scanln()표준 입력에서 한 줄을 읽어서 값을 입력받는다.

Scan()

Scan() 함수는 값을 채워놓을 변수들의 메모리 주소를 인수로 받는다. 한 번에 여러 값을 입력 받을 때는 변수 사이를 공란으로 두어 구분한다.

함수 반환값은 성공적으로 입력한 값 개수와 입력 실패 시 에러를 반환한다.

Scan()을 이용해 숫자값 2개를 입력받는 예제를 보자.

package main

import "fmt"

func main() {
   var a int //1
   var b int

   n, err := fmt.Scan(&a, &b) //2
   if err != nil { //3
      fmt.Println(n, err)
   } else { //4
      fmt.Println(n, a, b)
   }
}
  1. 입력받은 값을 저장할 a와 b 두 int 타입 정수를 선언한다.
  2. fmt.Scan() 함수로 공란으로 구분된 숫자 2개를 입력받아서 정수 타입 변수 a와 b에 채워준다. Scan() 함수의 입력으로 쓸 때는 변수 앞에 &를 붙여서 변수의 메모리 주소를 입력으로 넘겨야 한다.
  3. err가 nil이 아니면 에러이다. 에러가 발생했다면 에러값을 출력한다.
  4. 정상적으로 입력을 받았다면 받은 값을 출력한다.

Scanf()

Scanf() 함수는 서식에 맞춘 입력을 받는다.

func Scanf(format string, a ...interface{}) (n int, err error)

예를 들어 fmt.Scanf(”%d %d\n”, &a, &b) 라고 하면 숫자 하나와 공란 그리고 다른 숫자 하나와 한 줄 띄우기에 맞춰진 입력을 받는다. 서식에 맞춰서 입력하기가 힘들기 때문에 Scan() 이나 Scanln() 함수 사용을 추천한다고 한다.

Scanf()를 이용해서 숫자 2개를 입력받는 예제를 살펴본다.

package main

import "fmt"

func main() {
   var a int
   var b int

   n, err := fmt.Scanf("%d %d\n", &a, &b) //1
   if err != nil {
      fmt.Println(n, err)
   } else {
      fmt.Println(n, a, b)
   }
}
  1. Scanf() 함수를 이용해서 정숫값 두 개를 입력 받는다. 서식에 맞춰서 두 숫자 사이에 공란이 와야 한다.

Scanln()

Scanln() 함수는 한 줄을 입력받아서 인수로 들어온 변수 메모리 주소에 값을 채워준다.

func Scanln(a ...interface{}) (n int, err error)

Scan() 과 다른 점은 마지막 입력값 이후 반드시 엔터키로 입력을 종료해야 한다는 점이다. 예를 들어 아래 예제처럼 값을 두 개 입력받을 때는 두 값을 입력한 뒤 반드시 엔터키로 입력해야 한다.

Scanln() 를 이용해서 숫자 2개를 입력받는 예제를 살펴보자.

package main

import "fmt"

func main() {
   var a int
   var b int

   n, err := fmt.Scanln(&a, &b) //1
   if err != nil {
      fmt.Println(n, err)
   } else {
      fmt.Println(n, a, b)
   }
}
  1. fmt.Scanln() 함수로 표준 입력으로 한 줄을 입력받아서 공란으로 구분된 값들을 읽는다. 코드를 구현했으니 입력에 따라 출력이 어떻게 처리되는지 살펴본다.
profile
With passion and honesty

0개의 댓글