패키지 구조
지금까지 우리는 하나의 파일 안에서 모든 코드를 작성했습니다.
하지만 기억하시나요? 우리가 매번 코드 맨 위에 적었던 package main을요.
Go는 처음부터 패키지를 강제하는 언어입니다. 파일이 하나여도 반드시 패키지 선언이 있어야 합니다. 이제 그 이유와 의미를 제대로 알아봅시다.
package main의 의미
package main
이 한 줄은 “이 파일은 main 패키지에 속합니다”라는 뜻입니다.
Go에서 main 패키지는 특별합니다. Go가 프로그램을 실행할 때, main 패키지에서 main() 함수를 찾아서 시작합니다. 프로그램의 “정문”인 셈이죠.
package main
func main() {
// 여기서부터 프로그램이 시작됩니다
}
import의 의미
우리가 fmt.Println()을 사용할 때마다 적었던 import "fmt"도 이제 이해할 수 있습니다.
import "fmt"
fmt는 Go가 미리 만들어 놓은 표준 패키지 중 하나입니다. 출력, 입력, 문자열 포맷팅 등을 도와주는 도구 상자죠.
import는 “이 패키지를 가져다 쓰겠습니다”라는 뜻입니다.
여러 패키지를 동시에 가져올 수도 있습니다:
import (
"fmt"
"math"
"strings"
)
GoLand에서는 사용하는 패키지를 자동으로 import 해주고, 사용하지 않는 import는 자동으로 삭제해줍니다!
나만의 패키지 만들기
프로그램이 커지면, 코드를 여러 패키지로 나눌 수 있습니다.
my_project/
├── go.mod ← 프로젝트 설정 파일
├── main.go ← main 패키지 (시작점)
├── calculator/
│ └── calc.go ← calculator 패키지
└── greeting/
└── hello.go ← greeting 패키지
calculator/calc.go 파일:
package calculator
func Add(a int, b int) int {
return a + b
}
여기서 중요한 규칙이 있습니다: 함수 이름이 대문자로 시작하면 다른 패키지에서 사용할 수 있습니다.
Add→ 다른 패키지에서 사용 가능 (공개)add→ 같은 패키지에서만 사용 가능 (비공개)
이것이 Go만의 독특한 방식입니다. 다른 언어들은 public, private 같은 키워드를 쓰지만, Go는 대소문자로 결정합니다.
main.go에서 사용하기:
package main
import (
"fmt"
"my_project/calculator"
)
func main() {
result := calculator.Add(3, 5)
fmt.Println(result) // 8
}
go.mod 파일
Go 프로젝트의 시작점은 go.mod 파일입니다. 이 파일이 “이것은 하나의 Go 프로젝트입니다”라고 선언합니다.
module my_project
go 1.21
- module: 이 프로젝트의 이름 (패키지를 import할 때 사용)
- go 1.21: 사용하는 Go 버전
GoLand에서 새 프로젝트를 만들면 자동으로 생성됩니다.
Go의 표준 패키지
Go는 아주 풍부한 표준 패키지를 제공합니다:
| 패키지 | 설명 |
|---|---|
fmt | 출력, 입력, 포맷팅 |
math | 수학 함수 |
strings | 문자열 처리 |
os | 운영체제 관련 기능 |
net/http | 웹 서버, HTTP 통신 |
encoding/json | JSON 데이터 처리 |
이 표준 패키지만으로도 웹 서버를 만들 수 있다는 것이 Go의 큰 강점입니다.
실제 프로젝트는 이렇게 생겼습니다
my_api/
├── go.mod
├── main.go ← 프로그램 시작점
├── handler/ ← 요청을 처리하는 코드
│ ├── user.go
│ └── product.go
├── model/ ← 데이터 구조 정의
│ ├── user.go
│ └── product.go
└── util/ ← 도구 모음
└── helper.go
이렇게 역할별로 패키지를 나누면, “유저 요청 처리는 handler 패키지에, 데이터 구조는 model 패키지에 있겠구나!” 하고 바로 찾을 수 있습니다.
외부 패키지 사용하기
다른 개발자가 만든 패키지도 가져다 쓸 수 있습니다. 터미널에서:
go get github.com/gin-gonic/gin
이렇게 하면 go.mod에 자동으로 추가되고, 코드에서 바로 사용할 수 있습니다.
정리하자면:
- package main = 프로그램의 시작점
- import = 다른 패키지를 가져다 쓰기
- 대문자 시작 = 다른 패키지에서 사용 가능 (Go만의 규칙)
- go.mod = 프로젝트의 설정 파일
- go get = 외부 패키지를 설치하는 명령어
Go의 패키지 시스템은 단순하면서도 강력합니다. 이 규칙을 알고 나면, Go로 무엇이든 만들 준비가 된 것입니다!