본문 바로가기

Rust-Language

Rust-Language 구조체

반응형

구조체란 ?

여러 개의 연관된 값을 가질수있는 튜플형식의 구조체를 생성해 각각의 구성 요소에 이름 및 타입을 붙일수있습니다.

 

구조체 정의 예)

struct Person {
    name: String,
    age: u8,
}

해당 코드는 Person이라는 구조체 정의하고 구조체 안에 name에 String 타입의 필드, age에 u8타입필드를 가진 구조체

 

 

구조체 인스턴스화

let person = Person {
    name: String::from("승민"),
    age: 24,
};

Person 구조체의 인스턴스 생성후, name 필드안에 "승민" 이라는 문자열, age에는 24라는 값을 할당

 

메서드 정의

impl Person {
    fn say_hello(&self) {
        println!("안녕하세요, 제 이름은 {}이고, 나이는 {}살입니다.", self.name, self.age);
    }
}

출력 : "안녕하세요, 제 이름은 승민 이고, 나이는 24살입니다

 

코드안 say_hello라는 메서드를 추가한 작업이고 , 이메서드는 자신이 속한 인스턴스의 name과 age의 필드값을 출력

 

메서드호출

person.say_hello();

 


 

구조체 리팩터링하는 방법

구조체의 리팩터링은 구조체의 정의를 변경하거나 메서드를 추가, 변경, 삭제 등의 작업을 포함

 

구조체 필드 추가: 기존의 Person 구조체에 새로운 필드를 추가하려면, 구조체 정의를 변경하면 됩니다

 

struct Person {
    name: String,
    age: u8,
    job: String,
}

 

 

메서드 추가

impl Person {
    fn say_hello(&self) {
        println!("안녕하세요, 제 이름은 {}이고, 나이는 {}살입니다.", self.name, self.age);
    }

    fn get_age(&self) -> u8 {
        self.age
    }
}

Person 구조체에 get_age라는 새로운 메서드 추가

 

 

메서드 삭제

Person 구조체에서 메서드 삭제를 하려면 해당 메서드를 impl 블록에서 제거하면 됩니다.

 

 


 

Self 함수란 

Rust에서 self는 메서드가 속한 구조체의 인스턴스를 가리키는 키워드

예) 다른 객체지향 언어의 this 키워드와 유사

 

self를 사용하지 않는다면, 해당 메서드는 인스턴스의 상태에 접근하거나 변경이 불가능

 

 

연산자 오버로딩

연산자 오버로딩은 특정 클래스나 구조체에서 연산자의 동작을 사용자가 정의하는것

 

하지만 Rust에서는 std::ops 모듈을 통해서 제한적으로 연산자 오버로딩을 지원하지만

Rust언어에서는 안전성과 명확성을 중요시하는 언어라, 사용자가 임의로 모든 연산자 오버로딩 하는것을 허용 X

 

 

 

반응형

'Rust-Language' 카테고리의 다른 글

Rust-Language 열거형과 패턴 매칭  (3) 2023.12.31
Rust-Language 소유권 개념  (2) 2023.12.27
Rust-language 프로그래밍 개념  (2) 2023.12.27