Menu
Coddy logo textTech

익명 구조체

Coddy GO 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 107개 중 15번째.

anonymous struct는 이름이 지정된 타입이 없는 구조체입니다. 구조를 정의하고 type 키워드를 사용하지 않고 한 단계에서 인스턴스를 생성합니다.

person := struct {
    Name string
    Age  int
}{
    Name: "Alice",
    Age:  30,
}

이렇게 하면 재사용 가능한 타입을 선언하지 않고 직접 struct 값을 생성합니다. anonymous struct는 코드의 다른 부분에서 사용되지 않을 빠르고 일회성인 데이터 구조가 필요할 때 유용합니다.

일반적인 사용 사례는 하나의 함수나 테스트에 관련된 데이터를 그룹화하는 것입니다.

config := struct {
    Host string
    Port int
}{
    Host: "localhost",
    Port: 8080,
}
fmt.Println(config.Host) // localhost

익명 구조체는 각 테스트 케이스에 고유한 fields가 있는 테이블 기반 tests에서도 인기가 있습니다.

tests := []struct {
    input    int
    expected int
}{
    {1, 2},
    {5, 10},
}

anonymous 구조체에는 타입 이름이 없으므로 메서드를 정의하거나 다른 곳에서 해당 타입을 재사용할 수 없습니다. 이를 임시적이고 한정된 범위의 데이터 그룹화에 사용하세요. 여러 번 참조할 모든 것에는 대신 이름이 지정된 구조체 타입을 정의하세요.

challenge icon

챌린지

쉬움

재사용 가능한 타입이 필요 없는 일회성 데이터 그룹화에서 익명 구조체가 언제 유용한지 보여 주는 간단한 configuration 시스템을 만들어 보겠습니다.

코드를 두 파일로 구성합니다:

  • config.go: 서버 이름(string), 포트(int), 디버그 모드(bool)를 parameters로 받는 GetServerConfig 함수를 만듭니다. 이 함수는 이 세 값을 Name, Port, Debug fields로 포함하는 익명 구조체를 반환해야 합니다. 이 configuration은 한 곳에서만 사용되므로 이름이 지정된 타입을 정의할 필요가 없습니다.
  • main.go: input에서 서버 configuration values를 읽고, GetServerConfig 함수를 호출한 다음 configuration 세부 정보를 표시합니다.

다음 input이 제공됩니다:

  • 1번째 줄: 서버 이름
  • 2번째 줄: 포트 번호
  • 3번째 줄: 디버그 모드 (true 또는 false)

출력 format:

Server: [Name]
Port: [Port]
Debug: [Debug]

예를 들어 api-server, 8080, true가 주어지면 출력은 다음과 같아야 합니다:

Server: api-server
Port: 8080
Debug: true

익명 구조체를 사용하면 한 번만 사용되는 타입으로 코드베이스를 복잡하게 만들지 않고 그룹화된 데이터를 반환할 수 있다는 점에 주목하세요.

직접 해보기

package main

import (
	"fmt"
)

func main() {
	// 입력 값 읽기
	var name string
	var port int
	var debug bool

	fmt.Scanln(&name)
	fmt.Scanln(&port)
	fmt.Scanln(&debug)

	// TODO: 입력 값으로 GetServerConfig 호출
	// 그리고 반환된 익명 구조체를 저장

	// TODO: 필요한 형식으로 구성을 출력:
	// Server: [Name]
	// Port: [Port]
	// Debug: [Debug]
}
quiz icon실력 점검

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

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Go 컴파일러