주니어 개발자도 이해 할 수 있는 go - namespace 편

28
주니어 개발자도 이해 있는 Go - Namespace - 2015. 1 Darion Kim

Upload: darion-kim

Post on 16-Jul-2015

2.180 views

Category:

Software


2 download

TRANSCRIPT

Page 1: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

주니어 개발자도 이해 할 수 있는 Go

- Namespace 편 -2015. 1

Darion Kim

Page 2: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

나는����������� ������������������  누구?

Darion����������� ������������������  Kim����������� ������������������  (김헌기)����������� ������������������  

디에스멘토링����������� ������������������  연구소����������� ������������������  수석보����������� ������������������  

자칭����������� ������������������  통신(통합의����������� ������������������  신,����������� ������������������  God����������� ������������������  of����������� ������������������  Integration)����������� ������������������  

[email protected]����������� ������������������  

https://www.facebook.com/groups/golangko����������� ������������������  (율이아빠)����������� ������������������  

https://www.facebook.com/groups/serverside����������� ������������������  (율이아빠)

Page 3: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

이����������� ������������������  문서는����������� ������������������  Yong����������� ������������������  Joon����������� ������������������  Moon����������� ������������������  (http://blog.naver.com/zerosum99)님과����������� ������������������  함께����������� ������������������  작성하였습니다.

Page 4: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

약속드립니다.����������� ������������������  ^^����������� ������������������  절대����������� ������������������  어렵게����������� ������������������  ����������� ������������������  얘기하지����������� ������������������  않겠습니다.

Page 5: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

그럼����������� ������������������  시작하겠습니다.����������� ������������������  ~

Page 6: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

프로그램����������� ������������������  을����������� ������������������  작성하다보면����������� ������������������  ����������� ������������������  변수����������� ������������������  및����������� ������������������  함수를����������� ������������������  여러개����������� ������������������  정의하게����������� ������������������  되고����������� ������������������  ����������� ������������������  

상황에����������� ������������������  따라����������� ������������������  이름이����������� ������������������  ����������� ������������������  

중복되는����������� ������������������  현상이����������� ������������������  발생합니다.

Page 7: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

이러한����������� ������������������  중복을����������� ������������������  피할수����������� ������������������  있도록����������� ������������������  하는����������� ������������������  문법이����������� ������������������  

네임스페이스(Namespace)����������� ������������������  ����������� ������������������  입니다. In����������� ������������������  general,����������� ������������������  a����������� ������������������  namespace����������� ������������������  is����������� ������������������  a����������� ������������������  container����������� ������������������  for����������� ������������������  a����������� ������������������  set����������� ������������������  of����������� ������������������  identifiers.����������� ������������������  

(네임스페이스는����������� ������������������  식별자들을����������� ������������������  위한����������� ������������������  컨테이너입니다.)

Page 8: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

여기서는����������� ������������������  

Java����������� ������������������  를����������� ������������������  예로����������� ������������������  들어보겠습니다.����������� ������������������  ^^

여기서는����������� ������������������  

Go����������� ������������������  를

예로����������� ������������������  들어보겠습니다.����������� ������������������  ^^

Page 9: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

Java에서는����������� ������������������  package+class����������� ������������������  ����������� ������������������  조합으로����������� ������������������  ����������� ������������������  

중복����������� ������������������  생성을����������� ������������������  방지합니다.

Go에서는����������� ������������������  

package����������� ������������������  ����������� ������������������  로����������� ������������������  ����������� ������������������  

중복����������� ������������������  생성을����������� ������������������  방지합니다.

Page 10: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

파일����������� ������������������  시스템에서����������� ������������������  

src����������� ������������������  디렉토리����������� ������������������  기준의����������� ������������������  ����������� ������������������  하위����������� ������������������  디렉토리����������� ������������������  구조는����������� ������������������  ����������� ������������������  

package의����������� ������������������  계층관계를����������� ������������������  ����������� ������������������  표현합니다.����������� ������������������  

파일����������� ������������������  시스템에서����������� ������������������  

src����������� ������������������  디렉토리����������� ������������������  기준의����������� ������������������  하위����������� ������������������  디렉토리����������� ������������������  구조는����������� ������������������  ����������� ������������������  

package의����������� ������������������  계층관계를����������� ������������������  ����������� ������������������  표현합니다.����������� ������������������  

Page 11: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

소스����������� ������������������  분류����������� ������������������  목적으로����������� ������������������  

여러����������� ������������������  개의����������� ������������������  *.java����������� ������������������  파일을����������� ������������������  사용하며����������� ������������������  ����������� ������������������  

빌드시����������� ������������������  class별로����������� ������������������  *.class����������� ������������������  파일이����������� ������������������  생성됩니다.����������� ������������������  

소스����������� ������������������  분류����������� ������������������  목적으로����������� ������������������  

여러개의����������� ������������������  *.go����������� ������������������  파일을����������� ������������������  사용하며����������� ������������������  ����������� ������������������  

빌드시����������� ������������������  하나의����������� ������������������  *.a����������� ������������������  파일이����������� ������������������  생성됩니다.

Page 12: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

패키지를����������� ������������������  선언할����������� ������������������  때는����������� ������������������  

src����������� ������������������  디렉토리����������� ������������������  기준으로����������� ������������������  *.java����������� ������������������  파일의����������� ������������������  

디렉토리����������� ������������������  경로까지����������� ������������������  .����������� ������������������  구분자를����������� ������������������  사용하여����������� ������������������  표현����������� ������������������  합니다.����������� ������������������  

dir����������� ������������������  src/a1/b1/c1����������� ������������������  package����������� ������������������  a1.b1.c1;����������� ������������������  

패키지를����������� ������������������  선언할����������� ������������������  때는����������� ������������������  

선언할����������� ������������������  *.go����������� ������������������  파일의����������� ������������������  ����������� ������������������  디렉토리����������� ������������������  이름으로����������� ������������������  표현����������� ������������������  합니다.����������� ������������������  dir����������� ������������������  src/a1/b1/c1����������� ������������������  package����������� ������������������  c1����������� ������������������  

Page 13: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

하나의����������� ������������������  디렉토리에는����������� ������������������  ����������� ������������������  여러개의����������� ������������������  *.java����������� ������������������  파일을����������� ������������������  ����������� ������������������  선언����������� ������������������  할����������� ������������������  수����������� ������������������  있습니다.����������� ������������������  

하나����������� ������������������  *.java����������� ������������������  파일에����������� ������������������  ����������� ������������������  여러개의����������� ������������������  class를����������� ������������������  ����������� ������������������  선언����������� ������������������  할����������� ������������������  수����������� ������������������  있습니다.����������� ������������������  

하나의����������� ������������������  class����������� ������������������  선언����������� ������������������  안에는����������� ������������������  ����������� ������������������  여러개의����������� ������������������  field,����������� ������������������  method를����������� ������������������  선언����������� ������������������  할����������� ������������������  수����������� ������������������  있습니다.

하나의����������� ������������������  디렉토리에는����������� ������������������  ����������� ������������������  여러����������� ������������������  개의����������� ������������������  *.go����������� ������������������  파일을����������� ������������������  ����������� ������������������  선언����������� ������������������  할����������� ������������������  수����������� ������������������  있습니다.����������� ������������������  

하나����������� ������������������  *.go����������� ������������������  파일에����������� ������������������  ����������� ������������������  여러����������� ������������������  개의����������� ������������������  var,����������� ������������������  const,����������� ������������������  type,����������� ������������������  interface를����������� ������������������  ����������� ������������������  선언����������� ������������������  할����������� ������������������  수����������� ������������������  있습니다.

Page 14: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

Java����������� ������������������  Namespace

PackageBClassAClassBClassC

PackageA

Go����������� ������������������  Namespace

PackageA

PackageB

PackageC

Page 15: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

예제로����������� ������������������  더하기,����������� ������������������  빼기,����������� ������������������  곱하기,����������� ������������������  나누기����������� ������������������  를����������� ������������������  구현해보겠습니다.

Page 16: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

java����������� ������������������  의����������� ������������������  src����������� ������������������  디렉토리����������� ������������������  구조입니다.

go����������� ������������������  의����������� ������������������  src����������� ������������������  디렉토리����������� ������������������  구조입니다.go_namespace는����������� ������������������  프로젝트����������� ������������������  이름이자����������� ������������������  최상위����������� ������������������  package����������� ������������������  이름����������� ������������������  입니다.

Page 17: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

먼저����������� ������������������  곱하기����������� ������������������  package와����������� ������������������  class를����������� ������������������  선언해����������� ������������������  보겠습니다.����������� ������������������  

선언된����������� ������������������  package����������� ������������������  이름이����������� ������������������  ����������� ������������������  디렉토리����������� ������������������  경로입니다.

go����������� ������������������  의����������� ������������������  package����������� ������������������  이름은����������� ������������������  java����������� ������������������  와는����������� ������������������  다르게����������� ������������������  

현재����������� ������������������  *.go����������� ������������������  파일이����������� ������������������  속한����������� ������������������  ����������� ������������������  디렉토리����������� ������������������  이름으로����������� ������������������  선언되어����������� ������������������  있습니다.

Page 18: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

이번에는����������� ������������������  나누기����������� ������������������  package와����������� ������������������  class를����������� ������������������  선언해����������� ������������������  보겠습니다.����������� ������������������  

곱하기����������� ������������������  package의����������� ������������������  ����������� ������������������  하위����������� ������������������  패키지로����������� ������������������  선언하였습니다.

이번에도����������� ������������������  go����������� ������������������  의����������� ������������������  package����������� ������������������  이름은����������� ������������������  java����������� ������������������  와는����������� ������������������  다르게����������� ������������������  ����������� ������������������  

현재����������� ������������������  *.go����������� ������������������  파일이����������� ������������������  속한����������� ������������������  ����������� ������������������  디렉토리����������� ������������������  이름으로����������� ������������������  선언되어����������� ������������������  있습니다.

Page 19: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

빼기����������� ������������������  package와����������� ������������������  class를����������� ������������������  선언해����������� ������������������  보겠습니다.����������� ������������������  

빼기����������� ������������������  package는����������� ������������������  곱하기와����������� ������������������  같은����������� ������������������  레벨의����������� ������������������  ����������� ������������������  

더하기����������� ������������������  package����������� ������������������  ����������� ������������������  하위����������� ������������������  package로����������� ������������������  선언되어����������� ������������������  있습니다.

여전히����������� ������������������  go����������� ������������������  의����������� ������������������  package����������� ������������������  이름은����������� ������������������  java����������� ������������������  와는����������� ������������������  다르게����������� ������������������  ����������� ������������������  

현재����������� ������������������  *.go����������� ������������������  파일이����������� ������������������  속한����������� ������������������  ����������� ������������������  디렉토리����������� ������������������  이름으로����������� ������������������  선언되어����������� ������������������  있습니다.

Page 20: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

java����������� ������������������  의����������� ������������������  더하기����������� ������������������  package와����������� ������������������  class에����������� ������������������  기존의����������� ������������������  빼기,����������� ������������������  곱하기,����������� ������������������  나누기����������� ������������������  package����������� ������������������  및����������� ������������������  class를����������� ������������������  사용해����������� ������������������  보았습니다.����������� ������������������  

import����������� ������������������  규칙이����������� ������������������  package이름+.+class이름인����������� ������������������  것을����������� ������������������  알수����������� ������������������  있습니다.

Page 21: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

go����������� ������������������  의����������� ������������������  더하기����������� ������������������  package에����������� ������������������  기존의����������� ������������������  빼기,����������� ������������������  곱하기,����������� ������������������  나누기����������� ������������������  package����������� ������������������  사용해����������� ������������������  보았습니다.����������� ������������������  

import����������� ������������������  규칙이����������� ������������������  package����������� ������������������  디렉토리����������� ������������������  경로인����������� ������������������  것을����������� ������������������  알수����������� ������������������  있습니다.

Page 22: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

java����������� ������������������  를����������� ������������������  실행하려면����������� ������������������  main����������� ������������������  함수를����������� ������������������  구현해야����������� ������������������  합니다.����������� ������������������  

여기서도����������� ������������������  import����������� ������������������  형식을����������� ������������������  확인����������� ������������������  할����������� ������������������  수����������� ������������������  있습니다.

Page 23: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

go����������� ������������������  를����������� ������������������  실행하려면����������� ������������������  main����������� ������������������  함수를����������� ������������������  구현해야����������� ������������������  합니다.����������� ������������������  

여기서도����������� ������������������  import����������� ������������������  형식을����������� ������������������  확인����������� ������������������  할����������� ������������������  수����������� ������������������  있습니다.

fmt는����������� ������������������  go에서����������� ������������������  제공하는����������� ������������������  기본����������� ������������������  package입니다.

Page 24: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

java����������� ������������������  의����������� ������������������  package����������� ������������������  와����������� ������������������  class����������� ������������������  구조입니다.

go����������� ������������������  의����������� ������������������  package����������� ������������������  구조입니다.����������� ������������������  

package로만����������� ������������������  표현되어����������� ������������������  있습니다.

Page 25: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

생성����������� ������������������  된����������� ������������������  ����������� ������������������  class����������� ������������������  파일입니다.����������� ������������������  

class����������� ������������������  마다����������� ������������������  *.class����������� ������������������  파일을����������� ������������������  확인����������� ������������������  할����������� ������������������  수����������� ������������������  있습니다.

생성����������� ������������������  된����������� ������������������  package����������� ������������������  파일입니다.����������� ������������������  

package에����������� ������������������  하나의����������� ������������������  *.a����������� ������������������  package����������� ������������������  파일을����������� ������������������  확인����������� ������������������  할����������� ������������������  수����������� ������������������  있습니다.

Page 26: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

java����������� ������������������  에는����������� ������������������  없는����������� ������������������  ����������� ������������������  

하나����������� ������������������  더����������� ������������������  

go����������� ������������������  는����������� ������������������  실행����������� ������������������  파일도����������� ������������������  ����������� ������������������  만들어����������� ������������������  줍니다.

Page 27: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

정리����������� ������������������  

Go는����������� ������������������  package����������� ������������������  단위가����������� ������������������  네임스페이스이다.����������� ������������������  

package는����������� ������������������  현재����������� ������������������  디렉토리����������� ������������������  명으로����������� ������������������  선언한다.����������� ������������������  

package����������� ������������������  import시����������� ������������������  디렉토리����������� ������������������  경로명으로����������� ������������������  선언한다.

Page 28: 주니어 개발자도 이해 할 수 있는 Go - Namespace 편

이상����������� ������������������  율이아빠����������� ������������������  였습니다.����������� ������������������  ^^