Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit d6ccb0d

Browse files
authoredFeb 20, 2017
Merge pull request #672 from openmaya/master
Added singleton-object page in Korean
2 parents 0ccd732 + be86e74 commit d6ccb0d

File tree

4 files changed

+135
-58
lines changed

4 files changed

+135
-58
lines changed
 

‎ko/tutorials/tour/_posts/2017-02-13-unified-types.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
layout: tutorial
3-
title: 통합 타입
3+
title: 통합된 타입
44

55
disqus: true
66

‎ko/tutorials/tour/_posts/2017-02-13-views.md

Lines changed: 0 additions & 57 deletions
This file was deleted.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
layout: tutorial
3+
title: 암시적 변환
4+
5+
disqus: true
6+
7+
tutorial: scala-tour
8+
num: 26
9+
language: ko
10+
---
11+
12+
타입 `S`로부터 타입 `T`로의 암시적 변환는 함수 타입 `S => T`의 암시적 값이나 해당 타입으로 변환 가능한 암시적 메소드로 정의된다.
13+
14+
암시적 변환은 두 가지 상황에 적용된다.
15+
16+
* 표현식 `e`의 타입이 `S`이고, `S`는 표현식의 기대 타입 `T`를 따르지 않을 때.
17+
* `e`의 타입이 `T``e.m`를 선택한 상황에서, 선택자 `m``T`의 멤버가 아닐 때.
18+
19+
20+
첫 번째 경우에서 변환 `c``e`에 적용되며, 결과 타입이 `T`를 따르는지 탐색한다.
21+
두 번째 경우에선 변환 `c``e`에 적용되며, 결과가 `m`이라는 이름의 멤버를 포함하고 있는지 탐색한다.
22+
23+
타입이 `List[Int]`인 두 리스트 xs와 ys의 아래 연산은 허용된다:
24+
25+
xs <= ys
26+
27+
아래에 정의된 암시적 메소드 `list2ordered``int2ordered`가 범위 안에 있다고 가정한다.
28+
29+
implicit def list2ordered[A](x: List[A])
30+
(implicit elem2ordered: a => Ordered[A]): Ordered[List[A]] =
31+
new Ordered[List[A]] { /* .. */ }
32+
33+
implicit def int2ordered(x: Int): Ordered[Int] =
34+
new Ordered[Int] { /* .. */ }
35+
36+
암시적으로 임포트되는 오브젝트 `scala.Predef`는 미리 정의된 여러 타입(예: `Pair`)과 메소드(예: `assert`)뿐만 아니라 여러 뷰도 함께 선언한다.
37+
38+
예를들면, `java.lang.Integer`를 기대하는 자바 메서드를 호출할때, `scala.Int`를 대신 넘겨도 무방하다. 그 이유는 Predef가 아래 암시적 변환들을 포함하기 때문이다.
39+
40+
```tut
41+
import scala.language.implicitConversions
42+
43+
implicit def int2Integer(x: Int) =
44+
java.lang.Integer.valueOf(x)
45+
```
46+
47+
암시적 변환이 무분별하게 사용될 경우 잠재적인 위험을 가질 수 있기 때문에, 컴파일러는 암시적 변환의 선언을 컴파일할때 경고한다.
48+
49+
To turn off the warnings take either of these actions:
50+
경고를 끄기 위해서는 아래 중 하나를 선택해야 한다.
51+
52+
* `scala.language.implicitConversions` 를 암시적 변환의 선언이 있는 범위로 import
53+
* `-language:implicitConversions` 옵션으로 컴파일러 실행
54+
55+
변환이 컴팡일러에 의해 적용될때 경고가 발생하지 않는다.
56+
57+
58+
윤창석, 이한욱 옮김, 고광현 업데이트
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
---
2+
layout: tutorial
3+
title: 싱글톤 객체
4+
5+
disqus: true
6+
7+
tutorial: scala-tour
8+
num: 12
9+
language: ko
10+
11+
next-page: xml-processing
12+
previous-page: pattern-matching
13+
---
14+
15+
[클래스](classes.html)의 각 인스턴스와 연관되지 않은 메서드와 값들은 싱글톤 객체에 속하며, `class`대신에 `object`를 사용해 표시된다.
16+
17+
```
18+
package test
19+
20+
object Blah {
21+
def sum(l: List[Int]): Int = l.sum
22+
}
23+
```
24+
25+
`sum`메서드는 전역적으로 접근가능하고 참조될수 있으며, `test.Blah.sum`로 import될수 있다.
26+
27+
싱글턴 객체는 직접 인스턴스화 될 수 없는 싱글턴 클래스를 정의하기 위한 축약형 같은 것이며, `object`의 정의 시점의 같은 이름을 가진 `val` 멤버 같은 것이다. 사실 `val`과 같이, 싱글턴 객체는 변칙적이긴 하지만 [트레잇](traits.html)이나 클래스의 멤버로서 정의될수 있다.
28+
29+
하나의 싱글턴 객체는 클래스와 트레잇으로 확장할수 있다. 사실, [타입 파라미터](generic-classes.html)가 없는 [케이스 클래스](case-classes.html)는 기본적으로 같은 이름의 싱글턴 객체를 생성하며, 구현된 [`Function*`](http://www.scala-lang.org/api/current/scala/Function1.html)을 가진다.
30+
31+
## 동반자(Companions) ##
32+
33+
대부분의 싱글턴 객체는 독립적이지 않으며, 대신에 같은 이름의 클래스와 연관되어있다. 위에서 언급한 클래스의 "같은 이름의 싱글턴 객체"는 이 예이다. 이 현상이 발생할 때, 싱글턴 객체는 클래스의 *동반자 객체* 라고 하며, 그 클래스는 객체의 *동반자 클래스*라고 한다.
34+
35+
[스칼라 문서](https://wiki.scala-lang.org/display/SW/Introduction)는 클래스와 그 동반자 사이의 이동을 위한 특별한 지원을 가지고 있다. 만약 큰 "C"나 "O" 원이 아래에서 위로 접힌 경계를 가진다면, 여러분은 동반자로 이동하기 위해 해당 원을 클릭할수 있다.
36+
37+
하나의 클래스와 그 동반자 객체는 어떤 경우라도, 아래와 같이 *같은* 소스파일에 정의되어야 한다.
38+
39+
```tut
40+
class IntPair(val x: Int, val y: Int)
41+
42+
object IntPair {
43+
import math.Ordering
44+
45+
implicit def ipord: Ordering[IntPair] =
46+
Ordering.by(ip => (ip.x, ip.y))
47+
}
48+
```
49+
50+
타입클래스 패턴을 따를때, 일반적으로 타입클래스 인스턴스들을 동반자 안에 정의된 `ipord`와 같은 [암시적 값들](implicit-parameters.html)로 생각한다.
51+
52+
## 자바 프로그래머들이 주의할 점 ##
53+
54+
`static`은 스칼라에서 키워드가 아니다. 대신에 class를 포함한 static일 수 있는 모든 멤버는 싱글턴 객체에 있어야 한다. 그것들은 부분적으로 또는 그룹 등등으로 import될수 있으며, 같은 문법으로 참조될수 있다.
55+
56+
빈번하게, 자바프로그래머들은 그 인스턴스 멤버를 목적으로 구현 할때 `private`을 사용해 static 멤버를 정의한다. 이것들은 또한 동반자(companion)으로 이동되었다. 일반적인 패턴은 아래와 같이 동반자 객체(object)의 멤버들을 클래스 안으로 import하는 것이다.
57+
58+
```
59+
class X {
60+
import X._
61+
62+
def blah = foo
63+
}
64+
65+
object X {
66+
private def foo = 42
67+
}
68+
```
69+
70+
이것은 또 다른 특징을 설명한다. `private`의 문맥에서 클래스와 그 동반자는 친구다. `객체 X``클래스 X`의 private 멤버들에 접근할수 있다. 하나의 멤버를 *정말로* private하게 만들고 싶다면 `private[this]`를 사용하라.
71+
72+
For Java convenience, methods, including `var`s and `val`s, defined directly in a singleton object also have a static method defined in the companion class, called a *static forwarder*. Other members are accessible via the `X$.MODULE$` static field for `object X`.
73+
74+
자바 편의를 위해서, `var``val`의 것 모두, 싱글턴 객체에 정의된 메서드들은 *static forwarder* 라고 불리는 동반자 클래스안에 정의된 static메서드를 가진다. 다른 멤버들은 `객체 X`를 위한 static 필드 `X$.MODULE$`를 통해 접근할수 있다.
75+
76+
만약 당신이 모든 것을 동반자 객체에 옮기고, 당신이 남겨놓은 모든것이 인스턴스화가 되길 바라지 않는 하나의 클래스라면, 간단하게 그 클래스를 삭제하라. Static forwarder는 여전히 생성된다.

0 commit comments

Comments
 (0)
Please sign in to comment.