자바스크립트에서 러스트로의 여정
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발, 개발 툴
대상자
프론트엔드/자바스크립트/타입스크립트 배경의 개발자
난이도: 중급 이상 (런타임 자동화와 저수준 메모리 관리 개념 이해 필요)
핵심 요약
- 러스트는 메모리 안전성과 동시성 안전성을 강제하며, GC가 없어
mut
키워드로 변수의 가변성을 명시적으로 선언해야 함 &str
과String
타입의 차이:&str
은 고정 크기의 슬라이스,String
은 힙에 할당된Vec
println!
매크로는 라이프타임, 파트 포인터, 마크로 등 러스트 핵심 개념을 포함한 예제로, 초보자에게 복잡함을 유발
섹션별 세부 요약
1. 러스트의 설계 철학과 명명 규칙
trait
은 인터페이스,crate
은 패키지 단위,impl
은implement
의 약자mut
키워드는 변수의 가변성을 명시적으로 요구하며,const
로 선언된 변수도 참조하는 객체의 내부 변경이 가능Vec
과String
은Vec
으로 구현되어 힙 메모리에 할당
2. 가변성과 빌로우 체커(Borrow Checker)
- 가변 참조
&mut T
와 불변 참조&T
는 동시에 존재할 수 없음 - 러스트는 모든 값의 크기를 컴파일 타임에 결정해야 하므로,
str
은 크기가 불확정적이며&str
을 사용 mut
키워드를 사용하지 않으면 구조체의 필드도 수정 불가능
3. "Hello, World!" 예제와 스트링 타입
println!("hello world")
는 라이프타임'static
, 파트 포인터, 매크로 등의 개념을 내포.rodata
섹션에 저장된&'static str
은 프로그램 실행 중 영구히 존재&str
은 포인터와 길이 필드를 포함하는 파트 포인터로,str
의 크기 불확정성 해결
4. `String` 타입과 메모리 레이아웃
String
은Vec
으로 구현되어 힙에 할당,ptr
,len
,capacity
필드를 포함&str
은 스택에 할당된 포인터(16바이트, 2개의usize
),String
은 힙에 할당된 데이터Vec
과String
은 동적 크기의 메모리 관리가 필요,Rc
/Arc
와 같은 스마트 포인터 사용 권장
결론
- 러스트를 학습할 때는
mut
,&str
,String
,Vec
과 같은 핵심 개념을 명확히 이해해야 함 rust-analyzer
와 같은 도구를 사용해 라이프타임과 메모리 레이아웃을 시각화- 초기 단계에선
println!
매크로와&str
타입의 내부 구조를 예제를 통해 반복 학습 필요