본문 바로가기
프로그래밍

👨‍💻 [Go] Go 에서 패키지 내부에 여러개의 go 파일로 나눠서 구현하는 방법은 어떻게 되나요?

by 밝음의기둥 2025. 1. 15.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

Go 에서 패키지 내부에 여러개의 go 파일로 나눠서 구현하는 방법은 어떻게 되는지 간략히 알아보았습니다.


질문 >

Go 에서 패키지 내부에 여러개의 go 파일로 나눠서 구현하는 방법은 어떻게 되나요?

답변 >

Go에서는 하나의 패키지 내부에 여러 개의 .go 파일로 코드를 나누어 작성할 수 있습니다. 이는 큰 패키지를 논리적으로 분리하여 가독성과 유지보수성을 높이는 데 유용합니다.

다음은 여러 개의 Go 파일로 패키지를 나누는 방법과 관련된 규칙, 사례를 설명합니다.


1. 기본 규칙

  1. 같은 패키지 이름 사용
    • 한 디렉토리에 있는 모든 .go 파일은 동일한 패키지 이름을 가져야 합니다.
    • 디렉토리가 패키지를 나타내며, 파일 간에는 상호 참조가 가능합니다.
  2. 파일 간 함수 및 변수 공유
    • 같은 패키지 내에서는 func, var, const, type 등을 공유할 수 있습니다.
    • 대문자로 시작하는 이름은 패키지 외부에서도 접근 가능(공용), 소문자로 시작하면 패키지 내부에서만 접근 가능(비공용)합니다.

2. 디렉토리 및 파일 구조

예: 패키지를 여러 파일로 나누기

mypackage/
├── add.go       // 덧셈 관련 함수
├── subtract.go  // 뺄셈 관련 함수
├── multiply.go  // 곱셈 관련 함수
├── divide.go    // 나눗셈 관련 함수
├── main.go      // 실행 파일


3. 코드 예제

3.1. add.go

package mypackage

// Add adds two integers and returns the result.
func Add(a, b int) int {
    return a + b
}

3.2. subtract.go

package mypackage

// Subtract subtracts the second integer from the first.
func Subtract(a, b int) int {
    return a - b
}

3.3. multiply.go

package mypackage

// Multiply multiplies two integers and returns the result.
func Multiply(a, b int) int {
    return a * b
}

3.4. divide.go

package mypackage

// Divide divides the first integer by the second and returns the result.
// If the divisor is zero, it returns zero.
func Divide(a, b int) int {
    if b == 0 {
        return 0
    }
    return a / b
}

3.5. main.go

package main

import (
    "fmt"
    "mypackage" // 사용자 정의 패키지 import
)

func main() {
    fmt.Println("Add: ", mypackage.Add(10, 5))
    fmt.Println("Subtract: ", mypackage.Subtract(10, 5))
    fmt.Println("Multiply: ", mypackage.Multiply(10, 5))
    fmt.Println("Divide: ", mypackage.Divide(10, 5))
}


4. 컴파일 및 실행

4.1. 환경 변수 설정

Go에서는 사용자 정의 패키지를 사용할 때 모듈을 설정해야 합니다.

  • 프로젝트 디렉토리에서 모듈 초기화:
go mod init myproject

  • Go 파일 빌드 및 실행:
go run main.go


5. 모범 사례

  1. 파일별로 역할 분리
    • 각 파일은 특정 기능(예: 유틸리티, 데이터 처리, API 호출 등)을 담당하도록 설계합니다.
  2. 중복된 패키지 이름 피하기
    • 디렉토리 내에서 패키지 이름은 동일해야 하지만, 디렉토리 이름은 겹치지 않도록 합니다.
  3. 공용 및 비공용 함수 구분
    • 외부로 노출할 함수는 대문자로 시작하고, 내부에서만 사용할 함수는 소문자로 시작합니다.
  4. 디렉토리 구조 활용
    • 큰 프로젝트는 디렉토리 구조를 활용해 패키지를 더 세분화할 수 있습니다.
project/
├── cmd/              // 실행 가능한 애플리케이션
│   └── main.go
├── pkg/              // 재사용 가능한 패키지
│   ├── math/
│   │   ├── add.go
│   │   ├── subtract.go
│   │   ├── multiply.go
│   │   └── divide.go
│   └── strings/
│       └── utils.go
└── go.mod            // Go 모듈 설정


6. 요약

  1. 같은 디렉토리 안의 파일은 동일한 패키지 이름을 가져야 함.
  2. 기능별로 파일을 나누어 코드 가독성을 높임.
  3. go mod init을 통해 모듈 환경을 설정하고 패키지를 관리.
  4. 공용 함수와 비공용 함수의 구분을 명확히 함.

위 방법을 활용하면 유지보수성과 확장성이 높은 Go 애플리케이션을 개발할 수 있습니다.



🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형