공개 및 비공개 이름
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에서는 이 규칙을 따르는 것이 필수적입니다. 다른 패키지에서 여러분의 코드를 가져올 때, 대문자로 시작하는 이름에만 접근할 수 있습니다.
챌린지
중급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))
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
8에러 처리와 OOP
error 인터페이스사용자 정의 에러 타입에러 래핑 (fmt.Errorf)센티넬 에러errors.Is()와 errors.As()Panic, Defer, Recover요약 - 파일 파서직접 연습해 보세요: 온라인 Go 컴파일러