요약 - 도형과 동작
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 19번째.
챌린지
쉬움이 챌린지에서는 인터페이스를 통해 다형성을 보여주는 통신 시스템을 만들게 됩니다. Speaker 인터페이스를 구축하고, 각자의 고유한 방식으로 "말할" 수 있는 서로 다른 타입들로 이를 구현합니다.
세 가지 입력을 받게 됩니다:
- 생성할 스피커의 수를 나타내는 문자열 (예:
"3") - 쉼표로 구분된 스피커 타입이 포함된 문자열 (예:
"person,parrot,person") - 쉼표로 구분된 스피커 이름이 포함된 문자열 (예:
"Alice,Polly,Bob")
여러분의 과제는 다음과 같습니다:
- 문자열을 반환하는
Speak()라는 하나의 메서드 시그니처를 가진Speaker인터페이스를 정의합니다. Name필드(string)를 가진Person구조체를 정의합니다.Name필드(string)를 가진Parrot구조체를 정의합니다.- 두 구조체 모두에 대해
Speak()메서드를 구현합니다:- Person은
"Hello, I'm [name]"을 반환해야 합니다. - Parrot은
"Squawk! [name] says hello!"를 반환해야 합니다.
- Person은
Speaker인터페이스 슬라이스를 매개변수로 받는makeAllSpeak라는 함수를 만듭니다.makeAllSpeak내부에서 슬라이스를 반복하며 각 스피커의Speak()메서드를 호출하고 결과를 출력합니다.- 입력을 파싱하여 제공된 타입과 이름을 기반으로 적절한 스피커 인스턴스를 생성합니다.
- 모든 스피커를
Speaker인터페이스 슬라이스에 저장합니다. - 스피커 슬라이스를 사용하여
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 호출
}