2021 시작

소유권

2021. 5. 5. 12:57
//컴파일 시 크기를 알 수 없는(동적할당)을 사용하는 변수의 데이터 대입법
/*fn main() {
    
    let s1 = String::from("hello");
    let s2 = s1;

    //이렇게 하면 s1은 사용할 수 없을것이다 그 이유는 copy를 한게아니라
    //move를 한것이기 때문이다.
    println!("{}, world!", s1);
    println!("{}, world!",s2);
}*/

/*

//같이 사용하고 싶다면 클론 함수를 사용하여 복사를 할 수 있다.
fn main()
{
    let s1 = String::from("hello");
    let s2 = s1.clone();

    println!("s1 = {}, s2 = {}",s1,s2);

}
*/


/*
//스택 전용 데이터 : 복사(copy)
fn main()
{
    let x = 5;
    let y = x;

    //이 코드가 제대로 동작하는 이유는 처음 컴파일 할 때
    //이미 크기를 알 기 때문이다.
    println!("x = {}, y = {}",x,y);
}
*/

/*fn main()
{
    let original = String::from("hello");

    //.clone()을 하지않고 넘기면 소유권 자체가 return_string함수의
    //매개변수로 이동해버린다.
    let return_str = return_string(original.clone());

    println!("original : {}",original);
    println!("return_str : {}",return_str);
}

fn return_string(str:String)->String{

    str
}
*/
/*
fn main()
{
    let s1 = String::from("hello");

   
    let(s2,len) = calculate_length(s1);

    println!("'{}'의 길이는 {}입니다.",s2,len);
}

fn calculate_length(s:String) -> (String,usize)
{
    let length = s.len();

    (s,length)
}*/




/*
//'&'참조를 이용하면 소유권을 지켜내면서 "대여"를 해주 수있다.
fn main()
{
    let s1 = String::from("hello");

    let s1_len = immutability_str_len(&s1);

    println!("s1 : {}, s1_len : {}",s1,s1_len);


    let mut s2 = String::from("hello");
    let s2_len = variable_str_len(&mut s2);

    println!("s2 : {}, s2_len : {}",s2,s2_len);
    

}

fn immutability_str_len(s1: &String) -> usize
{
    //s1.push('1'); <- 대여한 변수는 기본적으로 불변이다.
    s1.len()
}

//"& mut을 사용하면 가변의 대여를 할 수 있다."
fn variable_str_len(s2 :& mut String) -> usize
{
    s2.push_str(" world");
    s2.len()
}
*/


/*
fn main()
{
    let mut s = String::from("hello");

    let r1 = &mut s;
    //let r2 = &mut s;  <- 특정 범위 내에는 가변참조를 한번밖에 할 수 없는 제약이있다.
    그럼 당연히 대여해준 매개변수도 카운터로 들어가니 매개변수로 넘어간 해당 함수에서는 사용할 수 없다.
    println!("{}",r1);
}
*/
/*
fn main()
{
    let s = String::from("hello");

    //불변은 여러번 참조해도 상관없다.
    let immut1 = &s;
    let immut2 = &s;
    let immut3 = &s;

    //let variable = &mut s; <-다른곳에서 불변으로 이미 참조하고 있기때문에 불가능?

}*/

/*
//{}으로 구역을 나누면 가변참조를 여러번 사용할 수 있다.
fn main()
{
    let mut var_s = String::from("hello");

    {
        let var1 = &mut var_s;
        

        println!("var1 : {}",var1);
    }
    
    {
        let var2 = &mut var_s;
        println!("var2 : {}",var2);
    }

    let var3 = &mut var_s;
    println!("var3 : {}",var3);

}*/

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading