전체 글 (74) 썸네일형 리스트형 [Rust] 에러 처리 안녕하세요.오늘은 Rust의 에러 처리에 대해 알아보도록 하겠습니다.📌 Rust의 에러 처리Rust는 Exception 대신, 오류를 2가지로 나눠서 에러를 처리합니다.복구 가능한 오류 (Recoverable Errors) → Result 사용복구 불가능한 오류 (Unrecoverable Errors) → panic! 사용📌 복구 가능한 오류 (Recoverable Errors)✅ 정의프로그램이 정상적으로 실행을 이어나갈 수 있는 오류 입니다적절한 오류 처리 후 다시 실행을 이어나갈 수 있습니다 ✅ 해결 방법Result를 사용합니다호출자가 에러를 직접 처리할 수 있도록 반환합니다 예제) 파일 읽을 때 오류 발생파일이 존재하지 않으면, 새 파일을 생성하는 방식으로 복구 가능한 예제입니다use std::.. [Rust] 스마트 포인터 (2) - RefCell<T>, Arc<T>, Mutex<T> 지난 포스터에 이어서 이번엔RefCell, Arc, Mutex에 대해 알아보겠습니다.📌 Rc의 한계Rc는 아래 2가지 한계가 있습니다.가변성멀티스레드 이를 해결해주는 스마트 포인터로 RefCell, Arc가 있습니다.📌 RefCell✅ 개념런타임에 가변성을 허용하는 스마트 포인터RefCell를 사용해서 가변성을 사용할 수 있습니다use std::cell::RefCell;fn main() { let data = RefCell::new(5); *data.borrow_mut() += 10; // 런타임에서 가변 빌림 println!("data = {}", data.borrow()); // data = 15}borrow_mut()을 통해 불변 변수를 가변으로 변경 가능합니다✅ Rc + Ref.. [Rust] 스마트 포인터 (1) - Box<T>, Rc<T> 안녕하세요.오늘은 스마트 포인터에 대해 알아보고,그 중 Box, Rc에 대해 살펴보도록 하겠습니다.📌 스마트 포인터스마트 포인터는 일반적인 포인터와 달리, 메모리 해제 및 관리 기능을 제공하는 포인터 입니다.소유권과 수명을 따르며,Drop 트레잇을 구현하여 자동으로 메모리 정리가 됩니다 Rust에서 자주 사용하는 스마트 포인터 중 Box와 Rc에 대해 알아보겠습니다.📌 Box✅ 기본 개념힙 할당 스마트 포인터fn main() { let x = Box::new(10); // 10을 힙에 저장 println!("x = {}", x); // 10}Box를 사용하면 값(10)은 힙에 저장됩니다.x는 힙을 가리키는 포인터 역할을 합니다.Box는 기본적으로 Deref와 Drop 트레잇을 구현하여, 자.. [Rust] 제네릭(Generic), 트레잇(Trait), 동적 디스패처(dynamic dispatch) 안녕하세요.오늘은 제네릭, 트레잇에 대해 알아보겠습니다.📌 Preview제네릭을 사용하면 타입을 일반화하여 재사용성을 높일 수 있습니다. 트레잇은 공통된 동작을 정의하여 여러 타입에서 사용할 수 있도록 합니다.다른 언어의 Interface와 유사한 개념입니다📌 제네릭 (Generic)구체적인 타입을 명시하지 않고 다양한 타입에 대해 동작할 수 있도록 하는 기능입니다.함수, 구조체, 열거형 등을 특정 타입에 의존하지 않고 재사용할 수 있도록 합니다.제네릭 구조체다른 언어와 유사한 방식으로 구조체를 사용할 수 있습니다.struct Point { x: T, y: T,}fn main() { let integer_point = Point { x: 5, y: 10 }; let float_p.. [Rust] 소유권, 참조와 빌림, 슬라이스 안녕하세요.Rust의 소유권과 참조에 대해서 알아보도록 하겠습니다.서론Rust의 가장 중요한 특징은 메모리 안정성을 보장하면서도 GC(가비지 컬렉터) 없이 동작합니다.이를 가능하게 하는 핵심 개념이 소유권, 참조와 빌림, 슬라이스 입니다.💿 소유권 (Ownership)🔹 개념Rust에서는 heap에 저장되는 값은 특정한 변수 하나만이 소유권을 가집니다.소유권을 가진 변수는 해당 값이 유효한 범위를 결정하며, 소유권이 사라지면 값도 메모리에서 해제됩니다. 🔹 소유권 규칙 - 한 번에 딱 하나의 owner만 존재할 수 있습니다.- owner가 scope 밖으로 벗어나는 때, 값은 버려집니다. (자동 반납 지점)- 값을 참조하는 경우, 원본 값을 변경할 수 없습니다. (기본적으로 불변 참조)fn main.. [Rust] 기초 문법 안녕하세요.Rust Programming의 기초 문법에 대해 알아보겠습니다💿 데이터 타입Rust는 컴파일 타임에 데이터 타입이 결정되어야 합니다.타입을 명시적으로 지정하거나, 컴파일이 타입을 추론할 수 있게 작성하면 됩니다.fn main() { let x = 42; // i32로 타입 추론 let y: f64 = 3.14; // f64 타입을 명시적으로 지정 println!("x = {}, y = {}", x, y);}💿 자료 구조튜플여러 개의 값을 하나의 변수에 저장할 수 있는 자료형입니다.서로 다른 타입의 값도 함께 포함할 수 있습니다.fn main() { let person: (i32, f64, &str) = (30, 72.5, "Alice"); println!("Ag.. [Architecture] ISP, LSP 적용하기 안녕하세요.회사에서 진행한 프로젝트에 적용했던, ISP, LSP와 관련된 사례를 정리해보겠습니다.ISP & LSPISP (Interface Segregation Principle)인터페이스는 클라이언트에 맞게 분리하라- 하나의 커다란 인터페이스 보다는, 역할에 맞는 작은 인터페이스 여러 개로 나누는 것이 좋다 LSP (Liskov Substitution Principle)하위 타입은 상위 타입을 대체할 수 있어야 한다- 자식 클래스는 부모 클래스를 대체할 수 있어야 한다- 상위 클래스: Bird // 하위 클래스: 날지 못하는 새 → LSP 위반 LSP 위반유관 부서에서 기능 추가를 요청했습니다JsonTimeUpdateSharedPreferenceTimeUpdate 이와 관련된 클래스가 아래와 같다고 가.. [함수형 프로그래밍] 고차 함수 안녕하세요.오늘은 함수형 프로그래밍에 필요한 기본 개념인 고차 함수에 대해 알아보도록 하겠습니다.고차 함수 (High-Order Function)부분 함수 (Partial Function)커링 함수 (Currying Function)합성 함수 (Composition Function)일급 객체함수형 프로그래밍에서는 함수를 객체처럼 다룹니다.코틀린도 이러한 함수형 프로그래밍 기능을 지원하는 언어 중 하나입니다.1) 고차 함수 (High-Order Function)함수를 변수처럼 전달하고 반환할 수 있는 개념으로, 아래 2가지 기능이 가능합니다함수를 매개변수로 받는 함수 ( highOrderFunction1 )함수를 반환하는 함수 ( highOrderFunction2 )fun highOrderFunction1.. 이전 1 2 3 4 ··· 10 다음