간단한 패키지 만들기
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)
}이러한 모듈식 접근 방식은 코드를 더 체계적으로 만들고, 코드 중복 없이 여러 프로그램에서 기능을 재사용할 수 있게 해줍니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움기본적인 수학 연산을 수행하는 커스텀 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")
여러분의 과제는 다음과 같습니다:
- 상단에
package mathutils를 선언하여mathutils패키지를 생성합니다. - 첫 번째 입력을 파이프(
|)를 기준으로 분할하여 개별 함수 정의를 파싱합니다. - 각 함수 정의에 대해 콜론(
:)을 기준으로 분할하여 함수 이름, 매개변수 및 연산 유형을 가져옵니다. 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로 나눈 값(정수 나눗셈)을 반환합니다.
- 메인 프로그램에서
mathutils패키지를 임포트합니다. - 패키지 정보 헤더를 표시합니다:
"=== MATHUTILS PACKAGE DEMO ===" - 첫 번째 입력을 파싱하고 사용 가능한 함수를 표시합니다:
"Available functions in mathutils package:"- 각 함수에 대해:
"- [function_name]: Performs [operation_type] on two integers"
- 두 번째 입력을 파이프를 기준으로 분할하여 개별 계산 요청을 파싱합니다.
- 각 계산 요청에 대해 콜론을 기준으로 분할하여 함수 이름과 매개변수를 가져옵니다.
- 매개변수를 쉼표(
,)를 기준으로 분할하여 두 개의 정수 값을 가져옵니다. strconv.Atoi를 사용하여 매개변수 문자열을 정수로 변환합니다.- 계산 프로세스 헤더를 표시합니다:
"Performing calculations:" - 각 계산 요청에 대해:
mathutils패키지에서 적절한 함수를 호출합니다.- 다음을 표시합니다:
"mathutils.[function_name]([param1], [param2]) = [result]"
- 요약 통계를 계산하고 표시합니다:
"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]"
- 패키지 사용 확인 메시지를 표시합니다:
"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
// 챌린지에 명시된 요구 형식대로 출력해야 함을 기억하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.