본문 바로가기
반응형

분류 전체보기79

[Rust] 쉐도잉(shadowing) Rust 쉐도잉(Shadowing)에 대해서 알아보도록 하겠습니다. 쉐도잉(Shadowing)이란? 쉐도잉(Shadowing)은 동일한 이름의 변수를 새로운 값을 가진 새로운 변수로 다시 정의하는 것을 의미합니다. 새로운 변수가 이전 변수를 가리게 되어서 쉐도잉(Shadowing)이라고 합니다. 코드를 통해서 좀 더 알아볼까요? 쉐도잉(Shadowing) 예시 아래 코드를 보시면, let을 통해서 x를 선언하게 됩니다. x는 bool 타입으로 선언이 되었고, 이를 출력하면 x: true가 출력되게 됩니다. 그리고 다시 let을 통해서 x를 &str 타입으로 선언해 줍니다. 그러면 x: monkey가 출력되게 됩니다. 좀 더 설명을 해보자면, true 값을 가진 x는 monkey 값을 가진 x가 선언이 되.. 2024. 4. 9.
[Rust] 포인터 타입 => 레퍼런스/박스/원시 포인터 Rust에서 포인터 타입은 크게 3가지로 나뉩니다. Rust에서 포인터 타입은 C/C++에서처럼 포인터가 null이 되거나 중복 해제 등과 같은 일이 발생하지 않습니다. 그렇기 때문에 사람이기 때문에 하는 실수를 사전에 방지할 수 있습니다. 단, unsafe 블록을 사용하는 순간 안전성은 개발자에게 넘어오게 됩니다. 물론 보통의 경우에는 unsafe를 사용하지 않겠지만 말입니다. 레퍼런스(&) 레퍼런스는 C/C++에서의 포인터와 유사합니다. 그렇기 때문에 &var를 쓰고 *var를 함으로써 var이 가지고 있는 값을 접근할 수 있습니다. 이러한 레퍼런스는 2가지로 나뉩니다. 불변 참조(&T)와 가변 참조(&mut T)입니다. 불변 참조는 데이터를 읽을 수는 있지만 수정할 수 없고, 가변 참조는 데이터를 .. 2023. 10. 9.
[Rust] 슬라이스 vs 슬라이스 레퍼런스 슬라이스는 벡터(Vector), 문자열(String), 배열(Array) 등과 같은 시퀀스 데이터를 다루는 도구로써, 데이터의 일부분을 안전하게 조작하고 공유할 수 있게 해 줍니다. 슬라이스는 무엇인지 알아보도록 합시다. 추가로 슬라이스 레퍼런스에 대해서도 알아보도록 합시다. 슬라이스 슬라이스는 데이터의 일부분에 대한 참조로써, 데이터의 복사본을 생성하지 않고 해당 데이터를 조작할 수 있게 합니다. 슬라이스는 시작 인덱스와 끝 인덱스를 사용하여 데이터의 일부분을 지정하며, 다음과 같은 형식으로 선언됩니다. [T] 슬라이스 생성과 사용 슬라이스 생성과 사용 방법은 아래 코드를 참고하시길 바랍니다. 보시다시피 벡터, 문자열, 배열 등을 선언한 뒤, 시작 인덱스와 끝 인덱스를 지정해서 슬라이스를 만듭니다. 그.. 2023. 10. 8.
[Rust] 벡터(Vector) Rust 배열에 대해서 배웠었는데, 기억하시나요? 혹시 기억이 안 나신다면 아래 링크에서 보고 오시는 것을 추천드립니다. [Rust] 배열(array) Rust에서 배열은 C/C++에서 보았던 배열과 비슷합니다. 하지만 매번 그랬듯이 다른 점도 있기 때문에 잘 비교하면서 알아보도록 합시다. 배열(array) Rust에서 배열은 고정된 크기의 요소를 저장하는 77monkey.tistory.com 배열에 이어서 벡터에 대해서도 알아보도록 합시다. 벡터(Vector) Rust에서 벡터는 std::vec::Vec 모듈을 통해서 사용할 수 있는 동적 배열입니다. 그렇기 때문에 메모리를 할당하고 해제할 수 있으며 요소를 추가하거나 제거할 수 있습니다. 이를 통해서 크기를 동적으로 조절할 수 있습니다. 배열과는 다르.. 2023. 10. 5.
[Rust] 배열(array) Rust에서 배열은 C/C++에서 보았던 배열과 비슷합니다. 하지만 매번 그랬듯이 다른 점도 있기 때문에 잘 비교하면서 알아보도록 합시다. 배열(array) Rust에서 배열은 고정된 크기의 요소를 저장하는 데이터 구조입니다. 배열은 한 번 생성되면 크기를 변경할 수 없으며, 요소의 데이터 타입은 동일해야 합니다. 요소의 데이터 타입을 다르게 하고 싶다면 [Rust] 튜플(tuple)을 사용하시면 됩니다. Rust의 배열은 C/C++과 동일하게 스택에 저장되며 고정된 크기로 선언됩니다. 고정된 크기가 아니라면 벡터를 사용하셔야 합니다. 벡터는 추후에 포스팅하도록 하겠습니다. 배열 선언 배열을 선언할 때에는 항상 초기화를 해줘야 합니다. Rust에서는 초기화되지 않은 배열을 사용할 수 없기 때문입니다. 코.. 2023. 10. 2.
[Rust] 튜플(tuple) C/C++만 하신 분들에게는 튜플이 생소할 수 있을 것 같습니다. 배열과 같다고 생각하실 수도 있는데, 엄밀히 말하면 튜플은 배열과는 다릅니다. 튜플에 대해서 좀 더 알아보도록 합시다. 튜플(tuple) 튜플(tuple)은 다양한 타입을 담습니다. 추후에 포스팅을 하겠지만 배열은 한 가지 타입을 담을 수 있습니다. 이런 점에서 차이가 발생합니다. 그렇다면 튜플에는 같은 타입을 담을 수 없는지 궁금할 수 있는데, 같은 타입을 담을 수 있습니다. 튜플 선언 튜플은 () 사이에 데이터 타입을 넣어주고 쉼표(,)를 통해서 구별하여 선언합니다. 또한 튜플 변수 이름 뒤에 온점(.)을 쓰고 숫자를 씀으로써 튜플의 요소를 접근할 수 있습니다. 이때 접근 상수는 0부터 시작된다는 점 잊지 마시길 바랍니다. fn mai.. 2023. 9. 28.
[Rust] bool 타입 Rust에서 bool 타입은 아마 가장 간단한 타입이지 않을까 싶습니다. C/C++에서 접했던 bool 타입과도 유사하기 때문입니다. 하지만 조금 다른 점도 있기 때문에 Rust에서의 bool 타입을 알아보도록 하겠습니다. bool 타입 bool 타입은 true 또는 false 값만 가질 수 있습니다. 이러한 true와 false 값은 조건문 또는 제어문에서 중요합니다. 그 이유는 조건문 또는 제어문의 조건식의 결과는 bool 타입인 true 또는 false 값을 가져야 하기 때문입니다. bool 타입은 또한 true 또는 false 값을 가져서 1bit로 충분히 표현이 가능하지만, Rust에서는 1 Byte를 할당합니다. bool 선언 bool 선언과 할당은 [Rust] 변수 선언에서 했던 것과 유사하.. 2023. 9. 27.
[C/C++] 연산자 우선순위 드디어 연산자에 대해서 다 다뤄봤습니다. 그럼 이제 연산자 우선순위에 대해서 알아보도록 합시다. 연산자 우선순위는 정말 중요합니다. 연산의 결과가 예상한 것과 다르게 된다면 해당 프로그램은 제대로 동작할 수 없기 때문입니다. 연산자 우선순위 연산자 우선순위는 다양한 연산자가 표현식 내에서 어떤 순서로 계산되어야 하는지 결정하는 규칙입니다. 연산자 우선순위에 따라 연산자를 사용할 때 괄호를 추가하여 원하는 계산 순서를 지정할 수 있는데, 개인적으로 연산자 우선순위가 헷갈릴 때에는 괄호를 많이 씁니다. 아래의 연산자 우선순위 표를 보시면 숫자가 작을수록 먼저 연산이 됩니다. 연산자 우선순위 예시 아래 코드의 결과는 어떻게 될까요? 결과를 예측해 보세요. 이전에 배웠던 short circuit을 생각해서 va.. 2023. 9. 18.
[C/C++] 캐스팅 연산자 개발을 하다 보면 캐스팅 연산자를 사용할 때가 생각보다 많습니다. 함수 호출을 하기 위해서 인자 값으로 값을 줄 때 캐스팅을 해서 주는 경우도 자주 있습니다. 캐스팅 연산자에 대해서 알아보도록 합시다. 캐스팅 연산자 캐스팅 연산자는 데이터 형식을 다른 데이터 형식으로 변환하는 데 사용됩니다. 캐스팅 연산자에는 2가지가 있는데 바로 명시적 캐스팅과 암시적 캐스팅입니다. 명시적 캐스팅 명시적 캐스팅은 명시적으로 데이터 형식을 변환하고자 할 때 사용됩니다. 명시적으로 타입을 변환하는 것이기 때문에 개발자가 인지하고 있습니다. (데이터 타입)변수 아래는 간단한 코드인데, 사칙연산 등을 할 때에는 타입을 맞춰주는 것이 좋습니다. 그렇지 않으면 의도한 결과가 나오지 않을 수 있기 때문입니다. #include int.. 2023. 9. 17.
반응형