Tour of Scala

패키지와 임포트

Language

패키지와 임포트

스칼라는 패키지를 사용하여 프로그램을 모듈화할 수 있는 네임스페이스를 만든다.

패키지 만들기

패키지는 스칼라 파일 맨 위에 하나 이상의 패키지 이름을 선언하여 만들어진다.

package users

class User

패키지의 이름을 스칼라 파일을 담고 있는 디렉토리와 같게 하는 규칙이 있다. 하지만, 스칼라는 파일 레이아웃에 한정되지 않는다. package users를 위한 sbt 프로젝트의 디렉토리 구조의 한 예이다.

- ExampleProject
  - build.sbt
  - project
  - src
    - main
      - scala
        - users
          User.scala
          UserProfile.scala
          UserPreferences.scala
    - test

users 디렉토리가 scala 디렉토리 안에 위치하고 여러 스칼라 파일이 패키지 안에 위치하는지에 대해 주목해야 한다. 패키지 안 각 스칼라 파일은 같은 패키지 선언을 가질 수 있다. 패키지를 선언하는 다른 방법은 중괄호를 사용하는 것이다.

package users {
  package administrators {
    class NormalUser
  }
  package normalusers {
    class NormalUser
  }
}

보다시피 패키지 중첩을 허용하고 스코프와 캡슐화를 더 잘 제어한다.

패키지 이름은 모두 소문자여야 하고 웹사이트를 가진 조직에서 개발된 코드라면 <상위 도메인>.<도메인 이름>.<프로젝트 이름> 과 같은 형식을 따라야 한다. 예를 들어, 구글에게 SelfDrigingCar라는 프로젝트가 있다면 패키지 이름은 아래와 같을 것이다.

package com.google.selfdrivingcar.camera

class Lens

디렉토리 구조는 SelfDrivingCar/src/main/scala/com/google/selfdrivingcar/camera/Lens.scala와 같을 것이다.

임포트

import 절은 다른 패키지의 멤버(클래스, 트레이트, 함수 등)에 접근하기 위해서고 같은 패키지의 멤버에 접근할 때는 필요하지 않다. 한마디로 임포트 절은 선택적이다.

import users._  // users 패키지 전부를 임포트한다
import users.User  // User 클래스를 임포트한다
import users.{User, UserPreferences}  // 선택된 멤버만 임포트한다
import users.{UserPreferences => UPrefs}  // 편의를 위해 이름을 바꾸고 임포트한다

스칼라가 자바와 한가지 다른 점은 어디서든 임포트를 할 수 있다는 것이다.

def sqrtplus1(x: Int) = {
  import scala.math.sqrt
  sqrt(x) + 1.0
}

네이밍이 중복되거나 프로젝트의 루트에서 무언가 임포트해야 할 때, 패키지 이름 앞에 _root_를 붙이면 된다.

package accounts

import _root_.users._

scalajava.lang 패키지와 object Predef 는 기본적으로 임포트된다.

공병국 옮김

Contributors to this page: