한 눈에 끝내는 고랭 기초
    • 01
      시작하기에 앞서
    • 강의대상
      Go란?
      실습 환경 구축 - 구름IDE
      Hello goorm! 출력해보기
    • 02
      변수와 상수
    • 콘솔 출력 함수의 기본
      변수의 선언과 초기화
      상수의 선언과 초기화
      간단한 덧셈
      잘못된 신상정보
    • 03
      연산자
    • 연산자 종류
      연산자 우선순위
      콘솔 입력 함수의 기본
      간단한 덧셈과 곱셈
      몫과 나머지
    • 04
      자료형
    • 자료형의 종류와 특징
      문자열의 표현
      자료형의 변환
      강제 형 변환
    • 05
      콘솔 출력과 입력 함수
    • 콘솔 출력 함수(Print)
      콘솔 입력 함수(Scan)
      정돈된 표
      신상정보 입력과 출력
    • 06
      반복문 - for
    • 오로지 for
      구구단
      빛나는 이등변삼각형
    • 07
      조건문 - if/else
    • 조건에 따른 실행과 흐름 분기
      7과 9의 배수
      두 수의 차
    • 08
      분기문 - switch
    • swich문에 의한 선택적 실행
      안좋은 계산기
    • 09
      제어문
    • break, continue, goto문
      구구단2
      두 수를 더하면 99
    • 10
      컬렉션
    • 배열(Array)
      슬라이스(Slice)
      맵(Map)
      역행렬
      가장 긴 이름
      중간고사 평균 점수
    • 11
      함수
    • Go언어에서의 함수
      전역변수와 지역변수
      매개변수
      반환값(리턴값)
      익명 함수
      오름차순 정렬
      아이패드를 사주는 조건
      역학적 에너지
    • 12
      클로저
    • 외부 변수 접근 : 클로저
      동전 정리
    • 13
      구조체와 메소드
    • 구조체
      메소드
      성적 저장 프로그램
      역학적 에너지2
    • 14
      인터페이스(interface)
    • 메소드의 집합 인터페이스
      직육면체와 원기둥
    • 15
      defer와 panic()
    • 지연 처리 defer
      종료하는 panic(), 복구하는 recover()
      엘리베이터
      중간고사 평균 점수2
    • 16
      에러 처리
    • 에러 처리의 기본
      에러 출력 및 처리
      중간고사 평균 점수3
    • 17
      고루틴(Goroutine)
    • 비동기 프로세스의 기본
      고루틴의 활용
      고루틴 실습
    • 18
      채널(Channel)
    • 고루틴의 데이터 통로 : 채널
      비동기 채널과 버퍼
      동기 채널
      채널 닫기
      송신 전용, 수신 전용 채널
      채널 select문
      고루틴 실습2
      메시지 전송
      동기 채널 실습
      비동기 채널 실습
    • 19
      패키지(package)
    • 패키지의 개념
    • 20
      실전 프로젝트 - 마일리지 상점
    • 프로젝트를 시작하기 앞서
      실습모드에서 실습
      마일리지 상점의 주요 기능
      필수 구조체와 매인 메뉴
      잔여 수량, 잔여 포인트 구현
    • 21
      실전 프로젝트 - 주문하기, 장바구니 담기
    • 구매 구현(1)
      구매 구현(2)
      장바구니에 담기
      장바구니 확인(1)
      장바구니 확인(2)
    • 22
      실전 프로젝트 - 고루틴으로 배송하기
    • 배송 상태 확인(1)
      배송 상태 확인(2)
      배송 상태 확인(3)
      최종 코드
    패키지의 개념
    19 패키지(package)
    패키지의 개념

    컬렉션을 시작으로 인터페이스까지 코드의 효율성, 재사용을 위해 끝없이 묶는(모듈화) 연습을 했습니다. 변수들을 묶은 컬렉션, 객체 정보를 묶은 메소드, 기능을 묶은 함수, 메소드를 묶은 인터페이스들을 학습하면서 더 이상 없다고 생각했지만 이 모든 것을 묶은 '패키지'가 있습니다. 이렇게 한 파일로 작성된 패키지인 컴포넌트는 코드의 모듈화, 코드의 재사용을 가능하게 합니다. 이미 우리는 코드 상단에 import "fmt"라고 습관적으로 입력하면서 수 없이 써왔습니다. 이것은 우리가 기능을 만들고 구현하지 않아도 누군가 만들어놓은 코드를 재사용한다는 것을 의미합니다. 


    패키지에 관한 내용은 여러 파일을 아우르기 때문에 바로 강의 안에서 바로 실행해보는 것이 아니라 실제 프로젝트 환경인 구름IDE에서 직접 패키지를 만들고 실습해봐야 합니다. 컨테이너를 생성하고 바로 작성해보세요!  


    패키지는 두 종류가 있습니다. 바로 main 패키지와 그 외 패키지입니다. main 패키지를 제외한 모든 패키지는 개발자가 직접 작성하든 Go언어에서 제공하는 패키지든 똑같이 취급됩니다. 반면에, main 패키지는 컴파일러에 의해 특별히 인식됩니다. 컴파일러는 main 패키지를 공유 패키지(라이브러리)가 아닌 실행(executable) 프로그램으로 만듭니다. 자연스럽게 main 패키지 안에 main() 함수는 프로그램의 시작점(Entry point)이자 종료점이 됩니다. 따라서 패키지를 공유 라이브러리로 만들 때에는 main 패키지나 main 함수를 사용하면 안됩니다.


    패키지 만들기


    이미 Go언어는 강력한 내장 라이브러리가 있기 때문에 필요에 따라 얼마든지 import해서 사용할 수 있습니다. 또한 프로그램을 개발할 때 개발자가 직접 필요한 기능을 구현한 패키지를 만들고 여러 파일들 사이에서 import해서 쓸 수 있습니다.  이렇게 패키지를 통해 코드를 모듈화 하고 코드의 재사용하는 것은 프로그램의 질적인 측면에서 굉장히 중요합니다. 따라서 패키지를 사용해 작은 단위의 컴포넌트를 작성하고, 패키지들을 활용해 프로그램을 작성하는 것이 개발자의 능력이고 권장 사항입니다.  우선 '시작하기에 앞서' 챕터에 '실습 환경 구축 - 구름IDE' 강의를 보면 구름IDE를 통해 실제 프로젝트 작성 화면과 작업 환경 구축에 대해 학습했습니다. 구름IDE를 이용하면 따로 환경 변수를 설정하지 않고 컨테이너박스를 생성하는 것만으로도 작업 환경이 구축되기 때문에 적극 사용을 권장합니다.


    아래는 아무것도 하지 않고 Go 컨테이너를 생성했을 때 모습입니다.

    default

    원래 Go언어는 GOPATH 환경변수에 설정한 경로를 통해 프로그램을 실행(컴파일)합니다. 구름IDE는 컨테이너 생성과 동시에 GOPATH에 자동으로 작업 공간 경로가 설정됩니다. 이는 하단 터미널에 go env를 입력해보면 알 수 있습니다.

    default

    참고로 위 그림을 보면 GOROOT라는 것이 있는데 이 환경변수는 Go가 설치된 경로를 나타내며, 표준 패키지들이 있는 곳입니다.(/pkg)

    우리가 확인해야 할 것은 GOPATH입니다. 위 그림에 GOPATH는 'workspace/go_package'로 자동 설정되어 있습니다. 'go_package'는 컨테이너를 생성할 때 만든 컨테이너 이름입니다. 패키지는 GOPATH로 설정된 경로의 'src' 폴더에 만들어야합니다. 패키지 생성은 패키지와 같은 이름의 폴더를 만들고 그 안에 Go 파일을 만드는 것입니다.(main 패키지 제외) 아래 그림을 보면 쉽게 알 수 있습니다.

    default
    패키지를 만들 때, src 폴더 안에 패키지 이름의 디렉터리를 만들면 됩니다. go 파일은 해당 디렉터리 안에 생성하고 작성합니다. 예를 들어, 위 그림과 같이 연산을 하는 패키지를 만들 때 패키지 이름을 cal로 만들고 그 안에 특별히 덧셈을 하는 sum.go라는 파일을 생성합니다. 아래는 두 수를 더하는 함수만 있는 cal 패키지를 작성한 예시와 main() 함수에서 cal 패키지를 import 한 예시입니다.
    default
    default

    그리고 터미널에서 경로를 src로 이동 후에(main.go가 있는 디렉터리) go run main.go를 입력하면 프로그램이 실행됩니다. 

    default

    여기서 눈여겨 봐야할 점이 있습니다. 바로 함수 이름의 첫 글자입니다. 

    • 첫 글자를 소문자로 지정하면 패키지 안에서만 사용할 수 있습니다.
    • 첫 글자를 대문자로 지정하면 외부에서 사용할 수 있습니다. 위 예시가 그렇습니다.

    다양한 패키지를 만들고 여러 파일 사이에서 사용하는 법을 학습했습니다.


    그리고 여러 패키지를 import 하는 방법은 이미 다 알 것이라고 생각합니다. 그래도 다시한 번 짚고 넢어가겠습니다.

    아래 예시와 같이 여러 패키지를 동시에 import할 수 있습니다.

    go

    전역 패키지 사용하기


    전역 패키지 선언은 특별하게 사용하지 않아도 되는 용법이기 때문에 지금까지 사용하지 않았습니다. 전역 패키지는 import할 때  패키지 이름 앞에 '.'(점)을 입력하면 선언됩니다. 이는 fmt.Println() 처럼 앞에 패키지 이름을 입력하는 것이 아니라 fmt.를 생략하고 Println()와 같이 사용할 수 있습니다. 이는 함수, 변수, 상수에 동일하게 적용됩니다.


    아래 코드를 바로 실행해보세요.

    go
    실행 결과를 확인해보세요!

    패키지 별칭


    함수나 변수는 type문을 이용해 사용자 지정 형식으로 사용할 수 있습니다. 패키지도 아래와 같이 패키지 앞에 사용자 지정 이름을 붙여 사용하는 똑같은 용법이 있습니다. 이는 특히 Go언어에서 제공하는 패키지와 개발자가 직접 만든 패키지의 이름이 겹칠 때, 혹은 다른 사람이 만든 패키지와 이름이 겹칠 때 유용하게 사용할 수 있습니다.

    그리고 Go언어는 사용하지 않는 변수에 대해 굉장히 철저하다고 했습니다. 만약 선언만 해놓고 사용하지 않으면 런타임 에러가 발생합니다. 패키지도 똑같이 import만 하고 사용하지 않으면 에러가 발생합니다. 이때 패키지 이름 앞에 '_'(언더바)를 입력하면 컴파일 에러가 발생하지 않습니다. 이 기능은 디버깅할 때 주석을 하지 않고도 유용하게 사용할 수 있습니다. 


    아래 두 용법에 관한 예시 코드를 바로 실행해보세요.

    go
    실행 결과를 확인해보세요!
    질문하기