Menu
CoddyTech

공개 및 비공개 이름

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

Go에서는 이름의 첫 글자가 공개 여부를 결정합니다. 대문자로 시작하는 이름은 내보내기된 이름이며(다른 패키지에서 접근 가능), 소문자로 시작하는 이름은 내보내기되지 않은 이름입니다(해당 패키지에서만 사용할 수 있음).

내보낸 이름: 패키지 외부에서 볼 수 있음

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
}

혼합형: 일부 비공개 필드가 있는 내보내기된 구조체

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

이 명명 규칙은 다른 언어에서 사용하는 public 및 private와 같은 접근 제한자를 대신합니다.

// 대문자 = 내보내짐 (공개)
// 소문자 = 내보내지지 않음 (비공개)

func SaveData() {}  // 내보내짐
func loadData() {}  // 내보내지지 않음

Go에서는 이 규칙을 따르는 것이 필수적입니다. 다른 패키지에서 여러분의 코드를 가져올 때, 대문자로 시작하는 이름에만 접근할 수 있습니다.

challenge icon

챌린지

중급

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

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

직접 해보기

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실력 점검

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

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

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