[Rust/러스트] 구조체(struct) 정리
2022. 2. 17. 17:04ㆍProgramming Language/Rust
반응형
■ 구조체
구조체는 튜플과 유사하게 구조체의 구성요소들을 각각 다른 타입으로 가질 수 있습니다.
튜플은 구성요소에 접근하기 위해 색인을 이용하지만, 구조체는 각 구성요소들을 명명함으로써 구성요소에 접근할 때 순서에 의존하지 않고 접근할 수 있습니다.
◆ 구조체 인스턴스 생성
Person 구조체를 정의하고 인스턴스를 생성하여 모든 구성요소를 출력합니다.
구조체가 구성요소에 접근할 때는 튜플과 동일하게 점(.)을 이용합니다.
struct Person{
name : String,
age : u32,
address : String,
email : String,
}
fn main(){
// 인스턴스 생성
let person = Person{
name : String::from("Hyunmin han"),
age : 29,
address : String::from("서울시 강남구 역삼동"),
email : String::from("hyunmin@gmail.com"),
};
// 구성요소에 접근
println!("Name : {}", person.name);
println!("Age : {}", person.age);
println!("Address : {}", person.address);
println!("Email : {}", person.email);
}
▶ 출력 결과
Name : Hyunmin han
Age : 29
Address : 서울시 강남구 역삼동
Email : hyunmin@gmail.com
◆ 구조체의 필드명과 변수명이 같을 경우 변수명으로 초기화 가능
구조체의 필드명과 변수명이 같을 때는 필드명 : 값 형식이 아닌 변수명 으로 초기화 할 수 있습니다.
struct Person{
name : String,
age : u32,
address : String,
email : String,
}
fn build_person(name : String, age : u32, address : String, email : String) -> Person{
// 필드와 변수명이 같을 때 초기화
Person {
name,
age,
address,
email
}
}
fn main(){
let person = build_person(
String::from("Hyunmin han"),
29,
String::from("서울시 강남구 역삼동"),
String::from("hyunmin@gmail.com")
);
println!("Name : {}", person.name);
println!("Age : {}", person.age);
println!("Address : {}", person.address);
println!("Email : {}", person.email);
}
▶ 출력 결과
Name : Hyunmin han
Age : 29
Address : 서울시 강남구 역삼동
Email : hyunmin@gmail.com
◆ 구조체의 갱신
A 인스턴스를 활용하여 B 인스턴스를 생성할 때 A 인스턴스의 필드를 그대로 사용해야 할 경우 구조체의 갱신법을 사용할 수 있습니다.
struct Person{
name : String,
age : u32,
address : String,
email : String,
}
fn main(){
let person1 = Person{
name : String::from("Hyunmin han"),
age : 29,
address : String::from("서울시 강남구 역삼동"),
email : String::from("hyunmin@gmail.com"),
};
let person2 = Person{
name : String::from("Donghun lee"),
age : 28,
// person1의 address, email 필드를 그대로 가져와서 사용
..person1
};
println!("Name : {}", person2.name);
println!("Age : {}", person2.age);
println!("Address : {}", person2.address);
println!("Email : {}", person2.email);
}
▶ 출력 결과
Name : Donghun lee
Age : 28
Address : 서울시 강남구 역삼동
Email : hyunmin@gmail.com
◆ 튜플 구조체
구조체에 필드명을 명명하지 않고 타입만을 정의하여 사용합니다.
튜플의 데이터 접근 방식과 동일하게 색인(인덱스)으로 데이터에 접근합니다.
struct Location(i32, i32, i32);
fn main(){
let top = Location(100, 100, 100);
let bottom = Location(0, 0, 0);
println!("Top : X : {}, Y :{}, Z :{}", top.0, top.1, top.2);
println!("Bottom : X : {}, Y :{}, Z :{}", bottom.0, bottom.1, bottom.2);
}
▶ 출력 결과
Top : X : 100, Y :100, Z :100
Bottom : X : 0, Y :0, Z :0
반응형
'Programming Language > Rust' 카테고리의 다른 글
[Rust/러스트] 열거형(enum) 정리 (0) | 2022.02.20 |
---|---|
[Rust/러스트] 구조체의 메소드, 연관함수 (0) | 2022.02.17 |
[Rust/러스트] 참조자(References)와 빌림(Borrowing) (0) | 2022.02.17 |
[Rust/러스트] 소유권(Owner) (0) | 2022.02.17 |
[Rust/러스트] 반복문 정리 (0) | 2022.02.16 |