반응형
이전 글에서는 러스트의 에러 처리 철학, Result와 Option, panic! 매크로를 통해 예외 없이 명시적으로 에러를 처리하는 방식을 살펴보았습니다. 이제는 러스트가 무엇보다 강력하게 내세우는 장점 중 하나인 동시성(Concurrency)과 병렬성(Parallelism) 지원에 대해 알아보겠습니다. C++도 C++11 이후 std::thread, std::mutex, std::atomic 등을 통해 멀티스레딩을 지원하지만, 여전히 개발자가 락(Lock) 관리나 데이터 경쟁(Race Condition), 댕글링 포인터 문제에 신경 써야 합니다. 반면 러스트는 언어 차원에서 안전성 보장을 강화하여, 고성능 병렬 코드를 작성하면서도 메모리 안전성과 데이터 경쟁 방지를 지원합니다.기본 스레드 사용하기러스..
이전 글에서는 러스트의 트레이트(Trait)와 제네릭(Generic) 개념을 통해 추상화와 다형성을 어떻게 안전하고 명확하게 달성하는지 살펴보았습니다. 이번에는 러스트에서 에러를 처리하는 방식을 알아봅시다. C++에서 예외(Exceptions)를 던지고 try/catch로 받는 패턴에 익숙하다면, 러스트가 보여주는 접근 방식은 다소 낯설게 느껴질 수 있습니다. 러스트는 기본적으로 예외(throw)와 catch 블록이 없습니다. 대신 함수의 반환값을 통해 에러 상황을 명시적으로 처리하는 Result 타입, 값이 존재하지 않을 수도 있음을 표현하는 Option 타입, 그리고 프로그램이 더 이상 진행할 수 없는 치명적 상황에서 사용하는 panic! 매크로로 구성된 에러 처리 철학을 가지고 있습니다.런타임 예외..
이전 글에서는 구조체, 열거형, 패턴 매칭, 모듈 시스템을 통해 러스트의 타입 정의와 코드 구조화를 살펴보았습니다. 이제는 러스트에서 추상화와 다형성을 어떻게 구현하는지 알아볼 차례입니다. C++ 개발자라면 ‘템플릿(Template)’과 ‘가상 함수(Virtual function)’, ‘인터페이스(Interface)’ 등을 통해 제네릭 프로그래밍, 다형성을 달성하는 것에 익숙할 텐데요. 러스트는 이와 유사하지만 좀 더 정교하고 명확한 개념인 트레이트(Trait)와 제네릭(Generic)을 제공합니다.트레이트(Trait)란 무엇인가?러스트에서 트레이트는 특정 타입이 "이런 기능을 갖추고 있다"는 것을 표현하는 인터페이스 역할을 합니다. C++에서 순수 가상 함수만 갖는 클래스(인터페이스)나 개념(Conce..
앞선 글들에서 우리는 러스트의 기본 문법, 소유권 및 빌림 규칙, 컬렉션과 이터레이터를 다루며 러스트의 전반적인 프로그래밍 감각을 익혀왔습니다. 이제 조금 더 러스트다운 코드를 작성하기 위해 러스트에서의 구조체(Struct), 열거형(Enum), 그리고 C++와는 다른 문맥에서 강력한 기능을 제공하는 패턴 매칭(Pattern Matching), 마지막으로 모듈(Module)과 크레이트(Crate)를 통한 프로젝트 구조화 방법을 살펴보겠습니다. C++에 익숙하다면 클래스, enum, 네임스페이스(namespace), 헤더/소스 파일 구조와 비교하며 러스트에서는 어떤 식으로 코드 조직과 타입 정의를 하는지 감을 잡을 수 있을 것입니다.구조체(Struct) 정의하기C++에서 class나 struct를 사용해 ..
지난 글에서 러스트의 소유권(Ownership), 빌림(Borrowing), 라이프타임(Lifetime) 개념을 살펴보았습니다. 이번에는 이러한 개념들을 실제로 활용해보는 실습 예제를 통해, 러스트의 컬렉션(Collection), 슬라이스(Slice), 그리고 함수형 프로그래밍 스타일을 지원하는 이터레이터(Iterator) 등을 다뤄보겠습니다. 또한 C++에서 std::vector, std::array, std::map 등을 사용하던 경험과 비교해보며, 러스트가 어떤 식으로 자료 구조를 제공하고 메모리 안전성을 유지하는지 살펴보겠습니다.벡터(Vector): 동적 크기 배열C++에서 std::vector로 동적 배열을 관리하던 것처럼, 러스트에서도 Vec 타입을 통해 크기가 가변적인 배열을 다룰 수 있습니..
이전 글에서는 Cargo를 사용해 프로젝트를 만들고, 변수 선언, 함수, 제어문을 통해 러스트의 기초적인 문법을 맛보았습니다. 이제 러스트의 핵심 개념인 소유권(Ownership), 빌림(Borrowing), 그리고 라이프타임(Lifetime)으로 넘어갈 차례입니다. 이 개념들은 러스트를 다른 언어와 차별화하는 중요한 기둥이며, C++와 가장 큰 철학적 차이를 보여주는 부분이기도 합니다. C++에서 포인터나 참조를 사용할 때 언제 메모리를 할당하고 해제할지, 어디서 유효하며 언제 소멸하는지에 대한 관리가 까다롭습니다. 러스트는 이러한 문제를 언어 차원에서 다루어 메모리 안전성을 확보하고, 개발자가 의도하지 않은 메모리 오류를 최소화하도록 돕습니다.소유권(Ownership) 기초 이해하기러스트에서는 모든 ..
이전 글에서 러스트가 어떤 언어이며 C++와 어떤 점에서 다른지 간략히 살펴봤습니다. 이번 글에서는 러스트 개발을 보다 편리하게 만들어주는 표준 빌드 툴이자 패키지 매니저인 Cargo에 대해 알아봅니다. Cargo를 익히면 프로젝트 생성, 빌드, 실행, 라이브러리 의존성 관리 등이 훨씬 수월해집니다. 또한 기본적인 변수 선언, 함수 정의, 제어문 등을 살짝 맛보며 러스트 코드를 실제로 작성해봅시다.Cargo란 무엇인가?C++를 사용해보신 분이라면 빌드 도구로 CMake나 Meson, Bazel 등을 접했을 텐데요. 때로는 프로젝트 설정 파일이 복잡하거나 라이브러리를 링크하는 과정에서 어려움을 겪는 경우가 많습니다. 러스트는 이러한 문제를 해결하기 위해 Cargo라는 통합 빌드 & 패키지 관리 툴을 제공합..
프로그래밍 언어 러스트(Rust)를 배우려는 분들을 위한 첫 번째 글입니다. 이 시리즈는 전반적으로 러스트를 처음 접하는 사람들을 대상으로, 기초부터 차근차근 설명해나갈 예정입니다. 특히 이미 C++에 익숙한 분들을 위해 C++과의 차이점을 통해 러스트가 어떤 특성을 갖고 있는지 함께 살펴보겠습니다.왜 러스트인가?C++로 이미 다양한 프로젝트를 진행해본 분이라면, 메모리 관리나 복잡한 템플릿 문법, 그리고 때때로 발생하는 미묘한 정의되지 않은 동작(Undefined Behavior)에 익숙하실 겁니다. 러스트는 이러한 부분을 조금 더 안전하고 명시적으로 처리하고자 하는 철학을 가지고 탄생한 언어입니다.메모리 안전성: 러스트는 소유권(Ownership)과 빌림(Borrowing), 라이프타임(Lifetim..
온라인 튜토리얼 Tour of Rust (한국어) - 온라인 코드 에디터도 같이 제공 예제로 배우는 Rust 프로그래밍 (기초, 심도) Comprehensive Rust (한국어) The Rust Programming Language (한국어) 온라인 코드 에디터 The Rust Playground