자료형의 종류와 사용법 파헤쳐보기 - 벡터
자료형이라 함은 어떤 종류가 있는지 확인해보기
벡터라고 하니 어렸을 적 보았던 벡터맨이 생각이 난다..
아무튼 벡터는 Rust에서 가장 널리 사용되는 자료형 중 하나이며, 여러 개의 값을 하나로 묶어서 사용한다.
사실 벡터를 공부하면서 얘를 굳이 사용해야 하는 이유가 뭘까를 먼저 확인해봤는데.. 나는 아직까지는 좋다고 하니 사용하는 느낌이다.
이외에도 다양한 이유가 존재하지만 이 두가지가 가장 큰 핵심이라고 한다.
벡터 선언하는 방법 두가지
1. Vec
구조체의 from
메소드 사용하여 배열로부터 벡터 만들기
2. vec!
매크로를 사용하여 벡터 만들기
예시
fn main() {
let vec1 = Vec::from([1, 2, 3]);
let vec2 = vec![1,2,3];
}
위에서 보면 벡터를 선언할 때 타입을 지정하지 않는데 그 이유는 컴파일러가 원소의 값을 보고 추론하여 타입을 지정한다고 한다.
이러한 편리함 속 주의할 점은 반대로 원소가 존재하지 않을 경우 타입을 자동으로 지정해줄 수 없기 때문에 꼭 타입을 지정해주어야 한다는 것이다.
fn main() {
let vec3: Vec<i32> = Vec::new();
let vec4: Vec<i32> = vec![];
벡터의 원소는 인덱스를 사용해서 접근할 수 있다고 한다.
시나리오: 벡터에 1, 2, 3
데이터를 추가하고 2
라는 데이터에 접근해보겠다.
fn main() {
let vec1: Vec<i32> = vec![1, 2, 3];
let num = vec1[1];
println!("{}", num);
}
결과: 2
위에서 사용하는 이유에 벡터도 범위를 벗어나면 소멸한다고 한 내용에 대해서 테스트!
fn main() {
{
let vec1: Vec<i32> = vec![1, 2, 3];
let num = vec1[1];
println!("{}", num);
}
let num = vec1[1];
println!("{}", num);
}
결과:
let num = vec1[1];
^^^^ not found in this scope
아까 만든 벡터에 값을 추가로 입력해보자.
사실 여기서 호기심이 생겨서 1, 2, 3
이 들어가있는 벡터에 문자열 데이터를 넣으면 어떻게 될까 했는데..
벡터에는 같은 데이터 유형만을 저장할 수 있다고 한다.
다른 타입을 저장하고 싶다면 벡터가 아닌 열거형을 사용할 것!
시나리오:
1. 4
, 5
, 6
추가
2. 확인
fn main() {
let vec1: Vec<i32> = vec![1, 2, 3];
vec1.push(4);
vec1.push(5);
vec1.push(6);
println!("{:?}", vec1);
}
위처럼 작업하면 Rust의 불변 변수 특성으로 인한 에러가 발생할 것이다 그렇기 때문에 아래와 같이 변경을 해서 실행한다.
fn main() {
let mut vec1: Vec<i32> = vec![1, 2, 3];
vec1.push(4);
vec1.push(5);
vec1.push(6);
println!("{:?}", vec1);
}
결과: [1, 2, 3, 4, 5, 6]
시나리오:
1. 마지막 원소 3가지 삭제
2. 맨 앞 원소 삭제
pop
메소드를 사용하여 제거할 예정인데 다른 언어와 다르게 pop
메소드를 사용 시 인덱스를 넣지 못하고 무조건 마지막 원소가 제거된다.
fn main() {
let mut vec1: Vec<i32> = vec![1, 2, 3];
let num1 = vec1.pop().unwrap();
println!("{}", num1);
println!("{:?}", vec1);
}
결과:
3
[1, 2]
마찬가지로 mut
를 선언해주어야 수정이 가능하다~
마지막 원소가 아닌 다른 원소를 제거하려면 remove
메소드에 인덱스를 넣어서 제거한다.
fn main() {
let mut vec1: Vec<i32> = vec![1, 2, 3];
let num2 = vec1.remove(0);
println!("{}", num2);
println!("{:?}", vec1);
}
결과:
1
[2, 3]
현재 시리즈는 다음 링크를 공부한 내용을 기록하고 있습니다.
> 파이썬 프로그래머를 위한 러스트 입문 - 6.1 자료형 <