20250114

init함수, main함수 관련 - golang

init함수, main함수 관련 - golang

init 함수는 패키지 초기화 작업을 위해 사용됩니다.

- init 함수는 패키지가 처음 로드될 때 자동으로 호출됩니다.

- init 함수는, main함수보다 아래에 있던, 위에 있던, 먼저 실행됩니다.

- init함수는 가독성을 위해서, 관례상, 예의상 main함수보다 위에 배치합니다.

- 명시적으로 호출할 수 없습니다.(자동호출됨. 개발자가 직접 호출은 못함)

- 패키지 내 init 함수는 파일 상단에서 아래로, 왼쪽에서 오른쪽 순서로 실행됩니다.

- 패키지 의존 관계에 따라 import된 순서대로 실행됩니다.

- 너무 많은 init 함수는 코드 가독성을 떨어뜨릴 수 있고, init함수는 단순 초기화 작업만 담당.

- init 함수는 자동 실행되므로, 예상치 못한 동작을 디버깅하기 어려울 수 있습니다.


init 함수는 함수처럼 선언하지만, 파라미터나 반환값이 없습니다.

func init() {
// 초기화 코드
}

- 하나의 파일에 init 함수를 여러 개 정의할 수 있습니다.

- 같은 패키지 내의 파일에 각각 init 함수를 정의할 수도 있습니다.

// 패키지 초기화: 변수 초기화 또는 외부 데이타베이 연결

func init() {
globalVar = 42
fmt.Println("패키지 초기화 완료!")
}

의존성 처리: 패키지가 의존하는 리소스 또는 설정을 준비.

// 검증작업: 패키지 설정이나 환경 변수를 확인

func init() {
if os.Getenv("APP_ENV") == "" {
log.Fatal("APP_ENV 환경 변수가 필요합니다!")
}
}


main 함수는 프로그램의 시작점으로, 실행 로직을 포함합니다.

- main 함수는 Go 프로그램의 시작점이자 핵심 실행부입니다.

Go 런타임은 프로그램 실행 시 main 패키지의 main 함수를 찾아 실행합니다.

- main 함수는 프로그램 실행의 시작점입니다. 1개만 있어야 함.

- main 함수는 프로그램 실행의 시작점입니다.

- main 함수는 프로그램 실행의 시작점입니다.

- 프로그램의 진입점 입니다.

- Go 프로그램은 반드시 하나의 main 패키지를 가져야 하며, main 패키지의 main 함수가 실행됩니다.

- main 함수는 프로그램 실행 시 호출되는 첫 번째 함수입니다(단, init 함수가 먼저 실행된 뒤 호출).

- 필수 함수 입니다.

- main 함수는 프로그램 실행을 위해 반드시 정의해야 합니다.

- 정의하지 않으면 컴파일 오류가 발생합니다.

- main 함수는 반드시 main 패키지에만 존재할 수 있습니다.

- 다른 패키지에서는 main 함수 이름을 사용할 수 없습니다.

// 반환값이 없고, 매개변수를 받지 않습니다.

func main() {
// 프로그램 실행 로직
}

- 다른 패키지를 호출하거나 사용하는 작업을 수행합니다.

- 전체 프로그램의 실행 흐름을 제어합니다.

- main 함수가 호출되기 전에 필요한 초기화 작업은 init 함수에서 처리됩니다.

package main // Go 프로그램은 반드시 하나의 패키지에서 시작해야 합니다.
// main 패키지는 Go 프로그램의 진입점 역할을 합니다.

import ( // 외부 패키지를 현재 파일에 가져오는 데 사용됩니다.
"fmt" // fmt는 표준 라이브러리 중 하나로, 데이터를 출력하거나 형식을 지정하는 기능
)

func init() {
fmt.Println("init 함수 실행")
}

func main() {
fmt.Println("main 함수 실행")
}

- main 함수는 반환값을 가질 수 없습니다. 즉, func main() int는 불가능합니다.

- 다른 함수처럼 main()을 호출할 수 없습니다.

- 하나의 프로그램에서 main 함수는 하나만 정의할 수 있습니다.