Search

[Go 기초] [#11] 패키지와 모듈

작성일시
2024/12/26 14:41
수정일시
2024/12/26 15:20
스택
Go
카테고리
Tutorial
태그
패키지
모듈
1 more property

패키지와 모듈

Go 언어에서 패키지(Package)와 모듈(Module)은 코드를 구조화하고 재사용 가능한 단위로 관리하는 핵심 개념입니다. 이번 강의에서는 패키지와 모듈의 기본 개념과 사용법에 대해 알아보겠습니다.

패키지 (Package)

패키지는 Go 언어에서 코드를 구조화하는 기본 단위입니다. 관련된 기능들을 하나의 패키지로 묶어서 관리할 수 있습니다.

패키지 선언

package main // 메인 패키지 선언 import ( "fmt" // 표준 패키지 임포트 "strings" // 문자열 처리 패키지 ) func main() { fmt.Println("Hello, Package!") }
Go
복사

주요 특징

모든 Go 파일은 반드시 패키지 선언으로 시작해야 합니다.
main 패키지는 실행 가능한 프로그램의 시작점입니다.
다른 패키지의 기능을 사용하려면 import 문을 사용해야 합니다.

패키지 가시성

Go 언어에서는 식별자의 첫 글자를 대문자로 시작하면 외부에서 접근 가능한 public이 되고, 소문자로 시작하면 패키지 내부에서만 접근 가능한 private이 됩니다.
package calculator // Add는 외부에서 접근 가능 (public) func Add(a, b int) int { return a + b } // multiply는 패키지 내부에서만 접근 가능 (private) func multiply(a, b int) int { return a * b }
Go
복사

모듈 (Module)

모듈은 관련된 Go 패키지들의 집합으로, 버전 관리와 의존성 관리를 위한 단위입니다. go.mod 파일을 통해 모듈의 정보와 의존성을 관리합니다.
모듈명은 항상 유니크한 명칭과 참조할 수 있는 위치를 가지는 것이 중요하기 때문에 보통 리포지토리의 위치를 가르키는 URL을 많이 사용합니다.
그렇기 때문에 github 에서 Go 언어로 되어 있는 소스 코드들의 go.mod 파일을 열어 보면 이하와 같이 URL 형식의 모듈명을 채택하고 있는 것을 많이 볼 수 있습니다.

모듈 생성

# 새로운 모듈 초기화 # 이때, 모듈명은 `example.com/mymodule` 입니다. go mod init example.com/mymodule # 의존성 모듈 정리 및 다운로드 go mod tidy
Bash
복사

go mod tidy?

go mod tidy 명령어는 모듈의 의존성을 정리하고 관리하는 중요한 도구입니다. 이 명령어는 다음과 같은 작업을 수행합니다:
현재 코드에서 사용하지 않는 의존성 모듈을 제거합니다.
코드에서 필요한 의존성 모듈을 자동으로 다운로드합니다.
go.mod와 go.sum 파일을 최신 상태로 업데이트합니다.
그러므로 프로젝트를 시작할 때나 의존성을 변경한 후에는 항상 go mod tidy를 실행하는 것이 좋습니다.

go.mod 파일 예시

go.mod 파일에는 현재 모듈의 의존성 패키지들이 기록되어 있습니다.
module example.com/mymodule go 1.21 require ( github.com/gorilla/mux v1.8.0 github.com/pkg/errors v0.9.1 )
Go
복사

모듈 사용하기

외부 모듈을 사용하려면 go get 명령어를 사용하거나 go.mod 파일에 직접 의존성을 추가할 수 있습니다.
# 외부 모듈 설치 go get github.com/gorilla/mux
Bash
복사

예제

간단한 계산기 패키지를 만들어보며 패키지와 모듈의 사용법을 익혀보겠습니다.
// calc/calculator.go package calc // Calculator 구조체 정의 type Calculator struct { result float64 } // Add 메서드 - 덧셈 func (c *Calculator) Add(num float64) { c.result += num } // GetResult 메서드 - 결과 반환 func (c *Calculator) GetResult() float64 { return c.result }
Go
복사
// main.go package main import ( "fmt" "example.com/mymodule/calc" ) func main() { calculator := &calc.Calculator{} calculator.Add(5) calculator.Add(3) fmt.Printf("결과: %.2f\n", calculator.GetResult()) }
Go
복사

결론

패키지와 모듈은 Go 언어에서 코드를 구조화하고 재사용하는데 매우 중요한 개념입니다.
패키지를 통해 관련 기능을 묶어서 관리하고, 모듈을 통해 버전 관리와 의존성을 효과적으로 관리할 수 있습니다.
강의 목록

참조