Skip to content

Commit

Permalink
update ch17-01-what-is-oo.md (#67)
Browse files Browse the repository at this point in the history
  • Loading branch information
golbenge authored Aug 21, 2024
1 parent 817ae46 commit fb19e0e
Show file tree
Hide file tree
Showing 8 changed files with 30 additions and 25 deletions.
11 changes: 9 additions & 2 deletions book.toml
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
[book]
title = "The Rust Programming Language"
authors = ["Steve Klabnik", "Carol Nichols", "Contributions from the Rust Community"]
authors = [
"Steve Klabnik",
"Carol Nichols",
"Contributions from the Rust Community",
]
language = "ko"

[output.html]
additional-css = ["ferris.css", "theme/2018-edition.css"]
additional-js = ["ferris.js"]
git-repository-url = "https://github.com/rust-lang/book"
git-repository-url = "https://github.com/rust-kr/doc.rust-kr.org"

[rust]
edition = "2021"
2 changes: 1 addition & 1 deletion src/ch17-01-what-is-oo.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ Elements of Reusable Object-Oriented Software, Addison-Wesley Professional, 1994

`list``average` 필드는 비공개로 하였으므로 외부 코드가
`list` 필드에 직접 아이템을 추가하거나 제거할 방법은 없습니다;
그렇게 하면 `average` 필드는 `list`가 변경될 때 동기화되지 않을 수
그렇지 않으면 `average` 필드는 `list`가 변경될 때 동기화되지 않을 수
있습니다. `average` 메서드는 `average` 필드의 값을 반환하므로,
외부 코드가 `average`를 읽을 수 있도록 하지만 변경할 수는 없습니다.

Expand Down
5 changes: 2 additions & 3 deletions src/ch18-01-all-the-places-for-patterns.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,10 @@ match x {
`match` 표현식에 대한 한 가지 요건은 `match` 표현식의 값에 대한 모든 경우의
수를 고려해야 한다는 의미에서 *철저해야 (exhaustive)* 한다는 것입니다.
모든 가능성을 포괄하는 것을 보장하는 방법 한 가지는 마지막 갈래에 캐치올
(catchall) 패턴을 사용하는 것입니다: 예를 들면 어떤 값에 매칭되는 변수명은
(catchall) 패턴을 사용하는 것입니다: 예를 들면 어떤 값과도 매칭될 수 있는 변수명은
절대 실패할 수 없게 되어 나머지 모든 경우를 포괄합니다.

`_`라는 특정 패턴은 어떤 값에라도 매칭되지만 변수에 값을
묶지 않으므로 마지막 매치 갈래에 자주 사용됩니다.
`_`라는 특정 패턴은 어떤 값과도 매칭되지만 값을 변수에 할당하지 않기 때문에 마지막 `match` 갈래에 자주 사용됩니다.
`_` 패턴은 예를 들면 지정되지 않은 값들을 무시하고
싶을 때 유용할 수 있습니다. 이 장의
[‘패턴에서 값 무시하기’][ignoring-values-in-a-pattern]<!-- ignore -->절에서
Expand Down
5 changes: 2 additions & 3 deletions src/ch18-03-pattern-syntax.md
Original file line number Diff line number Diff line change
Expand Up @@ -291,9 +291,8 @@ RGB 및 HSV 색상을 지원할 수 있습니다.
변경하여 사용하지 않는 매개변수가 포함되지 않도록 합니다. 함수
매개변수를 무시하는 것은, 예를 들면 특정 타입의 시그니처가 필요한
트레이트를 구현하는 중인데 구현체의 함수 본문에는 매개변수 중 하나가
필요하지 않은 경우 특히 유용할 수 있습니다. 그러면 대신 이름을
사용할 때처럼 사용하지 않는 함수 매개변수에 대한 컴파일러 경고를
받지 않게 됩니다.
필요하지 않은 경우 특히 유용할 수 있습니다. 만일 사용하지 않는 매개변수에
이름을 사용하면 컴파일러 경고를 받게 되는데 이를 방지할 수 있습니다.

#### 중첩된 `_`로 값의 일부 무시하기

Expand Down
10 changes: 5 additions & 5 deletions src/ch19-01-unsafe-rust.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,8 @@
포인터 생성하기</span>

안전한 코드에서 원시 포인터를 생성할 수는 있지만, 원시 포인터를 *역참조*하여
가리키는 데이터를 읽을 수는 없다는 점을 상기하세요. 예제 19-3에서는
`unsafe` 블록이 필요한 원시 포인터에 역참조 연산자 `*`를 사용합니다.
가리키는 데이터를 읽을 수는 없다는 점을 상기하세요. 예제 19-3에서는 원시 포인터에
`unsafe` 블록이 필요한 역참조 연산자 `*`를 사용합니다.

```rust
{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-03/src/main.rs:here}}
Expand Down Expand Up @@ -203,8 +203,8 @@
<span class="caption">예제 19-4: 안전한 `split_at_mut` 함수
사용하기</span>

안전한 러스트만 사용하여 이 함수를 구현할 수는 없습니다. 시도는 예제 19-5처럼
될텐데, 컴파일되지 않을 것입니다. 간단하게 하기 위해 `split_at_mut`
안전한 러스트만 사용하여 이 함수를 구현할 수는 없습니다. 예제 19-5처럼 시도해 볼 수 있지만
컴파일되지 않을 것입니다. 간단하게 하기 위해 `split_at_mut`
메서드가 아닌 함수로 구현하고 제네릭 타입 `T` 대신 `i32` 값의 슬라이스에
대해서 만으로 구현하겠습니다.

Expand Down Expand Up @@ -448,7 +448,7 @@
것도 아니고, 심지어 눈살을 찌푸릴 일도 아닙니다. 하지만 컴파일러가 메모리 안전성을
유지할 수 없기 때문에, `unsafe` 코드를 올바르게 만드는 것은 더 까다롭습니다.
`unsafe` 코드를 사용해야 할 이유가 있다면 그렇게 할 수 있으며, 명시적인 `unsafe`
어노테이션이 있으면 문제가 발생했을 때 문제의 원인을 더 쉽게 추적할 수 있습니다.
어노테이션을 통해 문제가 발생했을 때 문제의 원인을 더 쉽게 추적할 수 있습니다.

[dangling-references]:
ch04-02-references-and-borrowing.html#dangling-references
Expand Down
2 changes: 1 addition & 1 deletion src/ch19-03-advanced-traits.md
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,7 @@ called a puppy`라고 출력하기를 원합니다. 예제 19-18에서 사용했
타입의 모든 메서드를 갖지 않도록 하려면 (이를테면 `Wrapper`
타입의 동작을 제한하려면) 원하는 메서드만 수동으로 구현해야 합니다.

이 뉴타입 패턴은 또한 트레이트가 포함되지 않은 경우에도 유용합니다. 이제 초점을
이 뉴타입 패턴은 트레이트가 관련되지 않은 경우에도 유용합니다. 이제 초점을
바꿔서 러스트의 타입 시스템과 상호작용하는 몇 가지 고급 방법을 살펴봅시다.

[newtype]: ch19-03-advanced-traits.html#using-the-newtype-pattern-to-implement-external-traits-on-external-types
Expand Down
16 changes: 8 additions & 8 deletions src/ch19-06-macros.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
세 가지 종류의 *절차적 (procedural)* 매크로가 있습니다:

* 구조체와 열거형에 사용되는 `derive` 속성이 추가된 코드를 지정하는
커스텀 `#[derive]` 매크로
커스텀 파생 `#[derive]` 매크로
* 모든 아이템에 사용 가능한 커스텀 속성을 정의하는 속성형 (attribute-like) 매크로
* 함수 호출처럼 보이지만 지정된 토큰을 인수로써 조작하는
함수형 (function-like) 매크로
Expand Down Expand Up @@ -85,8 +85,8 @@ let v: Vec<u32> = vec![1, 2, 3];
정의</span>

> Note: 표준 라이브러리의 `vec!` 매크로의 실제 정의에는 정확한 양의
> 메모리를 미리 할당하는 코드가 포함되어 있습니다. 이 코드는 예제를
> 더 간단하게 만들기 위해 여기에는 포함하지 않은 최적화 코드입니다.
> 메모리를 미리 할당하는 코드가 포함되어 있습니다. 해당 코드에는 예제를
> 더 간단하게 만들기 위해 여기에는 포함하지 않은 최적화가 있습니다.
`#[macro_export]` 어노테이션은 이 매크로가 정의된 크레이트를 스코프로
가져올 때마다 이 매크로를 사용할 수 있어야 함을 나타냅니다. 이 어노테이션이
Expand All @@ -111,7 +111,7 @@ let v: Vec<u32> = vec![1, 2, 3];
[러스트 참고 자료 문서][ref]를 참조하세요.

먼저 괄호 한 쌍을 사용하여 전체 패턴을 둘러쌉니다. 달러 기호(`$`)를
사용하여 패턴에 매칭될 러스트 코드를 담는 매크로 시스템 내의 변수를
사용하여 패턴에 매칭될 러스트 코드를 담는 변수를 매크로 시스템 내에
선언합니다. 달러 기호는 이 변수가 일반적인 러스트 변수가 아닌 매크로
변수임을 명백하게 해 줍니다. 다음에는 대체되는 코드에서 사용할 목적으로
괄호 안에 패턴과 매칭되는 값을 캡처하는 괄호 한 쌍이 있습니다. `$()`
Expand Down Expand Up @@ -158,8 +158,8 @@ let v: Vec<u32> = vec![1, 2, 3];
매크로는 커스텀 파생 (custom derive), 속성형 (attribute-like),
함수형 (function-like) 세 종류가 있으며, 모두 비슷한 방식으로 작동합니다.

절차적 매크로를 만들 때, 그 정의는 특별한 크레이트 타입을 가진 자신만의
크레이트에 있어야 합니다. 이는 복잡한 기술적인 이유 때문이고 앞으로는 이러한
절차적 매크로는 특별한 형식을 가진 자신만의 크레이트에 정의되어야 합니다.
이는 복잡한 기술적인 이유 때문으로 앞으로는 이러한
문제를 없애고자 합니다. 예제 19-29에서는 절차적 매크로를 정의하는 방법을
보여주는데, 여기서 `some_attribute`는 특정 매크로 종류를 사용하기 위한
자리표시자입니다.
Expand Down Expand Up @@ -190,7 +190,7 @@ pub fn some_name(input: TokenStream) -> TokenStream {
매크로부터 시작하고 그다음에는 다른 형태의 작은 차이점들을
설명하겠습니다.

### 커스텀 `derive` 매크로 작성 방법
### 커스텀 파생(`derive`) 매크로 작성 방법

`HelloMacro`라는 이름의 트레이트와 `hello_macro`라는 하나의 연관 함수를
정의하는 `hello_macro`라는 이름의 크레이트를 만들어 봅시다. 사용자가
Expand Down Expand Up @@ -302,7 +302,7 @@ $ cargo new hello_macro_derive --lib
추가할 필요는 없습니다. `proc_macro` 크레이트는 우리 코드에서 러스트 코드를
읽고 조작할 수 있게 해주는 컴파일러의 API입니다.

`syn` 크레이트는 러스트 코드를 문자열에서 연산을 수행할 수 있는 데이터
`syn` 크레이트는 문자열 형태의 러스트 코드를 연산을 수행할 수 있는 데이터
구조로 파싱합니다. `quote` 크레이트는 `syn` 데이터 구조를 다시 러스트
코드로 변환합니다. 이러한 크레이트를 사용하면 처리하려는 모든 종류의 러스트
코드를 훨씬 간단하게 파싱할 수 있습니다: 러스트 코드에 대한 전체 파서를
Expand Down
4 changes: 2 additions & 2 deletions src/ch20-02-multithreaded.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
방식으로 여러 가지 요청에 대한 인식을 처리할 것입니다!

`cargo run`을 사용하여 서버를 시작하세요. 그런 다음 두 개의 브라우저 창을
여세요: 하나는 *http://127.0.0.1:7878/*용, 다른 하나는 *http://127.0.0.1:7878/sleep*용입니다.
여세요: 하나는 *http://127.0.0.1:7878/* 용, 다른 하나는 *http://127.0.0.1:7878/sleep*용입니다.
이전처럼 */* URI를 몇 번 입력해 보면, 빠르게 응답하는 것을 볼 수 있습니다.
하지만 */sleep*을 입력한 다음 */* 을 로드하면, `sleep`이 5초 동안 완전히
슬립을 끝낼 때까지 */* 는 기다렸다가 로드되는 것을 볼 수 있습니다.
Expand Down Expand Up @@ -162,7 +162,7 @@

훌륭합니다! 이 에러는 `ThreadPool` 타입 또는 모듈이 필요하다는 것을
알려주므로, 지금 구축해 보겠습니다. `ThreadPool` 구현은 웹 서버가
수행하는 작업의 종류와 무관합니다. 따라서, `hello` 상자를 바이너리
수행하는 작업의 종류와 무관합니다. 따라서, `hello` 크레이트를 바이너리
크레이트에서 라이브러리 크레이트로 전환하여 `ThreadPool` 구현을 담아봅시다.
라이브러리 크레이트로 변경한 후에는 웹 요청을 처리하는 것뿐만 아니라,
스레드 풀을 사용하여 수행하려는 어떤 작업에 대해서라도 분리된 스레드 풀
Expand Down

0 comments on commit fb19e0e

Please sign in to comment.