PHpullh
학습 라이브러리/Go/internal 패키지

GO · 기초 문법

internal 패키지

internal 디렉토리의 코드는 부모 디렉토리의 하위 패키지에서만 import할 수 있습니다. Go 컴파일러가 강제하는 접근 제한입니다.

기초 문법중급internalpackageaccess-controlencapsulation

핵심 설명

internal 디렉토리의 코드는 부모 디렉토리의 하위 패키지에서만 import할 수 있습니다. Go 컴파일러가 강제하는 접근 제한입니다.

Go code

package main

import "fmt"

// 디렉토리 구조:
// myapp/
// ├── cmd/server/main.go        ← internal 사용 가능
// ├── internal/
// │   ├── auth/auth.go          ← 외부 import 불가
// │   ├── db/db.go              ← 외부 import 불가
// │   └── config/config.go
// └── pkg/api/api.go            ← 외부 import 가능

// internal/config/config.go 예시:
// package config
// type Config struct {
//     DBHost string
//     Port   int
// }

func main() {
	fmt.Println("internal/ → 모듈 내부에서만 접근")
	fmt.Println("pkg/      → 외부에서도 접근 가능")
	fmt.Println("컴파일러가 internal 접근 제한을 강제합니다")
}

학습 팁

internal 패키지는 API 표면을 줄이고 구현 세부사항을 숨기는 데 효과적입니다. 라이브러리 작성 시 적극 활용하세요.

주의할 점

internal 패키지를 pkg 디렉토리 안에 넣으면 의미가 충돌합니다. internal은 모듈 루트나 cmd 근처에 배치하세요.

자주 묻는 질문

internal 패키지란 무엇인가요?

internal 디렉토리의 코드는 부모 디렉토리의 하위 패키지에서만 import할 수 있습니다. Go 컴파일러가 강제하는 접근 제한입니다.

internal 패키지 학습 시 주의할 점은 무엇인가요?

internal 패키지를 pkg 디렉토리 안에 넣으면 의미가 충돌합니다. internal 은 모듈 루트나 cmd 근처에 배치하세요.