Menu
Coddy logo textTech

요약 - 도형과 동작

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

challenge icon

챌린지

쉬움

이 챌린지에서는 인터페이스를 통해 다형성을 보여주는 통신 시스템을 만들게 됩니다. Speaker 인터페이스를 구축하고, 각자의 고유한 방식으로 "말할" 수 있는 서로 다른 타입들로 이를 구현합니다.

세 가지 입력을 받게 됩니다:

  • 생성할 스피커의 수를 나타내는 문자열 (예: "3")
  • 쉼표로 구분된 스피커 타입이 포함된 문자열 (예: "person,parrot,person")
  • 쉼표로 구분된 스피커 이름이 포함된 문자열 (예: "Alice,Polly,Bob")

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

  1. 문자열을 반환하는 Speak()라는 하나의 메서드 시그니처를 가진 Speaker 인터페이스를 정의합니다.
  2. Name 필드(string)를 가진 Person 구조체를 정의합니다.
  3. Name 필드(string)를 가진 Parrot 구조체를 정의합니다.
  4. 두 구조체 모두에 대해 Speak() 메서드를 구현합니다:
    • Person은 "Hello, I'm [name]"을 반환해야 합니다.
    • Parrot은 "Squawk! [name] says hello!"를 반환해야 합니다.
  5. Speaker 인터페이스 슬라이스를 매개변수로 받는 makeAllSpeak라는 함수를 만듭니다.
  6. makeAllSpeak 내부에서 슬라이스를 반복하며 각 스피커의 Speak() 메서드를 호출하고 결과를 출력합니다.
  7. 입력을 파싱하여 제공된 타입과 이름을 기반으로 적절한 스피커 인스턴스를 생성합니다.
  8. 모든 스피커를 Speaker 인터페이스 슬라이스에 저장합니다.
  9. 스피커 슬라이스를 사용하여 makeAllSpeak를 호출합니다.

스피커는 입력에 나타나는 순서대로 생성되어야 합니다. 예를 들어, 타입이 "person,parrot,person"이고 이름이 "Alice,Polly,Bob"인 경우, 이름이 Alice인 Person을 먼저 만들고, 그 다음 이름이 Polly인 Parrot, 마지막으로 이름이 Bob인 Person을 만듭니다. 이 챌린지는 Go에서 공유 인터페이스를 통해 서로 다른 타입들이 어떻게 균일하게 처리될 수 있는지를 보여주며, 다형성의 강력함을 입증합니다.

직접 해보기

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// 입력 읽기
	var numSpeakersStr string
	var speakerTypesStr string
	var speakerNamesStr string
	
	fmt.Scanln(&numSpeakersStr)
	fmt.Scanln(&speakerTypesStr)
	fmt.Scanln(&speakerNamesStr)
	
	// 입력 파싱
	numSpeakers, _ := strconv.Atoi(numSpeakersStr)
	speakerTypes := strings.Split(speakerTypesStr, ",")
	speakerNames := strings.Split(speakerNamesStr, ",")
	
	// TODO: 아래에 코드를 작성하세요
	// 1. Speaker 인터페이스 정의
	// 2. Person 및 Parrot 구조체 정의
	// 3. 두 구조체에 대해 Speak() 메서드 구현
	// 4. makeAllSpeak 함수 생성
	// 5. 입력을 바탕으로 스피커를 생성하고 슬라이스에 저장
	// 6. 생성한 슬라이스로 makeAllSpeak 호출
	
}

로직 & 흐름의 모든 레슨