Menu
Coddy logo textTech

간단한 패키지 만들기

Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 53번째.

이제 여러분만의 커스텀 패키지를 만들 시간입니다! 패키지를 만들면 코드를 재사용 가능한 모듈로 구성하여 여러 프로그램에서 가져와 사용할 수 있습니다.

패키지를 생성하려면, 파일 상단에 package 키워드와 그 뒤에 패키지 이름을 선언하는 것으로 시작합니다. 우리의 계산기 패키지의 경우, 다음과 같이 작성합니다:

package calculator

이 패키지 내부에서 함수, 변수 및 타입을 정의할 수 있습니다. 대문자로 시작하는 내보내기된 식별자만 다른 패키지에서 접근할 수 있다는 점을 기억하세요. 다음은 내보내기된 Add 함수를 정의하는 방법입니다:

package calculator

func Add(a, b int) int {
    return a + b
}

다른 파일에서 커스텀 패키지를 사용하려면, 다른 패키지와 마찬가지로 가져오면(import) 됩니다. main 패키지에서 내보낸(exported) 함수를 호출할 수 있습니다:

package main

import "calculator"

func main() {
    result := calculator.Add(5, 3)
}

이러한 모듈식 접근 방식은 코드를 더 체계적으로 만들고, 코드 중복 없이 여러 프로그램에서 기능을 재사용할 수 있게 해줍니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

challenge icon

챌린지

쉬움

기본적인 수학 연산을 수행하는 커스텀 mathutils 패키지를 생성하고, 이를 메인 프로그램에서 사용해 보세요. 이 챌린지는 패키지를 생성하고, 내보낼(exported) 함수를 정의하며, 다른 프로그램에서 사용하기 위해 커스텀 패키지를 임포트하는 능력을 테스트합니다.

두 개의 입력을 받게 됩니다:

  • "function1:param1,param2:operation|function2:param1,param2:operation" 형식의 함수 정의가 포함된 문자열 (예: "Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")
  • "operation1:value1,value2|operation2:value1,value2|operation3:value1,value2" 형식의 계산 요청이 포함된 문자열 (예: "Add:15,25|Multiply:6,8|Subtract:50,20")

여러분의 과제는 다음과 같습니다:

  1. 상단에 package mathutils를 선언하여 mathutils 패키지를 생성합니다.
  2. 첫 번째 입력을 파이프(|)를 기준으로 분할하여 개별 함수 정의를 파싱합니다.
  3. 각 함수 정의에 대해 콜론(:)을 기준으로 분할하여 함수 이름, 매개변수 및 연산 유형을 가져옵니다.
  4. mathutils 패키지에 다음과 같은 내보내기 함수를 생성합니다:
    • Add(a, b int) int - a와 b의 합을 반환합니다.
    • Subtract(a, b int) int - a에서 b를 뺀 값을 반환합니다.
    • Multiply(a, b int) int - a와 b의 곱을 반환합니다.
    • Divide(a, b int) int - a를 b로 나눈 값(정수 나눗셈)을 반환합니다.
  5. 메인 프로그램에서 mathutils 패키지를 임포트합니다.
  6. 패키지 정보 헤더를 표시합니다: "=== MATHUTILS PACKAGE DEMO ==="
  7. 첫 번째 입력을 파싱하고 사용 가능한 함수를 표시합니다:
    • "Available functions in mathutils package:"
    • 각 함수에 대해: "- [function_name]: Performs [operation_type] on two integers"
  8. 두 번째 입력을 파이프를 기준으로 분할하여 개별 계산 요청을 파싱합니다.
  9. 각 계산 요청에 대해 콜론을 기준으로 분할하여 함수 이름과 매개변수를 가져옵니다.
  10. 매개변수를 쉼표(,)를 기준으로 분할하여 두 개의 정수 값을 가져옵니다.
  11. strconv.Atoi를 사용하여 매개변수 문자열을 정수로 변환합니다.
  12. 계산 프로세스 헤더를 표시합니다: "Performing calculations:"
  13. 각 계산 요청에 대해:
    • mathutils 패키지에서 적절한 함수를 호출합니다.
    • 다음을 표시합니다: "mathutils.[function_name]([param1], [param2]) = [result]"
  14. 요약 통계를 계산하고 표시합니다:
    • "Calculation Summary:"
    • "Total calculations performed: [number_of_calculations]"
    • "Functions used: [comma_separated_list_of_unique_function_names_used]"
    • "Sum of all results: [sum_of_all_calculation_results]"
  15. 패키지 사용 확인 메시지를 표시합니다:
    • "Package demonstration completed successfully"
    • "All functions from mathutils package executed correctly"

입력 문자열을 분할하려면 strings 패키지를, 문자열을 정수로 변환하려면 strconv 패키지를, 형식화된 출력을 위해서는 fmt 패키지를 사용하세요. 대문자로 시작하는 함수만 다른 패키지에서 내보내기 및 액세스가 가능하다는 점을 기억하세요.

중요: 두 입력 라인 모두 항목 간의 구분 기호로 파이프(|)를 사용합니다. 첫 번째 입력의 각 항목은 FunctionName:param1,param2:operationtype 형식을 가집니다. 먼저 |로 분할한 다음, 각 항목을 :로 분할하여 함수 이름(인덱스 0)과 연산 유형(인덱스 2)을 추출하세요.

이 챌린지는 커스텀 패키지를 통해 재사용 가능한 코드를 작성하는 방법과 기능을 논리적 모듈로 구성하는 방법을 보여줍니다.

치트 시트

커스텀 패키지를 만들려면, 파일 상단에 package 키워드를 사용하여 선언하세요:

package calculator

내보낸 식별자(대문자로 시작하는 식별자)만 다른 패키지에서 접근할 수 있습니다:

package calculator

func Add(a, b int) int {
    return a + b
}

다른 파일에서 커스텀 패키지를 가져와서 사용하세요:

package main

import "calculator"

func main() {
    result := calculator.Add(5, 3)
}

이러한 모듈식 접근 방식은 코드를 체계화하고 코드를 중복하지 않고 여러 프로그램에서 재사용할 수 있게 해줍니다.

직접 해보기

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

// TODO: 여기에 mathutils 패키지 함수를 작성하세요
// 별도의 파일을 사용할 수 없으므로 함수를 직접 정의합니다
// 이 함수들은 보통 별도의 패키지 파일에 위치하게 됩니다

func main() {
	// 공백을 적절히 처리하기 위해 bufio.Scanner를 사용하여 입력을 읽습니다
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	functionDefs := scanner.Text()

	scanner.Scan()
	calcRequests := scanner.Text()

	// TODO: 아래에 코드를 작성하세요
	// 1. Add, Subtract, Multiply, Divide 함수 정의 (mathutils 패키지 시뮬레이션)
	// 2. functionDefs 파싱: '|'로 나누어 각 정의를 얻은 후, 각각을 ':'로 나눔
	//    형식: FuncName:param1,param2:operation (예: "Add:5,3:addition")
	// 3. 패키지 정보 및 사용 가능한 함수 표시
	// 4. calcRequests 파싱 ('|'로 나눔), 계산 수행
	// 5. 결과 및 요약 통계 표시

	// 사용하지 않는 변수 경고 방지
	_ = functionDefs
	_ = calcRequests
	_ = fmt.Sprintf
	_ = strconv.Atoi
	_ = strings.Split

	// 챌린지에 명시된 요구 형식대로 출력해야 함을 기억하세요
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 & 흐름의 모든 레슨