트랙
/
Go
Go
/
연습 문제
/
Gopher의 멋진 라자냐
Gopher의 멋진 라자냐

Gopher의 멋진 라자냐

학습 연습 문제

소개

Go는 정적 타입 언어이자 컴파일 언어예요. 이 연습 문제에서는 세 가지 주요 언어 기능인 패키지, 함수, 변수를 소개해요.

패키지

Go 애플리케이션은 패키지로 구성돼요. 패키지는 같은 디렉터리에 있는 소스 파일들의 모음이에요. 한 디렉터리에 있는 모든 소스 파일은 같은 패키지 이름을 공유해야 해요. 패키지를 임포트하면 이름이 대문자로 시작하는 요소(함수, 타입, 변수, 상수)만 사용하거나 접근할 수 있어요. Go에서 권장하는 이름 지정 방식은 식별자를 camelCase로 짓는 것이고, 패키지 간에 접근할 수 있어야 하는 식별자는 PascalCase로 지어요.

package lasagna

변수

Go는 정적 타입 언어라서 모든 변수는 컴파일 시점에 정의된 타입을 가져야 해요.

변수는 타입을 명시적으로 지정해서 정의할 수 있어요.

var explicit int // Explicitly typed

초기값을 사용할 수도 있는데, 그러면 컴파일러가 초기값의 타입에 맞춰 변수의 타입을 지정해 줘요.

implicit := 10   // Implicitly typed as an int

한 번 선언한 변수에는 = 연산자로 값을 할당할 수 있어요. 변수는 한 번 선언하면 타입을 절대 바꿀 수 없어요.

count := 1 // Assign initial value
count = 2  // Update to new value

count = false // This throws a compiler error due to assigning a non `int` type

상수

상수는 변수처럼 데이터를 담지만, 프로그램이 실행되는 동안 값이 바뀔 수 없어요.

상수는 const 키워드로 정의하고, 숫자, 문자, 문자열, 불리언이 될 수 있어요.

const Age = 21 // Defines a numeric constant 'Age' with the value of 21

함수

Go 함수는 매개변수를 0개 이상 받아요. 매개변수는 반드시 타입을 명시해야 하고, 타입 추론은 없어요.

값은 return 키워드를 사용해 함수에서 반환해요.

함수는 함수 이름을 쓰고 각 매개변수에 맞는 인자를 전달해서 호출해요.

참고로 Go는 두 가지 종류의 주석을 지원해요. 한 줄 주석은 //로 시작하고, 여러 줄 주석은 /*와 */ 사이에 넣어요.

package greeting

// Hello is a public function.
func Hello (name string) string {
    return hi(name)
}

// hi is a private function.
func hi (name string) string {
    return "hi " + name
}

지침

이 연습 문제에서는 좋아하는 요리책을 보며 근사한 라자냐를 만들 수 있도록 도와주는 코드를 작성해요.

라자냐를 만드는 데 걸리는 시간과 관련된 네 가지 작업이 있어요.

1. 오븐 예상 시간(분) 정의하기

라자냐가 오븐에 있어야 하는 시간(분)을 값으로 하는 OvenTime 상수를 정의해요. 요리책에 따르면 예상 오븐 시간은 40분이에요.

OvenTime
// => 40

2. 남은 오븐 시간(분) 계산하기

RemainingOvenTime() 함수는 라자냐가 지금까지 오븐에 있던 실제 시간(분)을 매개변수로 받아요. 그리고 앞의 작업에서 구한 예상 오븐 시간(분)을 기준으로, 라자냐가 오븐에 더 있어야 하는 시간(분)을 반환해요.

func RemainingOvenTime(actual int) int {
    // TODO
}

RemainingOvenTime(30)
// => 10

3. 준비 시간(분) 계산하기

PreparationTime 함수는 라자냐에 넣은 층의 개수를 매개변수로 받아요. 그리고 각 층을 준비하는 데 2분이 걸린다고 가정했을 때, 라자냐를 준비하는 데 걸린 시간(분)을 반환해요.

func PreparationTime(numberOfLayers int) int {
    // TODO
}

PreparationTime(2)
// => 4

4. 지금까지 걸린 작업 시간(분) 계산하기

ElapsedTime 함수는 두 개의 매개변수를 받아요. 첫 번째 매개변수는 라자냐에 넣은 층의 개수이고, 두 번째 매개변수는 라자냐가 오븐에 있던 시간(분)이에요. 이 함수는 라자냐를 만드는 데 지금까지 총 몇 분을 일했는지를 반환해야 해요. 이 값은 준비 시간(분)과 현재까지 라자냐가 오븐에서 보낸 시간(분)을 더한 값이에요.

func ElapsedTime(numberOfLayers, actualMinutesInOven int) int {
    // TODO
}

ElapsedTime(3, 20)
// => 26
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Go Exercism

Gopher의 멋진 라자냐 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Go 트랙을 개념 35개연습 문제 167개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.