요약 - 유틸리티 만들기
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 57번째.
챌린지
쉬움문자열 조작 함수를 포함하는 포괄적인 stringutil 패키지를 생성하고, 메인 프로그램에서 그 사용법을 시연하세요. 이 챌린지는 커스텀 유틸리티 패키지를 만들고, 내보내기(exported) 함수를 구현하며, 다른 프로그램에서 해당 패키지를 사용하는 능력을 테스트합니다.
두 개의 입력을 받게 됩니다:
"function1:description1,function2:description2"형식의 함수 사양이 포함된 문자열 (예:"Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")- 파이프(|)로 구분된 테스트 문자열이 포함된
"string1|string2|string3"형식의 문자열 (예:"hello|Go Programming|WORLD")
수행해야 할 작업은 다음과 같습니다:
package stringutil을 선언하여stringutil패키지를 생성합니다.- 첫 번째 입력을 쉼표(,)로 분할하여 개별 함수 사양을 파싱합니다.
- 각 함수 사양에 대해 콜론(:)으로 분할하여 함수 이름과 설명을 가져옵니다.
stringutil패키지에 다음 내보내기 함수들을 구현합니다:Reverse(s string) string- 문자의 순서가 반전된 문자열을 반환합니다.ToUpper(s string) string- 대문자로 변환된 문자열을 반환합니다.ToLower(s string) string- 소문자로 변환된 문자열을 반환합니다.Length(s string) int- 문자열의 길이를 반환합니다.
- 메인 프로그램에서
stringutil패키지를 임포트합니다. - 패키지 헤더를 표시합니다:
"=== STRINGUTIL PACKAGE DEMONSTRATION ===" - 사용 가능한 함수를 표시합니다:
"Available functions in stringutil package:"- 첫 번째 입력의 각 함수에 대해:
"- [function_name]: [description]"
- 두 번째 입력을 파이프(|)로 분할하여 개별 테스트 문자열을 파싱합니다.
- 테스트 헤더를 표시합니다:
"Testing stringutil functions:" - 각 테스트 문자열에 대해 모든 함수를 시연합니다:
"Testing with: \"[test_string]\""" stringutil.Reverse: \"[reversed_result]\""" stringutil.ToUpper: \"[uppercase_result]\""" stringutil.ToLower: \"[lowercase_result]\""" stringutil.Length: [length_result]"
- 통계를 계산하고 표시합니다:
"=== STATISTICS ===""Total test strings processed: [number_of_test_strings]""Functions available in package: [number_of_functions_from_first_input]""Total function calls made: [total_function_calls]"
- 가장 긴 문자열과 가장 짧은 문자열을 표시합니다:
"Longest string: \"[longest_string]\" (length: [length])""Shortest string: \"[shortest_string]\" (length: [length])"
- 완료 메시지를 표시합니다:
"Package demonstration completed successfully"
입력 문자열을 분할하고 텍스트를 조작하려면 strings 패키지를 사용하고, 형식화된 출력을 위해서는 fmt 패키지를 사용하세요. Reverse 함수의 경우, 문자열을 룬(rune) 슬라이스로 변환하고 순서를 반전시킨 후 다시 문자열로 변환해야 합니다. 다른 패키지에서 접근할 수 있도록 모든 내보내기 함수는 대문자로 시작해야 함을 기억하세요. 이 챌린지는 재사용 가능한 유틸리티 패키지를 만들고 관련 기능을 함께 구성하는 방법을 보여줍니다.
직접 해보기
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: 여기에 stringutil 패키지 함수를 생성하세요
// 별도의 파일을 사용할 수 없으므로, 함수를 직접 정의합니다
// 이 함수들은 보통 별도의 패키지 파일에 위치합니다
// func Reverse(s string) string {
// // 룬(rune)으로 변환하고, 뒤집은 다음, 다시 문자열로 변환합니다
// }
// func ToUpper(s string) string {
// // strings.ToUpper를 사용합니다
// }
// func ToLower(s string) string {
// // strings.ToLower를 사용합니다
// }
// func Length(s string) int {
// // len(s)를 반환합니다
// }
func main() {
// 공백을 올바르게 처리하기 위해 bufio.Scanner를 사용하여 입력을 읽습니다
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionSpecs := scanner.Text()
scanner.Scan()
testStrings := scanner.Text()
// 함수 사양 파싱
funcList := strings.Split(functionSpecs, ",")
// 테스트 문자열 파싱
testList := strings.Split(testStrings, "|")
// TODO: 아래에 코드를 작성하세요
// 1. 패키지 헤더 표시
// 2. funcList에서 사용 가능한 함수 표시 (배열 길이 확인)
// 3. 각 테스트 문자열로 모든 함수 테스트
// 4. 통계 계산 및 표시
// 5. 가장 긴/짧은 문자열 찾기 및 표시 (testList에 요소가 있는지 확인)
// 6. 완료 메시지 표시
// 다음과 같이 stringutil 패키지 함수를 사용해야 함을 기억하세요:
// Reverse(testString)
// ToUpper(testString)
// ToLower(testString)
// Length(testString)
}