Menu
Coddy logo textTech

인터페이스 정의하기

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

이제 인터페이스가 개념적으로 무엇인지 이해했으므로, Go에서 실제로 인터페이스를 정의하는 방법을 배워보겠습니다. 인터페이스는 interface 키워드와 그 뒤에 중괄호로 감싸인 메서드 시그니처 집합을 사용하여 정의됩니다.

인터페이스를 정의하기 위한 기본 구문은 다음과 같습니다:

type InterfaceName interface {
    MethodName() ReturnType
    AnotherMethod(parameter Type) ReturnType
}

인터페이스는 메서드 시그니처(메서드 이름, 매개변수, 반환 타입)만 포함하며 구현은 포함하지 않는다는 점에 유의하세요. 인터페이스는 이러한 메서드가 어떻게 작동해야 하는지는 명시하지 않고, 어떤 메서드가 존재해야 하는지만을 명시합니다.

예를 들어, 이를 구현하는 모든 타입이 Area 메서드를 갖도록 요구하는 간단한 Shaper 인터페이스를 정의하는 방법은 다음과 같습니다:

type Shaper interface {
    Area() float64
}

이 인터페이스는 일종의 계약을 정의합니다. Shaper로 간주되려는 모든 타입은 매개변수가 없고 float64를 반환하는 Area 메서드를 반드시 구현해야 합니다. 인터페이스는 해당 타입이 무엇인지 또는 면적을 어떻게 계산하는지에는 관심이 없으며, 오직 올바른 시그니처를 가진 메서드가 존재하는지만 확인합니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

challenge icon

챌린지

쉬움

이 챌린지에서는 간단한 미디어 플레이어 시스템을 만들며 Go에서 인터페이스를 정의하는 연습을 합니다. 다양한 유형의 미디어 장치에 대한 계약을 설정하는 인터페이스를 정의하게 됩니다.

하나의 입력을 받게 됩니다:

  • 미디어 동작을 나타내는 문자열 (예: "play", "pause", 또는 "stop")

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

  1. 세 개의 메서드 시그니처를 가진 MediaPlayer라는 이름의 인터페이스를 정의하세요:
    • 문자열을 반환하는 Play()
    • 문자열을 반환하는 Pause()
    • 문자열을 반환하는 Stop()
  2. 입력된 동작에 따라, MediaPlayer 인터페이스에서 해당 메서드 시그니처를 "MediaPlayer interface requires: [MethodName]() string" 형식으로 출력하세요.

출력문은 위에서 정의한 인터페이스를 반영하기 위한 것입니다. 즉, 주어진 동작에 대해 MediaPlayer 인터페이스가 어떤 메서드 시그니처를 요구하는지 설명하는 것입니다. 프로그램이 자신의 인터페이스 계약을 검사하고 보고하는 것이라고 생각하세요.

메서드 이름은 인터페이스 정의의 일부이므로 대문자로 시작(내보내기 가능)해야 합니다. 입력이 "play"인 경우 "MediaPlayer interface requires: Play() string"을 출력하고, "pause"인 경우 "MediaPlayer interface requires: Pause() string"을, "stop"인 경우 "MediaPlayer interface requires: Stop() string"을 출력하세요.

이 챌린지는 메서드 시그니처를 사용하여 인터페이스를 정의하고, 이를 구현하는 모든 타입이 충족해야 하는 계약을 설정하는 기본 개념에 중점을 둡니다.

치트 시트

인터페이스는 interface 키워드 뒤에 중괄호로 묶인 메서드 시그니처를 사용하여 정의됩니다:

type InterfaceName interface {
    MethodName() ReturnType
    AnotherMethod(parameter Type) ReturnType
}

인터페이스는 메서드 시그니처(이름, 매개변수, 반환 타입)만 포함하며 구현은 포함하지 않습니다:

type Shaper interface {
    Area() float64
}

인터페이스의 모든 메서드를 구현하는 모든 타입은 해당 인터페이스 계약을 자동으로 충족합니다.

직접 해보기

package main

import "fmt"

func main() {
    // 입력을 읽습니다
    var action string
    fmt.Scanln(&action)
    
    // TODO: 여기에 MediaPlayer 인터페이스를 정의하세요
    
    // TODO: 아래에 동작을 처리하고 필요한 출력을 출력하는 코드를 작성하세요
    
    // 결과 출력
    // 다음 형식으로 출력해야 함을 기억하세요: "MediaPlayer interface requires: [MethodName]() string"
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 & 흐름의 모든 레슨