|
1 | 1 | ---
|
2 | 2 | layout: tour
|
3 |
| -title: Packages and Imports |
4 |
| -language: ko |
| 3 | +title: 패키지와 임포트 |
5 | 4 |
|
6 |
| -discourse: true |
| 5 | +discourse: false |
7 | 6 |
|
8 | 7 | partof: scala-tour
|
9 | 8 |
|
10 | 9 | num: 35
|
| 10 | +language: ko |
| 11 | + |
11 | 12 | previous-page: named-arguments
|
12 |
| -next-page: type-inference |
13 | 13 | ---
|
14 | 14 |
|
15 |
| -# Packages and Imports |
| 15 | +# 패키지와 임포트 |
| 16 | + |
| 17 | +스칼라는 패키지를 사용하여 프로그램을 모듈화할 수 있는 네임스페이스를 만든다. |
| 18 | + |
| 19 | +## 패키지 만들기 |
| 20 | + |
| 21 | +패키지는 스칼라 파일 맨 위에 하나 이상의 패키지 이름을 선언하여 만들어진다. |
| 22 | + |
| 23 | +``` |
| 24 | +package users |
| 25 | +
|
| 26 | +class User |
| 27 | +``` |
| 28 | + |
| 29 | +패키지의 이름을 스칼라 파일을 담고 있는 폴더와 같게 하는 규칙이 있다. 하지만, 스칼라는 파일 레이아웃에 한정되지 않는다. `package users`를 위한 sbt 프로젝트의 디렉토리 구조는 아래와 비슷하다. |
| 30 | + |
| 31 | +``` |
| 32 | +- ExampleProject |
| 33 | + - build.sbt |
| 34 | + - project |
| 35 | + - src |
| 36 | + - main |
| 37 | + - scala |
| 38 | + - users |
| 39 | + User.scala |
| 40 | + UserProfile.scala |
| 41 | + UserPreferences.scala |
| 42 | + - test |
| 43 | +``` |
| 44 | + |
| 45 | +`users` 디렉토리가 `scala` 디렉토리 안에 위치하고 많은 스칼라 파일이 패키지 안에 위치하는지에 대해 주목해야 한다. 패키지 안 각 스칼라 파일은 같은 패키지 선언을 가질 수 있다. 패키지를 선언하는 다른 방법은 중괄호를 사용하는 것이다. |
| 46 | + |
| 47 | +``` |
| 48 | +package users { |
| 49 | + package administrators { |
| 50 | + class NormalUser |
| 51 | + } |
| 52 | + package normalusers { |
| 53 | + class NormalUser |
| 54 | + } |
| 55 | +} |
| 56 | +``` |
| 57 | + |
| 58 | +보다시피 패키지를 감싸고 스코프와 캡슐화를 더 강하게 제어하는 것을 허용한다. |
| 59 | + |
| 60 | +패키지 이름은 모두 소문자여야 하고 웹사이트를 가진 조직에서 개발된 코드라면 `<상위 도메인>.<도메인 이름>.<프로젝트 이름>` 과 같은 형식을 따라야 한다. 예를 들어, 구글이 `SelfDrigingCar`라는 프로젝트가 있다면 패키지 이름은 아래와 같다. |
| 61 | + |
| 62 | +``` |
| 63 | +package com.google.selfdrivingcar.camera |
| 64 | +
|
| 65 | +class Lens |
| 66 | +``` |
| 67 | + |
| 68 | +디렉토리 구조는 `SelfDrivingCar/src/main/scala/com/google/selfdrivingcar/camera/Lens.scala`와 같다. |
| 69 | + |
| 70 | +## 임포트 |
| 71 | + |
| 72 | +`import` 절은 다른 패키지의 멤버(클래스, 트레이트, 함수 등)에 접근하기 위해서이고 같은 패키지의 멤버에 접근할 때는 필요하지않다. 한마디로 임포트 절은 선택적이다. |
| 73 | + |
| 74 | +``` |
| 75 | +import users._ // users 패키지 전부를 임포트한다 |
| 76 | +import users.User // User 클래스를 임포트한다 |
| 77 | +import users.{User, UserPreferences} // 선택된 멤버만 임포트한다 |
| 78 | +import users.{UserPreferences => UPrefs} // 편의를 위해 이름을 바꾸고 임포트한다 |
| 79 | +``` |
| 80 | + |
| 81 | +스칼라가 자바와 한가지 다른 점은 어디서든 임포트를 할 수 있다는 것이다. |
| 82 | + |
| 83 | +```tut |
| 84 | +def sqrtplus1(x: Int) = { |
| 85 | + import scala.math.sqrt |
| 86 | + sqrt(x) + 1.0 |
| 87 | +} |
| 88 | +``` |
| 89 | + |
| 90 | +네이밍이 중복되거나 프로젝트의 루트에서 무언가 임포트해야 할 때, 패키지 이름 앞에 `_root_`를 붙이면 된다. |
| 91 | + |
| 92 | +``` |
| 93 | +package accounts |
| 94 | +
|
| 95 | +import _root_.users._ |
| 96 | +``` |
| 97 | + |
| 98 | +`scala` 및 `java.lang` 패키지와 `object Predef` 는 기본적으로 임포트된다. |
16 | 99 |
|
17 |
| -(this section of the tour has not been translated yet. pull request |
18 |
| -with translation welcome!) |
| 100 | +공병국 옮김 |
0 commit comments