Menu
Coddy logo textTech

공개 및 비공개 이름

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

Go에서 이름의 첫 글자는 가시성을 결정합니다. 대문자로 시작하는 이름은 내보내기(exported)됩니다 (다른 패키지에서 접근 가능). 소문자로 시작하는 이름은 내보내지 않으며(unexported) (패키지 내에서 비공개임) 됩니다.

내보낸 이름 — 패키지 외부에서 보임

type User struct {
    Name  string  // 내보낸 필드
    Email string  // 내보낸 필드
}

func CreateUser(name string) User { // 내보낸 함수
    return User{Name: name}
}

내보내지 않은 이름 — 패키지 내부에서만 보임

type secret struct {     // 내보내지 않은 구조체
    password string      // 내보내지 않은 필드
}

func validate() bool {   // 내보내지 않은 함수
    return true
}

혼합형 — 일부 비공개(unexported) 필드가 포함된 공개(exported) 구조체

type Account struct {
    Username string    // 공개(Exported) - 어디서나 접근 가능
    Email    string    // 공개(Exported) - 어디서나 접근 가능
    password string    // 비공개(Unexported) - 패키지 내부에서만 접근 가능
}

이 명명 규칙은 다른 언어에서 볼 수 있는 publicprivate과 같은 접근 제어자를 대체합니다.

// 대문자 = 외부로 노출됨 (public)
// 소문자 = 외부로 노출되지 않음 (private)

func SaveData() {}  // 외부로 노출됨
func loadData() {}  // 외부로 노출되지 않음

Go에서 이 관례를 따르는 것은 필수적입니다. 다른 패키지에서 여러분의 코드를 임포트할 때, 대문자로 시작하는 이름에만 접근할 수 있습니다.

challenge icon

챌린지

중급

product.go의 모든 이름을 Go의 내보내기(exported) 명명 규칙에 따르도록 수정하세요. 다음 항목의 첫 글자를 대문자로 바꾸세요:

  • 구조체 이름: productProduct
  • 모든 필드 이름: name, price, stock
  • 모든 함수 이름: totalValue, displayInfo
  • 함수 내부의 모든 필드 참조

치트 시트

Go에서 이름의 첫 글자는 가시성(visibility)을 결정합니다:

  • 대문자 = Exported (다른 패키지에서 접근 가능)
  • 소문자 = Unexported (패키지 내부에서만 접근 가능)

내보내기된(Exported) 이름들:

type User struct {
    Name  string  // 내보내기된 필드
    Email string  // 내보내기된 필드
}

func CreateUser(name string) User { // 내보내기된 함수
    return User{Name: name}
}

내보내기되지 않은(Unexported) 이름들:

type secret struct {     // 내보내기되지 않은 구조체
    password string      // 내보내기되지 않은 필드
}

func validate() bool {   // 내보내기되지 않은 함수
    return true
}

혼합된 가시성:

type Account struct {
    Username string    // 내보내기됨 - 어디서나 접근 가능
    Email    string    // 내보내기됨 - 어디서나 접근 가능
    password string    // 내보내기되지 않음 - 패키지 내부에서만 접근 가능
}

이 명명 규칙은 다른 언어에서 볼 수 있는 publicprivate과 같은 접근 제어자를 대체합니다.

직접 해보기

package main

import "fmt"

func main() {
    var name string
    var price float64
    var stock int
    fmt.Scan(&name, &price, &stock)

    p := Product{
        Name:  name,
        Price: price,
        Stock: stock,
    }

    fmt.Println(DisplayInfo(p))
    fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}
quiz icon실력 점검

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

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