Chapter 7. 패키지

조성권·2021년 8월 9일
0
post-thumbnail

오늘은 패키지(package) 사용법에 대해 알아보도록 하겠다.
Golang은 각종 기능과 라이브러리를 패키지로 만들어 제공하며 소스코드에서 사용하기 위해서 import문을 통해 패키지명을 추가하여 사용한다.

1. 패키지 사용하기

1-1. 패키지 호출

golang에선 위에서 언급한 것처럼 import문을 통해 패키지를 호출한다.
그럼 예시를 통해 사용법에 대해 좀 더 자세히 알아보도록 하겠다.

package main

import "fmt"
import "runtime"

func main() {
	fmt.Println("CPU's count: ",runtime.NumCPU()) // 8
}

위 예시에선 크게 fmt, runtime라이브러리를 사용하였다.
runtime 패키지에 내장되어 있는 cpu갯수 호출 함수를 사용하여 현재 CPU의 갯수를 호출하는 것이다.

1-2. 2개 이상의 패키지 호출

1-1 예제는 사용하고자 하는 패키지의 갯수만큼 import를 기재하였다.
이는 n개의 패키지를 사용할 때는 n번 import를 작성해야한다는 것이기에 비효율적일 수 있다.
조금 더 간편하게 작성하는 방법에 대해 알아보겠다.

package main

import (
	"fmt"
    	"runtime"
)

func main() {
	fmt.Println("CPU's count: ", runtime.NumCPU())
}

위 예제의 다른 점은 import를 소괄호로 묶어서 한번만 사용했다는 것이다.
import해야하는 패키지명이 많다면 이렇게 괄호 내부에 본인이 사용하고자 하는 패키지명을 기재하는 것이 훨씬 효율적이라 할 수 있다.

주의: import 내부에 콤마(,)를 사용하지 않는다.

2. 전역 패키지

이번엔 전역 패키지에 대해 알아보도록 하겠다.
'전역 패키지'과 '로컬 패키지'의 차이는 다음과 같다.

  • 전역 패키지: 하나의 프로젝트 내, 모든 영역에서 사용할 수 있는 패키지
  • 로컬 패키지: 현재 파일 내부에서 사용할 수 있으며 다른 파일에서 필요할 경우, 추가로 import를 통해 기재해줘야 한다.

golang에서 전역 패키지를 사용하는 방법에 대해 알아보겠다.

package main

import . "fmt"

func main() {
	Println("Hello World")
}

기존에 사용하던 부분과 차이점이 무엇일까?

import와 "패키지명" 사이에 온점(.)이 존재한다는 것이다.
golang에선 이를 통해 '전역 패키지'와 '로컬 패키지'를 구분한다.

또 한가지 다른 점을 발견하였는가?

우리는 기존에 출력문을 사용할 때, fmt.Println(~)로 사용했다.
하지만 '전역 패키지'로 사용하고 나서부턴, println(~)로 사용한다.

전역 패키지로 사용하면, 내부 함수 호출 시, 패키지명을 적을 필요가 없다.

전역변수는 이처럼 코드 수를 줄여주는 장점을 가지고 있지만 당연히 단점도 존재한다.

모든 영역에서 사용 가능하기 때문에 함수, 변수, 상수 이름이 중복될 수 있다. 따라서 유닛 테스트같은 특별한 상황에서만 사용하는 것을 지향한다.

3. 패키지 별칭

3-1 패키지 별칭 사용

패키지명이 길고 자주 사용되는 경우, 사용하기 유용한 기능이라 볼 수 있다.
패키지명을 그대로 사용하는 것이 아니라 본인이 원하는 이름으로 변경하여 사용하는 것이다.
아래 예제를 통해 알아보도록 하겠다.

package main

import f "fmt"

func main() {
	f.Println("Hello World")
}

위 예제에서 우리는 "fmt" 패키지를 "f"라는 별칭으로 재정의했다.
그러므로 출력문이 필요할 때, f.Println(~)로 조금 더 간단히 사용할 수 있었다.

  • 패키지 별칭 사용 방법
    import 별칭 "패키지명"
    ex) import f "fmt"

너무 자주쓰게 된다면 패키지의 본질이 헷갈려 가독성이 떨어질 수 있으니 필요한 부분에 대해서만 별칭을 사용하는 것이 좋을 듯 하다.

4. 패키지 사용 시, 주의 점

마지막으로 패키지 사용 시, 주의할 점에 대해 알아보겠다.

  • golang은 변수든 패키지든 선언하고 호출하지 않으면 Compile Error를 뱉는다.

무슨 이야기인지 코드를 통해 알아보겠다.

package main

import "fmt"
import "runtime"

func main() {
	fmt.Println("Hello World")
}

위 코드는 겉보기에 문제가 없어보이지만 Compile Error를 뱉는다.
그 이유는 import "runtime"을 통해 패키지를 선언했지만 실제 사용하지 않았기 때문이다.

이처럼 golang은 다른 언어들과 달리 실제 사용하지 않으면 Compile Error를 뱉는 단점이 있다.

그래서 실제 사용하지 않을 경우, 사용하지 않는다는 것을 알려줘야 한다.
아래 예시를 다시 확인해보겠다.

package main

import (
	"fmt"
	_ "runtime"

func main() {
	fmt.Println("Hello World")
}

차이점이 무엇인지 찾았는가?

바로, ('_')를 통해 사용하지 않음을 기재하였다.
사용하지 않는 패키지 앞에 '_'를 사용해주면 Compile 시, golang은 해당 패키지의 사용여부를 문제삼지 않는다.

그러므로 정상적으로 실행되는 것을 확인할 수 있다.

  • 미사용 패키지에 대한 처리
    import _ "패키지명"
    ex) import _ "runtime"

마무리

오늘은 패키지를 선언하고 사용하는 방법에 대해 배워보았다.
golang은 다른 언어와 비교했을 때, 장점도 있지만 단점도 있는 것 같다. 그만큼 더 새로운 언어인거 같기에 깊게 배워보고 싶다!
계속 앞으로 전진 전진!!

전체 소스 git 링크
https://github.com/cho876/Go/blob/main/Prac07/prac07.go

profile
천천히, 완벽히 배워나가고자 하는 웹 서비스 엔지니어

0개의 댓글