Skip to content

[ko] fixed typos and apply updates in English doc #1746

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 5, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 20 additions & 19 deletions _ko/tour/implicit-conversions.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,33 +10,35 @@ next-page: polymorphic-methods
previous-page: implicit-parameters
---

타입 `S`로부터 타입 `T`로의 암시적 변환는 함수 타입 `S => T` 암시적 값이나 해당 타입으로 변환 가능한 암시적 메소드로 정의된다.
타입 `S`에서 타입 `T`로의 암시적 변환은 타입이 함수 `S => T` 암시적 값이나 해당 타입으로 변환 가능한 암시적 메소드로 정의된다.

암시적 변환은 두 가지 상황에 적용된다.

* 표현식 `e`의 타입이 `S`이고, `S`는 표현식의 기대 타입 `T`를 따르지 않을 때.
* `e`의 타입이 `T`인 `e.m` 선택한 상황에서, 선택자 `m`이 `T`의 멤버가 아닐 때.
* 타입이 `S`인 `e`의 `e.m` 선택한 상황에서, 선택자 `m`이 `S`의 멤버가 아닐 때.


첫 번째 경우에서 변환 `c`가 `e`에 적용되며, 결과 타입이 `T`를 따르는지 탐색한다.
두 번째 경우에선 변환 `c`가 `e`에 적용되며, 결과가 `m`이라는 이름의 멤버를 포함하고 있는지 탐색한다.
첫 번째 경우, `e`에 적용되며 결과 타입이 `T`인 변환 `c`를 찾는다.
두 번째 경우, `e`에 적용되며 결과에 `m`이라는 이름의 멤버를 포함하는 변환 `c`를 찾는다.

타입이 `List[Int]`인 두 리스트 xs와 ys의 아래 연산은 허용된다:
암시적 메서드인 `List[A] => Ordered[List[A]]`와 `Int => Ordered[Int]`가 범위 내에 있을 경우, 아래와 같이 타입이 `List[Int]`인 두 리스트의 연산은 허용된다:

xs <= ys
List(1, 2, 3) <= List(4, 5)

아래에 정의된 암시적 메소드 `list2ordered`와 `int2ordered`가 범위 안에 있다고 가정한다.
`scala.Predef.intWrapper`는 암시적 메서드 암시적 메서드 `Int => Ordered[Int]`를 자동으로 제공한다. 다음은 암시적 메서드 `Int => Ordered[Int]`의 예시이다.

implicit def list2ordered[A](x: List[A])
(implicit elem2ordered: a => Ordered[A]): Ordered[List[A]] =
new Ordered[List[A]] { /* .. */ }
import scala.language.implicitConversions

implicit def int2ordered(x: Int): Ordered[Int] =
new Ordered[Int] { /* .. */ }
implicit def list2ordered[A](x: List[A])
(implicit elem2ordered: A => Ordered[A]): Ordered[List[A]] =
new Ordered[List[A]] {
// 더 유용한 구현으로 대체하시오
def compare(that: List[A]): Int = 1
}

암시적으로 임포트되는 오브젝트 `scala.Predef`는 미리 정의된 여러 타입(예: `Pair`)과 메소드(예: `assert`)뿐만 아니라 여러 뷰도 함께 선언한다.
암시적으로 임포트되는 객체 `scala.Predef`는 자주 사용되는 타입의 별칭(예: `scala.collection.immutable.Map`의 별칭 `Map`)과 메소드(예: `assert`), 그리고 여러 암시적 변환을 선언한다.

예를들면, `java.lang.Integer`를 기대하는 자바 메서드를 호출할때, `scala.Int`를 대신 넘겨도 무방하다. 그 이유는 Predef가 아래 암시적 변환들을 포함하기 때문이다.
예를 들면, `java.lang.Integer`를 기대하는 자바 메서드를 호출할 때, `scala.Int`를 대신 넘겨도 된다. 그 이유는 Predef가 아래 암시적 변환을 포함하기 때문이다.

```tut
import scala.language.implicitConversions
Expand All @@ -45,15 +47,14 @@ implicit def int2Integer(x: Int) =
java.lang.Integer.valueOf(x)
```

암시적 변환이 무분별하게 사용될 경우 잠재적인 위험을 가질 수 있기 때문에, 컴파일러는 암시적 변환의 선언을 컴파일할때 경고한다.
암시적 변환이 무분별하게 사용될 경우 잠재적인 위험을 가질 수 있기 때문에, 컴파일러는 암시적 변환의 선언을 컴파일할 시 이를 경고한다.

To turn off the warnings take either of these actions:
경고를 끄기 위해서는 아래 중 하나를 선택해야 한다.
경고를 끄기 위해서는 아래 중 하나를 선택해야 한다:

* `scala.language.implicitConversions` 를 암시적 변환의 선언이 있는 범위로 import
* 암시적 변환의 정의가 있는 범위 내에서 `scala.language.implicitConversions` 임포트
* `-language:implicitConversions` 옵션으로 컴파일러 실행

변환이 컴팡일러에 의해 적용될때 경고가 발생하지 않는다.
컴파일러가 변환을 적용할 때에는 경고가 발생하지 않는다.


윤창석, 이한욱 옮김, 고광현 업데이트