간단한 패키지 만들기
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨. 68개 중 53번째.
이제 나만의 사용자 지정 패키지를 만들어 볼 시간입니다! 패키지를 만들면 코드를 재사용 가능한 모듈로 구성하여 여러 프로그램에서 가져오고 사용할 수 있습니다.
패키지를 만들려면 먼저 파일의 맨 위에서 package 키워드 뒤에 패키지 이름을 선언합니다. 우리의 calculator 패키지에는 다음을 사용합니다.
package calculator이 패키지 안에서 함수, 변수 및 타입을 정의할 수 있습니다. 대문자로 시작하는 식별자인 내보낸 식별자만 다른 패키지에서 액세스할 수 있다는 점을 기억하세요. 내보낸 Add function을 정의하는 방법은 다음과 같습니다.
package calculator
func Add(a, b int) int {
return a + b
}다른 파일에서 사용자 지정 패키지를 사용하려면 다른 패키지와 마찬가지로 이를 import합니다. main 패키지에서 내보낸 functions를 호출할 수 있습니다:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}이러한 모듈식 접근 방식은 코드를 더 체계적으로 구성하고, 코드를 중복하지 않고 여러 프로그램에서 기능을 재사용할 수 있게 해 줍니다.
챌린지
쉬움사용자 지정 mathutils package를 만들고 기본 수학 연산을 구현한 다음, main program에서 이를 사용하세요. 이 challenge에서는 package를 만들고, exported functions를 define하며, 다른 program에서 사용할 수 있도록 사용자 지정 package를 import하는 능력을 테스트합니다.
다음 두 가지 입력이 주어집니다.
"function1:param1,param2:operation|function2:param1,param2:operation"형식의 function definitions를 포함하는 string (예:"Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")"operation1:value1,value2|operation2:value1,value2|operation3:value1,value2"형식의 calculation requests를 포함하는 string (예:"Add:15,25|Multiply:6,8|Subtract:50,20")
다음 작업을 수행하세요.
- 맨 위에
package mathutils를 선언하여mathutilspackage를 Create합니다. - 첫 번째 입력을 pipes(
|)로 split하여 개별 function definitions를 가져옵니다. - 각 function definition을 colons로 split하여 function name, parameters, operation type을 가져옵니다.
mathutilspackage에 다음 exported functions를 Create합니다.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로 나눈 값을 반환합니다(integer division).
- main program에서
mathutilspackage를 import합니다. - package information header를 표시합니다:
"=== MATHUTILS PACKAGE DEMO ===" - 첫 번째 입력을 parse하고 available functions를 표시합니다.
"Available functions in mathutils package:"- 각 function에 대해:
"- [function_name]: Performs [operation_type] on two integers"
- 두 번째 입력을 pipes로 split하여 개별 calculation requests를 가져옵니다.
- 각 calculation request를 colons로 split하여 function name과 parameters를 가져옵니다.
- parameters를 commas로 split하여 두 개의 integer 값을 가져옵니다.
strconv.Atoi를 사용하여 parameter strings를 integers로 변환합니다.- calculation process header를 표시합니다:
"Performing calculations:" - 각 calculation request에 대해:
mathutilspackage에서 적절한 function을 호출합니다.- 다음을 표시합니다:
"mathutils.[function_name]([param1], [param2]) = [result]"
- summary statistics를 Calculate하고 표시합니다.
"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 usage confirmation을 표시합니다.
"Package demonstration completed successfully""All functions from mathutils package executed correctly"
입력 strings를 split하려면 strings package를, strings를 integers로 변환하려면 strconv package를, formatted output에는 fmt package를 사용하세요. 대문자로 시작하는 functions만 exported되며 다른 packages에서 accessible하다는 점을 기억하세요.
Important: 두 입력 줄 모두 entries 사이의 delimiter로 pipes(|)를 사용합니다. 첫 번째 입력의 각 entry는 FunctionName:param1,param2:operationtype 형식입니다. 먼저 |로 split한 다음, 각 entry를 :로 split하여 function name(index 0)과 operation type(index 2)을 추출하세요.
이 challenge는 사용자 지정 packages를 통해 reusable code를 Create하는 방법과 functionality를 logical modules로 organize하는 방법을 보여 줍니다.
직접 해보기
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: Create your mathutils package functions here
// 별도의 파일을 사용할 수 없으므로 함수를 직접 정의합니다
// 이것들은 일반적으로 별도의 패키지 파일에 있을 것입니다
func main() {
// 공백을 올바르게 처리하기 위해 bufio.Scanner를 사용하여 입력을 읽습니다
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: 아래에 코드를 작성하세요
// 1. Define Add, Subtract, Multiply, Divide functions (simulating mathutils package)
// 2. functionDefs 파싱: '|'로 분할하여 각 정의를 얻은 다음, 각각을 ':'로 분할합니다
// 형식: FuncName:param1,param2:operation (예: "Add:5,3:addition")
// 3. Display package information and available functions
// 4. Parse calcRequests (split by '|'), perform calculations
// 5. 결과와 요약 통계를 표시합니다
// 사용하지 않는 변수 경고를 억제합니다
_ = functionDefs
_ = calcRequests
_ = fmt.Sprintf
_ = strconv.Atoi
_ = strings.Split
// 챌린지에 명시된 대로 필요한 형식으로 출력하는 것을 기억하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Go 컴파일러