Updated strings.md

sarojaba authored
revision 0cbe4f53cf65bb477a52d049f34f384fe35ee52e
strings
# strings.md

Write here..
2.11. 문자열(Strings)

문자열은 어느 프로그래머이든 마스터가 되기위한 중요한 개념입니다. Rust의 문자열 처리 시스템은 시스템 focus 때문에 다른 언어들과 좀 다릅니다. 언제라도 여러분은 다양한 크기의 자료 구조를 가집니다. things can get tricky, 그리고 문자열은 크기 조절 가능한 자료 구조입니다. 한마디로, Rust의 문자열 또한 C와 같은 다른 시스템 언어들과는 다르게 동작한다는 것입니다.

좀 더 자세히 파봅시다. *문자열(string)*은 UTF-8 바이트의 스트림으로 부호화된 유니코드 스칼라 값의 나열입니다. 모든 문자열은 올바르게 부호화된 UTF-8 나열이라는 것을 보장합니다. 게다가, 문자열은 null로 끝나지 않고 null 바이트를 포함할 수 있습니다.

Rust에는 두가지 주요 문자열 타입이 있습니다: `&str` 과 `String` 입니다.

첫번째 종류인 `&str`은 *문자열 슬라이스(string slice)*라고 부릅니다. `&str` 타입은 문자열 리터럴입니다.

```{rust}
let string = "Hello there."; // string: &str
```

This string is statically allocated, meaning that it's saved inside our
compiled program, and exists for the entire duration it runs. The `string`
binding is a reference to this statically allocated string. String slices
have a fixed size, and cannot be mutated.

A `String`, on the other hand, is a heap-allocated string. This string
is growable, and is also guaranteed to be UTF-8. `String`s are
commonly created by converting from a string slice using the
`to_string` method.

```{rust}
let mut s = "Hello".to_string(); // mut s: String
println!("{}", s);

s.push_str(", world.");
println!("{}", s);
```

`String`s will coerce into `&str` with an `&`:

```
fn takes_slice(slice: &str) {
println!("Got: {}", slice);
}

fn main() {
let s = "Hello".to_string();
takes_slice(&s);
}
```

Viewing a `String` as a `&str` is cheap, but converting the `&str` to a
`String` involves allocating memory. No reason to do that unless you have to!

That's the basics of strings in Rust! They're probably a bit more complicated
than you are used to, if you come from a scripting language, but when the
low-level details matter, they really matter. Just remember that `String`s
allocate memory and control their data, while `&str`s are a reference to
another string, and you'll be all set
.