Menu
Coddy logo textTech

요약 - 유틸리티 만들기

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

challenge icon

챌린지

쉬움

문자열 조작 함수를 포함하는 포괄적인 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")

수행해야 할 작업은 다음과 같습니다:

  1. package stringutil을 선언하여 stringutil 패키지를 생성합니다.
  2. 첫 번째 입력을 쉼표(,)로 분할하여 개별 함수 사양을 파싱합니다.
  3. 각 함수 사양에 대해 콜론(:)으로 분할하여 함수 이름과 설명을 가져옵니다.
  4. stringutil 패키지에 다음 내보내기 함수들을 구현합니다:
    • Reverse(s string) string - 문자의 순서가 반전된 문자열을 반환합니다.
    • ToUpper(s string) string - 대문자로 변환된 문자열을 반환합니다.
    • ToLower(s string) string - 소문자로 변환된 문자열을 반환합니다.
    • Length(s string) int - 문자열의 길이를 반환합니다.
  5. 메인 프로그램에서 stringutil 패키지를 임포트합니다.
  6. 패키지 헤더를 표시합니다: "=== STRINGUTIL PACKAGE DEMONSTRATION ==="
  7. 사용 가능한 함수를 표시합니다:
    • "Available functions in stringutil package:"
    • 첫 번째 입력의 각 함수에 대해: "- [function_name]: [description]"
  8. 두 번째 입력을 파이프(|)로 분할하여 개별 테스트 문자열을 파싱합니다.
  9. 테스트 헤더를 표시합니다: "Testing stringutil functions:"
  10. 각 테스트 문자열에 대해 모든 함수를 시연합니다:
    • "Testing with: \"[test_string]\""
    • " stringutil.Reverse: \"[reversed_result]\""
    • " stringutil.ToUpper: \"[uppercase_result]\""
    • " stringutil.ToLower: \"[lowercase_result]\""
    • " stringutil.Length: [length_result]"
  11. 통계를 계산하고 표시합니다:
    • "=== 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]"
  12. 가장 긴 문자열과 가장 짧은 문자열을 표시합니다:
    • "Longest string: \"[longest_string]\" (length: [length])"
    • "Shortest string: \"[shortest_string]\" (length: [length])"
  13. 완료 메시지를 표시합니다: "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)
}

로직 & 흐름의 모든 레슨