개발/Go
[Golang] Go 언어 완전 초보 가이드: 패키지(package) 구조
일요일좋아하는사람
2025. 5. 7. 20:29
728x90
반응형
Go 언어는 간단하고 명확한 패키지 구조를 통해 대규모 프로젝트도 체계적으로 관리할 수 있도록 설계되었습니다. 이번 글에서는 Go에서의 패키지 구조가 어떤 역할을 하는지, 실제로 어떻게 구성하고 사용하는지, 각 옵션과 세부적인 구성 요소들은 무엇인지, 그리고 실제 예제를 통해 Go 패키지를 어떻게 활용하는지 알아보겠습니다.
Go 패키지의 역할
Go에서 패키지는 코드의 논리적인 단위를 나누는 기본적인 방법입니다. 하나의 패키지는 특정 기능을 중심으로 관련된 함수, 구조체, 인터페이스 등을 묶는 컨테이너 역할을 하며, 코드의 재사용성과 모듈화를 촉진합니다. 또한, 패키지를 통해 외부 라이브러리를 불러와 사용하는 것도 가능합니다. 패키지를 효과적으로 구성하면 코드의 유지보수성과 확장성이 크게 향상됩니다.
Go 패키지 구조 사용법
Go 프로젝트는 일반적으로 다음과 같은 기본 디렉토리 구조를 따릅니다:
myproject/
├── go.mod
├── main.go
├── pkg/
│ └── mathutil/
│ ├── add.go
│ └── subtract.go
└── internal/
└── helper/
└── format.go
- go.mod: Go 모듈을 정의하는 파일로, 프로젝트의 루트에 위치
- main.go: 프로그램의 진입점이 되는 파일
- pkg/: 외부에서도 사용할 수 있는 재사용 가능한 코드 패키지를 포함
- internal/: 외부에서는 접근할 수 없고, 프로젝트 내부에서만 사용할 수 있는 패키지 포함
패키지 선언과 사용
- 각 .go 파일의 첫 줄에는 어떤 패키지에 속하는지를 package 키워드로 선언해야 합니다.
- 외부 패키지를 사용하려면 import 키워드를 사용하여 불러옵니다.
예:
package mathutil
func Add(a, b int) int {
return a + b
}
package main
import (
"fmt"
"myproject/pkg/mathutil"
)
func main() {
result := mathutil.Add(3, 4)
fmt.Println("Result:", result)
}
옵션들과 세부 사용법
- main 패키지
- 역할: 프로그램 실행 진입점 정의
- 사용법: main 함수가 포함된 package main 사용
- 예제:
package main
func main() {
// 실행 시 가장 먼저 호출됨
}
- 사용자 정의 패키지
- 역할: 기능별로 코드를 나누고 재사용 가능하게 함
- 사용법: 새 폴더 생성 후 .go 파일 내 package 선언
- 예제:
// 파일: mathutil/add.go
package mathutil
func Add(a, b int) int {
return a + b
}
- 내부 패키지 (internal)
- 역할: 외부에서 접근할 수 없고 내부 전용 유틸리티 저장
- 사용법: internal/ 폴더 하위에 위치하면 외부 접근 차단됨
- 예제:
// 파일: internal/helper/format.go
package helper
func FormatMessage(msg string) string {
return "[INFO]: " + msg
}
- 패키지 내 함수 및 변수의 공개/비공개
- 역할: 대소문자로 함수/변수의 외부 공개 여부 결정
- 사용법: 대문자로 시작하면 공개(Public), 소문자면 비공개(Private)
- 예제:
func PublicFunc() {}
func privateFunc() {}
- go.mod 파일과 모듈 시스템
- 역할: 프로젝트의 의존성 및 모듈 경로 정의
- 사용법: go mod init <모듈이름>으로 생성
- 예제:
go mod init myproject
- go install과 go build
- 역할: 패키지를 빌드하거나 설치하여 실행파일 생성
- 사용법: 터미널에서 실행
- 예제:
go build
./myproject
실제 사용 예제와 결과
디렉토리 구조:
myproject/
├── go.mod
├── main.go
└── pkg/
└── mathutil/
└── add.go
go.mod:
module myproject
go 1.20
main.go:
package main
import (
"fmt"
"myproject/pkg/mathutil"
)
func main() {
fmt.Println("3 + 4 =", mathutil.Add(3, 4))
}
pkg/mathutil/add.go:
package mathutil
func Add(a, b int) int {
return a + b
}
위 프로젝트를 빌드하고 실행하면 다음과 같은 결과가 출력됩니다:
3 + 4 = 7
이처럼 Go 패키지 구조를 잘 활용하면 프로젝트를 깔끔하고 체계적으로 유지할 수 있으며, 모듈성과 재사용성을 극대화할 수 있습니다.
728x90
반응형