[서평] 이펙티브 러스트

2024. 11. 12. 18:07Insight/서평

728x90

이펙티브 러스트 / 데이비드 드라이스데일 지음 / 한빛미디어

 

 

블록체인과 관련된 개발 작업을 진행하다보면, 러스트로 작성된 도구들을 어렵지 않게 접할 수 있다. 러스트를 모르던 시점의 나는, 빠르고 안전한데 다만 배우는 게 좀 어려운언어가 존재한다고? 라며 흥미로움을 감출 수 없었다. 주변에서 어렵다, 안 된다고 하면 흥미가 생기는 것이 엔지니어들 특징 아닐까? 얼핏보면 C++처럼 생긴 언어가, 얼마나 좋길래 2012년에 태어나서 어떻게 2024년 현재, 어떻게 내 탐구의 대상이 되었는지, 이 책을 통해 조금이나마 그 궁금증을 해소하고자 한다.

본론으로 들어가기에 앞서, 필자는 러스트에 대한 지식과 경험이 부족한 초보자임을 미리 밝힙니다. 그러나 다른 언어들에 대한 다년간 경험을 토대로, 이 책이 어떻게 활용될 수 있고, 어떠한 의미를 가질 수 있는지 정리해봤습니다. 러스트를 새롭게 배우려는 개발자의 관점에서 이 책에 대한 인사이트를 얻어가실 수 있었으면 합니다.

 

좋은 러스트 프로그래머가 되고자 한다면 읽지 않을 이유가 없는 책

이 책은 러스트 중급자에게 가장 적합한 책이다. 중급자라 함은, 기능을 구현할 때 어떻게 구현하는 것이 더 좋을지 고민하는 단계이다. 저자는 소개에서 경험과 사례를 기반으로, 왜 일반적으로 주어진 지침이 유용한지, 예외적인 상황에는 어떻게 대처하면 좋을지 자세히 설명한다. 이 모든 과정이 추상화된 프로그래밍의 영역이 아닌, 러스트의 원리를 기반으로 진행되기 때문에, 좀 더 Rust 답게 프로그래밍하고자 하는 이들에게 큰 도움을 줄 수 있을 것 같다.

 

하지만 나는 입문자들 또한 이 책을 구매하는 것을 추천하고 싶다. 모든 프로그래밍 언어가 그렇듯, 개발 경험이 쌓임에 따라 기능을 구현하는 것은 누구나 가능하지만, 좋은 코드를 작성하는 것은 그렇지 못하기 때문이다. 이 책에서는 초심자가 참고하기 좋은 지침을 잘 정리해두었기 때문에, 이러한 내용을 주기적으로 복습하는 것만으로 개발 능력을 빠르게 향상시킬 수 있을 것이다. 그러니 당장 읽지는 못하더라도, 두고두고 참고하기 좋은 책이라고 생각한다.

 

구성: 6개의 챕터, 그리고 35개의 아이템

각 챕터는 타입, 트레이트, 기타 주요 개념, 의존성, crates 툴, 러스트 심화를 주제로 나름 '기초'부터 심화까지 전 영역을 다루고 있다. 물론 러스트 프로그래머를 대상으로 작성된 책이라, 초심자가 바로 읽는 것은 확실히 부담으로 다가왔다. 적어도 Hello, World를 출력하는 코드를 작성하는 데 관여하는 배경 지식은 숙지해야 이 책을 읽을 수 있다.

++ 한글로 작성된 입문 가이드와 다양한 레퍼런스를 담아둔 링크를 공유한다.
부족한 부분이 있을 수는 있겠지만, 적어도 아무것도 모르던 내게는 큰 도움이 되었다...

 

평범한 C개발자의 Rust입문기: Rust에 입문하는 C개발자를 위한 안내서

https://github.com/gurugio/my-rust-book 추후 설명 추가나 그림 추가 등의 작업은 Github에서 진행하겠습니다. 안녕하세요. C언어 …

wikidocs.net

 

 

[Rust] 입문 가이드

2021.09.20 작성 2022.04.16 보완 2023.06.07 보완 2024.02.25 보완 2024.03.30 보완 본인의 경혐을 바탕으...

blog.naver.com

 

 

다양한 아이템은 이 책이 왜 초심자에게도 유용한지 드러나는 대목이다. 각 아이템은 분명히 지킬 이유가 있는, 일련의 Best Practice를 제시한다. 이 가이드를 잘 숙지한다면 개발하는 중 이와 상충되는 상황을 마주했을 때, 저자가 이러한 규칙을 제시한 이유를 떠올려보고, 그 상황에서 최선의 선택을 행하면 된다. YAGNI (You ain't gonna need it)이나 KISS (Keep it short and simple) 원칙처럼 프로그래밍 전반에 적용되는 느낌은 아니지만, 적어도 Rust 프로그래밍을 진행하는 과정 중에는 특별한 상황이 아니라면 굳이 지키지 않을 이유가 없어보인다.

 

실습: 대여 규칙

type Link = Option<Rc<RefCell<Node>>>;  

 

Rc? RefCell? 이런게 다 뭔지 싶고, 왜 필요한지 싶었다. 일반적인 C/C++의 포인터는 단순히 메모리 주소에 값을 읽고 쓰는 개발자라는 주체만 있지만, Rust에서는 값마다 소유자가 존재한다. 소유한 값을 코드의 다른 곳에 빌려줄 수 있는 대여 메커니즘이 존재하는데, 막연한 이해만 가지고 이중 연결 리스트를 구현해보다가 대여 검사기에게 숱한 지적을 당했다...

 

아이템 15는 전체가 대여와 관련된 내용이다. 소유자와 가변, 일반 레퍼런스의 차이를 설명하고, 불변/가변 레퍼런스의 개수 제한 개념을 독자가 온전히 이해할 수 있도록 두 사례를 비교할 수 있는 예제도 제공한다. 또한 대여 검사기의 지적에 대처하는 방법도 제시한다. 저자는 이 중 스마트 포인터 Rc와 RefCell을 활용하여 이중 연결 리스트를 구현했다. Rc를 사용하면 동일한 항목을 다수가 가리킬 수 있어서 소유권을 공유할 수 있고, RefCell은 가변 레퍼런스를 사용하지 않고도 내부 상태를 변경할 수 있도록 해준다. 개발자들의 수많은 필요 중 대다수는 이미 표준 라이브러리로 구현되어 있으므로, 직접 unchecked 연산을 작성하기 전에 표준이 존재하는지 확인하라는 책 후반부의 조언도 참고했다.

++ 고마워요 ChatGPT !!

 

Rust DoubleLinkedList Example

Rust DoubleLinkedList Example. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

마치며...

러스트 사용 경험이 거의 전무한 상황이라 솔직히 책을 집어들었을 때, 어디부터 어떻게 읽어야 할 지 다소 막막했다. 펼치는 곳마다 이해하기 어려운 내용들이 펼쳐져 있었는데, C++의 확장판이라 생각하고, 그 차이점에 집중해서 기초를 공부한 이후에 읽으니 이전보다는 나았던 것 같다. 다른 개발자분들도 본 서적을 중급서라고 표현하시는 이유를 이해할 것 같다. 그렇다고 책의 가치 자체를 판단하지 못할 정도는 아니다. 이 책은 언제든 참조할 수 있도록 잘 정리된 아이템을 중심으로, 예제와 edge case를 담은 좋은 책이다. Rust를 배우고자 하시는 분들은 이 기회에 초보자에서 중급자로 한 단계 성장할 수 있을 것이라 생각한다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

728x90