Rust기초 알기 - 5.1 구조체 정의와 사용
Rust기초알기(5) - 구조체와 열거형
5.1 구조체 정의와 사용
5.2 열거형 정의와 사용
5.3 메서드와 연관 함수
[목차] Rust Programming - Rust 기초 알기 목차.Zip
#Rust프로그래밍 #Rust언어기초 #Rust기초문법 #Rust기초알기
Rust기초 알기 - 5.1 구조체(Struct) 정의와 사용
구조체(Struct)
구조체는 관련된 데이터 필드(field)를 하나의 단위로 묶는 데 사용되며, 이를 통해 복잡한 데이터 구조를 만들고 관리할 수 있습니다.
구조체의 정의 문법
구조체를 정의하기 위해 struct 키워드를 사용합니다. 일반적인 구조체 정의의 형태는 다음과 같습니다:
struct `구조체이름` {
필드1: 타입1,
필드2: 타입2,
// ...
}
- struct `구조체이름` : 구조체 이름을 지정합니다.
- 필드1: 타입1 : 필드 이름과 필드 타입으로 구성하여 구조체 내에 포함되는 각각의 데이터 필드를 나타냅니다.
구조체 정의 예시
구조체는 struct Person은 구조체의 이름을 정의하고 , name, age, address등의 구조체의 필드를 정의 합니다. 각 필드는 각자 자신의 데이터 타입을 가지고 있습니다. name과 address가 문자열(String) 타입이고, age가 부호 없는 32비트 정수(u32) 타입을 정의합니다.
struct Person {
name: String,
age: u32,
address: String,
}
구조체 초기화
구조체는 let 키워드를 사용하여 변수를 선언하고 인스턴스를 초기화합니다,
// 구조체의 인스턴스 초기화
let 변수명 = 구조체이름 {
필드1: 값1,
필드2: 값2,
// ...
};
let 키워드를 이용하여 Person 구조체를 초기화 합니다.
//구조체 초기화
let person1 = Person {
name: String::from("John"),
age: 30,
address: String::from("123 Main St"),
};
구조체의 필드에 접근: `. `(도트) 연산자를 사용
person1은 Person 구조체의 인스턴스이며 구조체의 필드에 접근할 때는`. `연산자를 사용합니다:
println!("Name: {}", person1.name);
println!("Age: {}", person1.age);
println!("Address: {}", person1.address);
구조체의 필드 값의 변경
구조체의 필드 값을 수정하려면 해당 필드에 대입 연산자(=)를 사용하여 새로운 값을 할당합니다.
// 구조체 필드의 값을 직접 수정 합니다.
변수명.필드 = 새로운값;
let mut person2 = Person {
name: String::from("Alice"),
age: 25,
address: String::from("456 Elm St"),
};
// 필드의 값에 직접 수정을 합니다.
person2.age = 26;
- 위의 코드에서 person2의 age 필드를 26으로 변경하고 있습니다.
구조체의 참조
또한, 구조체를 참조하는 변수를 선언하고자 할 때는 &를 사용하여 참조를 생성할 수도 있습니다.
Rust 변수는 불변 성질을 기본으로 하고 있어서, 값의 변경이 필요 할 경우 가변참조(mut )로 선언 하여야 합니다.
// 변수의 참조와 마찬가지로 불변 참조와 가변참조가 있음
let 변수명 = &구조체변수; //불변 참조
let 변수명 = &mut구조체변수; //가변 참조
let person_ref = &person; // person의 불변 참조
let person_ref = &mut person; // person의 가변 참조
구조체 메소드 정의
구조체는 메소드(method)도 가질 수 있습니다. 메소드는 구조체에 대해 정의된 특정 동작을 구현하는 함수입니다. 메소드를 정의하려면 impl 블록을 사용합니다
impl 구조체이름 {
fn 메소드이름(&self, 매개변수1: 타입1, 매개변수2: 타입2) -> 반환타입 {
// 메소드 구현
}
}
impl Person 블록을 사용하여 메소드를 정의합니다.
impl Person {
fn say_hello(&self) {
println!("Hello, my name is {}.", self.name);
}
}
- say_hello는 Person 구조체에 대한 메소드입니다. self는 메소드를 호출한 구조체 인스턴스를 참조하는 데 사용
구조체 이용시 유의 사항
가변 참조와 불변 참조
1) 불변 참조를 이용한 구조체 활용
struct Person {
name: String,
age: u32,
}
fn main() {
let person = Person {
name: String::from("John"),
age: 30,
};
let person_ref = &person; // person의 불변 참조
println!("Name: {}", person_ref.name);
println!("Age: {}", person_ref.age);
}
- person의 필드에 접근하여 값을 읽을 수 있습니다.
- person_ref를 통해 필드 값을 변경하려고 하면 컴파일 오류가 발생 합니다.
2) 가변 참조를 이용한 구조체 활용
struct Person {
name: String,
age: u32,
}
fn main() {
let mut person = Person {
name: String::from("John"),
age: 30,
};
let person_ref = &mut person; // person의 가변 참조
person_ref.age = 31; // person의 age 필드 변경
println!("Name: {}", person_ref.name);
println!("Age: {}", person_ref.age);
}
- person_ref는 person의 가변 참조 : person의 필드에 접근하여 값을 변경할 수 있습니다.
- person_ref.age = 31;은 person의 age 필드 값을 31로 변경 합니다.