아래의 글은 마틴 오더스키,렉스 스푼,빌 베너스 공저 / 오현석,이동욱,반영록 공역, 『Programming in Scala 3/e』,에이콘출판사(2017), CH01의 내용을 기반으로 작성하였습니다.

 

프로그램의 의존도를 줄이는 디커플링, 모듈화

모듈에는 내부와 외부, 

 

패키징

패키징 + 중괄호

 

한 패키지 안에 여러 패키지

* 대신 _

import package._

 

코드 어디에서 import 가능

 

스칼라의 유연한 import

1. 코드 중간이든 어느 곳에서나 사용할 수 있다

2. 패키지 뿐만 아니라, 싱글톤 또는 일반 객체도 참조할 수 있다

3. 불러온 멤버 이름을 숨기거나 다른 이름을 지정할 수 있다

 

import Fruits.{Apple, Orange}

 

import Fruits.{Apple => McIntosh, Orange}

 

import Fruits.{_}

 

import Fruits.{ Apple => McIntosh, _}

모든 객체 불러오고 rename

 

import Fruits.{Pear => _, _}

Pear 를 제외한 모든 멤버를 불러온다

 

이름을 => _ 로 하는건 이름을 숨긴다는 의미

 

 

암시적 모든 임포트

 

import java.lang._

import scala._

import Predef._

스칼라 내부의 암시적 변환

 

private : 

내부 inner 접근 안됨

 

protected:

서브 클래스에서만 그 멤버에 접근

 

private[X] 접근 제어 지정

 

private[mypackage] 

 

mypackage 내에서 접근 가능

 

private 보다 더 제한적인 접근 제어

private[this] 객체 비공개

 

자바에서 정적 멤버와 인스턴스 멤버는 동일한 클래스

스칼라에는 정적 멤버가 없음

 

여러 멤버를 포함하며 단 하나만 존재하는 동반 객체 companion object 존재

스칼라의 접근 규칙은 비공 개 또는 보호 접근에 대해 동반 객체와 클래스에 동일한 권리를 준다

동반 객체에 보호 멤버를 선언하는 것도 말이 안된다

 

 

패키지 전체 스코프에 도우미 메소드를 만들고 싶으면

패키지 최상위 수준에 넣고 패키지 객체를 만들고 메소드 정의

package object bobsdelgith {

}

패키지 객체를 사용하는 다른 용도는

패키지 내에서 사용할 타입 별명과 암시적 변환 을 넣기 위해

패키지 객체는 package.class로 컴파일 되는데

패키지 클래스와 대응되는 패키지 디렉토리에 들어감

+ Recent posts