공개 및 비공개 이름
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) - 패키지 내부에서만 접근 가능
}이 명명 규칙은 다른 언어에서 볼 수 있는 public 및 private과 같은 접근 제어자를 대체합니다.
// 대문자 = 외부로 노출됨 (public)
// 소문자 = 외부로 노출되지 않음 (private)
func SaveData() {} // 외부로 노출됨
func loadData() {} // 외부로 노출되지 않음Go에서 이 관례를 따르는 것은 필수적입니다. 다른 패키지에서 여러분의 코드를 임포트할 때, 대문자로 시작하는 이름에만 접근할 수 있습니다.
챌린지
중급product.go의 모든 이름을 Go의 내보내기(exported) 명명 규칙에 따르도록 수정하세요. 다음 항목의 첫 글자를 대문자로 바꾸세요:
- 구조체 이름:
product→Product - 모든 필드 이름:
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 // 내보내기되지 않음 - 패키지 내부에서만 접근 가능
}이 명명 규칙은 다른 언어에서 볼 수 있는 public 및 private과 같은 접근 제어자를 대체합니다.
직접 해보기
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))
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
8에러 처리와 OOP
error 인터페이스사용자 정의 에러 타입에러 래핑 (fmt.Errorf)센티넬 에러errors.Is()와 errors.As()Panic, Defer, Recover요약 - 파일 파서