주니어 개발자도 이해 할 수 있는 go - namespace 편
TRANSCRIPT
주니어 개발자도 이해 할 수 있는 Go
- Namespace 편 -2015. 1
Darion Kim
나는����������� ������������������ 누구?
Darion����������� ������������������ Kim����������� ������������������ (김헌기)����������� ������������������
디에스멘토링����������� ������������������ 연구소����������� ������������������ 수석보����������� ������������������
자칭����������� ������������������ 통신(통합의����������� ������������������ 신,����������� ������������������ God����������� ������������������ of����������� ������������������ Integration)����������� ������������������
[email protected]����������� ������������������
https://www.facebook.com/groups/golangko����������� ������������������ (율이아빠)����������� ������������������
https://www.facebook.com/groups/serverside����������� ������������������ (율이아빠)
이����������� ������������������ 문서는����������� ������������������ Yong����������� ������������������ Joon����������� ������������������ Moon����������� ������������������ (http://blog.naver.com/zerosum99)님과����������� ������������������ 함께����������� ������������������ 작성하였습니다.
약속드립니다.����������� ������������������ ^^����������� ������������������ 절대����������� ������������������ 어렵게����������� ������������������ ����������� ������������������ 얘기하지����������� ������������������ 않겠습니다.
그럼����������� ������������������ 시작하겠습니다.����������� ������������������ ~
프로그램����������� ������������������ 을����������� ������������������ 작성하다보면����������� ������������������ ����������� ������������������ 변수����������� ������������������ 및����������� ������������������ 함수를����������� ������������������ 여러개����������� ������������������ 정의하게����������� ������������������ 되고����������� ������������������ ����������� ������������������
상황에����������� ������������������ 따라����������� ������������������ 이름이����������� ������������������ ����������� ������������������
중복되는����������� ������������������ 현상이����������� ������������������ 발생합니다.
이러한����������� ������������������ 중복을����������� ������������������ 피할수����������� ������������������ 있도록����������� ������������������ 하는����������� ������������������ 문법이����������� ������������������
네임스페이스(Namespace)����������� ������������������ ����������� ������������������ 입니다. In����������� ������������������ general,����������� ������������������ a����������� ������������������ namespace����������� ������������������ is����������� ������������������ a����������� ������������������ container����������� ������������������ for����������� ������������������ a����������� ������������������ set����������� ������������������ of����������� ������������������ identifiers.����������� ������������������
(네임스페이스는����������� ������������������ 식별자들을����������� ������������������ 위한����������� ������������������ 컨테이너입니다.)
여기서는����������� ������������������
Java����������� ������������������ 를����������� ������������������ 예로����������� ������������������ 들어보겠습니다.����������� ������������������ ^^
여기서는����������� ������������������
Go����������� ������������������ 를
예로����������� ������������������ 들어보겠습니다.����������� ������������������ ^^
Java에서는����������� ������������������ package+class����������� ������������������ ����������� ������������������ 조합으로����������� ������������������ ����������� ������������������
중복����������� ������������������ 생성을����������� ������������������ 방지합니다.
Go에서는����������� ������������������
package����������� ������������������ ����������� ������������������ 로����������� ������������������ ����������� ������������������
중복����������� ������������������ 생성을����������� ������������������ 방지합니다.
파일����������� ������������������ 시스템에서����������� ������������������
src����������� ������������������ 디렉토리����������� ������������������ 기준의����������� ������������������ ����������� ������������������ 하위����������� ������������������ 디렉토리����������� ������������������ 구조는����������� ������������������ ����������� ������������������
package의����������� ������������������ 계층관계를����������� ������������������ ����������� ������������������ 표현합니다.����������� ������������������
파일����������� ������������������ 시스템에서����������� ������������������
src����������� ������������������ 디렉토리����������� ������������������ 기준의����������� ������������������ 하위����������� ������������������ 디렉토리����������� ������������������ 구조는����������� ������������������ ����������� ������������������
package의����������� ������������������ 계층관계를����������� ������������������ ����������� ������������������ 표현합니다.����������� ������������������
소스����������� ������������������ 분류����������� ������������������ 목적으로����������� ������������������
여러����������� ������������������ 개의����������� ������������������ *.java����������� ������������������ 파일을����������� ������������������ 사용하며����������� ������������������ ����������� ������������������
빌드시����������� ������������������ class별로����������� ������������������ *.class����������� ������������������ 파일이����������� ������������������ 생성됩니다.����������� ������������������
소스����������� ������������������ 분류����������� ������������������ 목적으로����������� ������������������
여러개의����������� ������������������ *.go����������� ������������������ 파일을����������� ������������������ 사용하며����������� ������������������ ����������� ������������������
빌드시����������� ������������������ 하나의����������� ������������������ *.a����������� ������������������ 파일이����������� ������������������ 생성됩니다.
패키지를����������� ������������������ 선언할����������� ������������������ 때는����������� ������������������
src����������� ������������������ 디렉토리����������� ������������������ 기준으로����������� ������������������ *.java����������� ������������������ 파일의����������� ������������������
디렉토리����������� ������������������ 경로까지����������� ������������������ .����������� ������������������ 구분자를����������� ������������������ 사용하여����������� ������������������ 표현����������� ������������������ 합니다.����������� ������������������
dir����������� ������������������ src/a1/b1/c1����������� ������������������ package����������� ������������������ a1.b1.c1;����������� ������������������
패키지를����������� ������������������ 선언할����������� ������������������ 때는����������� ������������������
선언할����������� ������������������ *.go����������� ������������������ 파일의����������� ������������������ ����������� ������������������ 디렉토리����������� ������������������ 이름으로����������� ������������������ 표현����������� ������������������ 합니다.����������� ������������������ dir����������� ������������������ src/a1/b1/c1����������� ������������������ package����������� ������������������ c1����������� ������������������
하나의����������� ������������������ 디렉토리에는����������� ������������������ ����������� ������������������ 여러개의����������� ������������������ *.java����������� ������������������ 파일을����������� ������������������ ����������� ������������������ 선언����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있습니다.����������� ������������������
하나����������� ������������������ *.java����������� ������������������ 파일에����������� ������������������ ����������� ������������������ 여러개의����������� ������������������ class를����������� ������������������ ����������� ������������������ 선언����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있습니다.����������� ������������������
하나의����������� ������������������ class����������� ������������������ 선언����������� ������������������ 안에는����������� ������������������ ����������� ������������������ 여러개의����������� ������������������ field,����������� ������������������ method를����������� ������������������ 선언����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있습니다.
하나의����������� ������������������ 디렉토리에는����������� ������������������ ����������� ������������������ 여러����������� ������������������ 개의����������� ������������������ *.go����������� ������������������ 파일을����������� ������������������ ����������� ������������������ 선언����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있습니다.����������� ������������������
하나����������� ������������������ *.go����������� ������������������ 파일에����������� ������������������ ����������� ������������������ 여러����������� ������������������ 개의����������� ������������������ var,����������� ������������������ const,����������� ������������������ type,����������� ������������������ interface를����������� ������������������ ����������� ������������������ 선언����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있습니다.
Java����������� ������������������ Namespace
PackageBClassAClassBClassC
PackageA
Go����������� ������������������ Namespace
PackageA
PackageB
PackageC
예제로����������� ������������������ 더하기,����������� ������������������ 빼기,����������� ������������������ 곱하기,����������� ������������������ 나누기����������� ������������������ 를����������� ������������������ 구현해보겠습니다.
java����������� ������������������ 의����������� ������������������ src����������� ������������������ 디렉토리����������� ������������������ 구조입니다.
go����������� ������������������ 의����������� ������������������ src����������� ������������������ 디렉토리����������� ������������������ 구조입니다.go_namespace는����������� ������������������ 프로젝트����������� ������������������ 이름이자����������� ������������������ 최상위����������� ������������������ package����������� ������������������ 이름����������� ������������������ 입니다.
먼저����������� ������������������ 곱하기����������� ������������������ package와����������� ������������������ class를����������� ������������������ 선언해����������� ������������������ 보겠습니다.����������� ������������������
선언된����������� ������������������ package����������� ������������������ 이름이����������� ������������������ ����������� ������������������ 디렉토리����������� ������������������ 경로입니다.
go����������� ������������������ 의����������� ������������������ package����������� ������������������ 이름은����������� ������������������ java����������� ������������������ 와는����������� ������������������ 다르게����������� ������������������
현재����������� ������������������ *.go����������� ������������������ 파일이����������� ������������������ 속한����������� ������������������ ����������� ������������������ 디렉토리����������� ������������������ 이름으로����������� ������������������ 선언되어����������� ������������������ 있습니다.
이번에는����������� ������������������ 나누기����������� ������������������ package와����������� ������������������ class를����������� ������������������ 선언해����������� ������������������ 보겠습니다.����������� ������������������
곱하기����������� ������������������ package의����������� ������������������ ����������� ������������������ 하위����������� ������������������ 패키지로����������� ������������������ 선언하였습니다.
이번에도����������� ������������������ go����������� ������������������ 의����������� ������������������ package����������� ������������������ 이름은����������� ������������������ java����������� ������������������ 와는����������� ������������������ 다르게����������� ������������������ ����������� ������������������
현재����������� ������������������ *.go����������� ������������������ 파일이����������� ������������������ 속한����������� ������������������ ����������� ������������������ 디렉토리����������� ������������������ 이름으로����������� ������������������ 선언되어����������� ������������������ 있습니다.
빼기����������� ������������������ package와����������� ������������������ class를����������� ������������������ 선언해����������� ������������������ 보겠습니다.����������� ������������������
빼기����������� ������������������ package는����������� ������������������ 곱하기와����������� ������������������ 같은����������� ������������������ 레벨의����������� ������������������ ����������� ������������������
더하기����������� ������������������ package����������� ������������������ ����������� ������������������ 하위����������� ������������������ package로����������� ������������������ 선언되어����������� ������������������ 있습니다.
여전히����������� ������������������ go����������� ������������������ 의����������� ������������������ package����������� ������������������ 이름은����������� ������������������ java����������� ������������������ 와는����������� ������������������ 다르게����������� ������������������ ����������� ������������������
현재����������� ������������������ *.go����������� ������������������ 파일이����������� ������������������ 속한����������� ������������������ ����������� ������������������ 디렉토리����������� ������������������ 이름으로����������� ������������������ 선언되어����������� ������������������ 있습니다.
java����������� ������������������ 의����������� ������������������ 더하기����������� ������������������ package와����������� ������������������ class에����������� ������������������ 기존의����������� ������������������ 빼기,����������� ������������������ 곱하기,����������� ������������������ 나누기����������� ������������������ package����������� ������������������ 및����������� ������������������ class를����������� ������������������ 사용해����������� ������������������ 보았습니다.����������� ������������������
import����������� ������������������ 규칙이����������� ������������������ package이름+.+class이름인����������� ������������������ 것을����������� ������������������ 알수����������� ������������������ 있습니다.
go����������� ������������������ 의����������� ������������������ 더하기����������� ������������������ package에����������� ������������������ 기존의����������� ������������������ 빼기,����������� ������������������ 곱하기,����������� ������������������ 나누기����������� ������������������ package����������� ������������������ 사용해����������� ������������������ 보았습니다.����������� ������������������
import����������� ������������������ 규칙이����������� ������������������ package����������� ������������������ 디렉토리����������� ������������������ 경로인����������� ������������������ 것을����������� ������������������ 알수����������� ������������������ 있습니다.
java����������� ������������������ 를����������� ������������������ 실행하려면����������� ������������������ main����������� ������������������ 함수를����������� ������������������ 구현해야����������� ������������������ 합니다.����������� ������������������
여기서도����������� ������������������ import����������� ������������������ 형식을����������� ������������������ 확인����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있습니다.
go����������� ������������������ 를����������� ������������������ 실행하려면����������� ������������������ main����������� ������������������ 함수를����������� ������������������ 구현해야����������� ������������������ 합니다.����������� ������������������
여기서도����������� ������������������ import����������� ������������������ 형식을����������� ������������������ 확인����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있습니다.
fmt는����������� ������������������ go에서����������� ������������������ 제공하는����������� ������������������ 기본����������� ������������������ package입니다.
java����������� ������������������ 의����������� ������������������ package����������� ������������������ 와����������� ������������������ class����������� ������������������ 구조입니다.
go����������� ������������������ 의����������� ������������������ package����������� ������������������ 구조입니다.����������� ������������������
package로만����������� ������������������ 표현되어����������� ������������������ 있습니다.
생성����������� ������������������ 된����������� ������������������ ����������� ������������������ class����������� ������������������ 파일입니다.����������� ������������������
class����������� ������������������ 마다����������� ������������������ *.class����������� ������������������ 파일을����������� ������������������ 확인����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있습니다.
생성����������� ������������������ 된����������� ������������������ package����������� ������������������ 파일입니다.����������� ������������������
package에����������� ������������������ 하나의����������� ������������������ *.a����������� ������������������ package����������� ������������������ 파일을����������� ������������������ 확인����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있습니다.
java����������� ������������������ 에는����������� ������������������ 없는����������� ������������������ ����������� ������������������
하나����������� ������������������ 더����������� ������������������
go����������� ������������������ 는����������� ������������������ 실행����������� ������������������ 파일도����������� ������������������ ����������� ������������������ 만들어����������� ������������������ 줍니다.
정리����������� ������������������
Go는����������� ������������������ package����������� ������������������ 단위가����������� ������������������ 네임스페이스이다.����������� ������������������
package는����������� ������������������ 현재����������� ������������������ 디렉토리����������� ������������������ 명으로����������� ������������������ 선언한다.����������� ������������������
package����������� ������������������ import시����������� ������������������ 디렉토리����������� ������������������ 경로명으로����������� ������������������ 선언한다.
이상����������� ������������������ 율이아빠����������� ������������������ 였습니다.����������� ������������������ ^^