
6.1 구조체(Structs)

구조체 말 그대로 영어로 struct 로 각 필드는 이름과 타입으로 이루어짐 데이터를 하나로 묶는 사용자 정의 타입으로 매우 자주 사용하는 내용이다. 많은 예제들로 많이 익히길 바란다.
// 구조체 정의 struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}
// 인스턴스 생성
let user1 = User {
username: String::from("user123"),
email: String::from("user@example.com"),
active: true,
sign_in_count: 1,
};
예시만 있기 때문에 뒤에서 cargo 명령을 배우겠지만 fn main() 함수가 있어야 할 것이다. 에러가 발생하면 왜 그런건지 이것만 카피해서는 동작이 안된다는 것이다.
6.2 열거형(Enums)

구조체랑 비슷하나 여기는 가능한 값의 집합을 정의하고 있고 다른 타입 데이터를 가지고 올 수 있다는 것이다.
즉 구조체는 이름과 타입이면 열거형은 가능한 값의 집합을 말한다.
// 열거형 정의 enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
// 열거형 값 사용
let msg1 = Message::Quit;
let msg2 = Message::Write(String::from("hello")); let msg3 = Message::Move { x: 10, y: 20 };
6.3 구조체 메서드

구조체에 메서드는 impl 블록 안에 메서드 정의한다. 위에 있는 구조체, 열거형과 구분이 되니 무엇이 다른 지 검토하고 검색해보길 바란다.
매개변수 첫 번째는 &self(인스턴스 자신) ...여기서 인스턴스 용어를 검색을 통해 알아야되고 관련 내용을 잘 숙지하기 바란다.
// 구조체에 메서드 구현 impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
fn can_hold(&self, other: &Rectangle) -> bool { self.width > other.width && self.height >
other.height
} }
// 메서드 호출
let rect1 = Rectangle { width: 30, height: 50 }; println!("넓이: {}", rect1.area());
메서드가 무엇이고 인스턴스가 무엇이고 등등 용어에 대한 정확한 정의를 알고 개발하는 것이 도움이 많이 될 것이다. 검색을 통해 정의는 꼭 숙지하기를 바란다. self 많이 사용하는 것이다. 다른 언어에서도 많이 사용하고 있다. 무엇인지 의미를 명확하게 검색을 통해 익히길 바란다.
6.4 실습 예제
// 구조체와 열거형 함께 사용
struct Point {
x: i32,
y: i32,
}
enum Shape {
Circle(Point, u32),
Rectangle(Point, Point),
}
fn main() {
let center = Point { x: 0, y: 0 };
let circle = Shape::Circle(center, 5); }
어떤 결과가 나오는지 미리 판단해보라..그리고 실행해보라 판단한 내용과 맞는 지 찬찬히 코드를 한 줄씩 파악하고 전체 구조에 대해서도 잘 파악하기를 바란다.