Rust 연산자
연산자(operator)는 계산을 하고, 값을 비교하고, 조건을 조합할 때 쓰는 기호예요. C 계열 언어를 써 본 적이 있다면 대부분 익숙해 보일 거예요.
산술 연산자
섹션 제목: “산술 연산자”fn main() { let a = 10; let b = 3;
println!("{}", a + b); // 13 println!("{}", a - b); // 7 println!("{}", a * b); // 30 println!("{}", a / b); // 3 (정수 나눗셈, 나머지는 버려요) println!("{}", a % b); // 1 (나머지)}비교 연산자
섹션 제목: “비교 연산자”비교 연산자는 두 값을 비교해서 bool을 돌려줘요.
fn main() { let a = 5; let b = 8;
println!("{}", a == b); // false println!("{}", a != b); // true println!("{}", a < b); // true println!("{}", a > b); // false println!("{}", a <= b); // true println!("{}", a >= b); // false}비교 연산자는 if 조건 안에서 계속 쓰게 될 거예요. if…else 페이지에서 다뤄요.
논리 연산자
섹션 제목: “논리 연산자”논리 연산자는 불리언 값을 조합하거나 뒤집어요.
fn main() { let is_logged_in = true; let is_admin = false;
println!("{}", is_logged_in && is_admin); // false: 둘 다 true여야 해요 println!("{}", is_logged_in || is_admin); // true: 적어도 하나가 true예요 println!("{}", !is_admin); // true: false를 true로 뒤집어요}&&: 그리고(and). 양쪽이 모두 true일 때만 true예요.||: 또는(or). 적어도 한쪽이 true면 true예요.!: 아님(not). true는 false로, false는 true로 뒤집어요.
대입 연산자
섹션 제목: “대입 연산자”평범한 = 말고도, Rust에는 변수의 현재 값을 바탕으로 값을 갱신하는 축약 연산자가 있어요.
fn main() { let mut score = 10;
score += 5; // score = score + 5 와 같아요 score -= 2; // score = score - 2 score *= 3; // score = score * 3 score /= 2; // score = score / 2
println!("{score}");}변수의 값을 바꾸는 것이니, 이 연산자들을 쓰려면 변수에 mut가 있어야 컴파일된다는 걸 기억하세요.
연산 순서 (우선순위)
섹션 제목: “연산 순서 (우선순위)”식에 연산자가 여러 개 있으면 Rust는 그냥 왼쪽에서 오른쪽으로 계산하지 않아요. 학교 수학처럼 *, /, %가 +, -보다 먼저 계산돼요. 같은 단계의 연산자끼리는 왼쪽에서 오른쪽으로 계산해요. 괄호는 항상 가장 먼저 계산되니까, 다른 순서를 원할 때는 괄호를 쓰세요.
fn main() { let a = 2 + 3 * 4; // *가 먼저: 2 + 12 let b = (2 + 3) * 4; // 괄호가 먼저: 5 * 4 let c = 10 - 4 - 3; // 같은 단계, 왼쪽부터: (10 - 4) - 3 let d = 17 % 5 * 2; // 같은 단계, 왼쪽부터: (17 % 5) * 2 let ok = 1 + 1 == 2 && 3 > 2; // 계산, 그다음 비교, 그다음 &&
println!("{a} {b} {c} {d} {ok}");}실행 결과:
14 20 3 4 true전체 순서를 먼저 계산되는 것부터 대략 정리하면 이래요. 산술(* / %, 그다음 + -), 그다음 비교(== != < > <= >=), 그다음 &&, 그다음 ||, 마지막으로 대입 연산자(= += -= 등)예요. 그래서 1 + 1 == 2 && 3 > 2가 괄호 없이도 동작해요. 그래도 순서를 따져 보느라 잠깐이라도 멈칫하게 된다면 괄호를 넣으세요. 괄호는 비용이 전혀 없고, 코드를 더 읽기 쉽게 만들어 줘요.
연습 문제
섹션 제목: “연습 문제”1. 분과 초
섹션 제목: “1. 분과 초”어떤 동영상의 길이가 125초예요. 이 값을 변수에 저장한 다음, 2분 5초처럼 몇 분 몇 초인지 출력해 보세요. 힌트: 정수 나눗셈 /로 분을 구하고, %로 남은 초를 구할 수 있어요.
정답 보기
fn main() { let total_seconds = 125;
let minutes = total_seconds / 60; // 2 (나머지는 버려요) let seconds = total_seconds % 60; // 5 (나머지)
println!("{minutes}분 {seconds}초");}실행 결과:
2분 5초2. 점수 계산하기
섹션 제목: “2. 점수 계산하기”게임 점수 score를 10에서 시작하세요. 축약 대입 연산자를 써서 25를 더하고, 5를 빼고, 두 배로 만드세요. 그리고 점수, 점수가 50 이상인지, 점수가 50 이상이면서 동시에 짝수인지를 출력해 보세요. 힌트: score % 2 == 0이면 짝수예요.
정답 보기
fn main() { let mut score = 10;
score += 25; // 35 score -= 5; // 30 score *= 2; // 60
println!("점수: {score}"); println!("레벨 통과? {}", score >= 50); println!("통과했고 짝수? {}", score >= 50 && score % 2 == 0);}실행 결과:
점수: 60레벨 통과? true통과했고 짝수? true- 산술:
+ - * / %. 정수 나눗셈은 소수점 아래를 버려요. - 비교:
== != < > <= >=. 모두bool을 돌려줘요. - 논리:
&&(그리고),||(또는),!(아님). - 축약 대입:
+= -= *= /=는mut변수의 값을 그 자리에서 갱신해요.++는 없어요. * / %가+ -보다 먼저 계산되고, 산술이 비교와&&/||보다 먼저 계산돼요. 헷갈리면 괄호를 쓰세요.
이해도 점검
섹션 제목: “이해도 점검”이해도 점검
1. 양쪽이 모두 정수일 때 10 / 3의 결과는 무엇일까요?
2. ==나 < 같은 비교 연산자는 항상 어떤 타입을 돌려줄까요?
3. score += 5;가 컴파일되려면 무엇이 필요할까요?
점수: 0 / 3
더 알아보기
섹션 제목: “더 알아보기”- B - 연산자와 기호 - 러스트 프로그래밍 언어: Rust의 모든 연산자와 그 역할을 표 하나로 정리했어요.
- Literals and operators — Rust by Example (영어): 산술, 논리, 비트 연산자를 짧고 실행 가능한 예제로 보여 줘요.
- Expression precedence — The Rust Reference (영어): Rust가 연산자를 계산하는 정확한 순서를 처음부터 끝까지 정리했어요.
- Operator expressions — The Rust Reference (영어): 정수 오버플로가 일어나면 어떻게 되는지를 포함해서, 연산자마다 정확한 규칙을 설명해요.