일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자료구조 #알고리즘
- vp #vc #did #신원인증 #블록체인
- 미쉬킨의화폐와금융 #미쉬킨 #화폐금융론 #화폐와금융 #경제학 #교양 #경제지식 #경제공부
- 블록체인 #layer2 #레이어2 #이더리움스케일링
- #국제채권시장 #유로본드 #유로커런시 #유로달러 #외국채 #금융중개기관 #간접금융 #거래비용#다우존스공업평균지수 #나스닥종합지수 #FTSE100 #DAX #CAC40 #straittimes #항생지수 #거래비용 #유동성 #위
- html #js #parsing
- 페이스북유니버시티 #마케팅교육 #마케팅캠프
- #경제상식 #화폐 #금융 #화폐금융론 #경제학 #경제기본 #경제지식 #경제근육 #투자지식 #경제공부 #경제학전공 #금융이란 #화폐란 #금융시장 #금융시장역할 #화폐역할 #화폐역기능 #금융역기능 #
- Today
- Total
평행우주 : world 1
[Rust] 러스트 데이터 타입 : scalar, Compound, 문자열 본문
Rust 데이타 타입
Statically Type Language
프로그램 상의 모든 데이터 타입을 컴파일 시점에 결정한다
컴파일 시점에, 각 타입에 위배되는 코드가 있을 경우 에러가 발생한다
let으로 선언된 변수의 경우, 데이터 타입이 결정되지 않은 경우 러스트 컴파일러가 추론 결정한다
스칼라 타입(Scalar Type)
하나의 값을 갖는 타입
정수형, 부동소수점형, 불린형, 문자형이 있다
정수형
fn main() {
let a: i32 = 1_000_000; // 10진수, 백만 | 가독성을 높이기 위해 _사용 가능
let a = 0xff; // 16진수
let a = 0o15; // 8진수
let a = 0b1111_1111; // 2진수
let a: u8 = b'A'; // 바이트 (앞에 b를 붙임)
}
i8, u16, i32, u64, i128, usize 와 같이 정수를 포함하는 타입
부호가 있을 경우 : i
부호가 없는 경우 : u
부동소수점형
let a: f32 = 3.14; // f32
let b = 3.14; // f64
f32, f64 존재
부동소수점 타입을 지정하지 않는 소수값은 컴파일러가 디폴트로 f64를 지정
불린형
let a: bool = false;
문자형
let a: char = 'A'; // U+0041
char 키워드를 사용
4바이트 크기
U+0000 ~ U+D7FF와 U+E000 ~ U+10FFFF 범위의 유니코드 스칼라 값을 가질 수 있다.
이러한 유니코드 문자가 아닌, 1 바이트의 값을 표현하기 위해서는 u8 타입을 사용
복합 타입(Compound Type)
여러개의 값들로 구성된 타입
배열(Array)과 튜플(Tuple)
배열(Array)
let arr: [i32; 3] = [1, 2, 3]; // 3개의 정수배열
println!("{}", arr[0]); // 배열 첫번째 요소 출력
println!("{:?}", arr); // 배열전체를 출력
동일한 데이타 타입을 갖는 요소들의 집합
고정된 길이를 갖는다
러스트에서 배열은 스택에 할당된다
배열값을 지정할 때, [1; 100] 과 같이 세미콜론을 사용하면, 이는 [1, 1, ..., 1] 와 같이 1을 100개 지정하는 것
튜플(Tuple)
let dat: (i32, char, bool) = (1, 'A', true);
let usr = ("Tom", 'B');
여러 데이타 타입의 값들을 하나로 묶은 것
괄호를 사용하고 각 타입이나 값들을 콤마로 분리
튜플이 한번 정의되면, 새로운 요소를 추가하거나 기존 요소를 삭제할 수 없다
let dat: (i32, char, bool) = (1, 'A', true);
let a = dat.0; //1
let b: char = dat.1; //A
let c: bool = dat.2; //true
let dat: (i32, char, bool) = (1, 'A', true);
let (a, b, c) = dat; //Destructuring : 튜플 전체를 읽어 여러 변수들에 나누어 할당
문자열 타입
일반적으로 &str 타입과 String 타입을 사용
&str
fn main() {
let s = "hello"; // let s: &'static str = "hello"; 와 동일
println!("{}", s);
}
//변수 s는 &'static str 타입으로 문자열 리터럴 "hello" 에 대한 레퍼런스(reference)
문자열을 표현하는 Primitive 문자열 타입
str 타입은 항상 레퍼런스이기 때문에, 실제 코드에서는 &str 와 같이 사용
문자열 리터럴은 코드 바이너리에 직접 저장
프로그램의 실행기간 동안 계속 존재하여 'static 이라는 키워드 추가
&str의 &는 레퍼런스를 의미
문자열 리터럴을 변수에 할당할 때 사용 (&'static str 타입)
다른 변수가 소유한(owned) 문자열의 일부를 슬라이스하여(&str 타입) 가져올 때 사용
//변수 s가 소유한(own) 문자열의 일부 범위를 문자열 슬라이스하여 변수 sub에 넣는 예제
fn main() {
let s = "hello";
let sub: &str = &s[1..4]; //&s[1..4] 는 요소1 부터 요소3까지의 범위 즉 "ell" 을 가리킨다
println!("{}", sub); // "ell" 출력
}
범위(range)를 지정할 때 [시작..마지막] 와 같이 표현하는 마지막위치는 실제 마지막위치의 다음 인덱스를 넣는다
fn main() {
let s: &'static str = "hello";
// &str 타입을 String 타입으로 변환
let x: String = s.to_owned();
println!("{}", x);
}
&str 타입을 String 타입으로 변환하기 위해서는 to_owned() 함수 사용
+)
to_string()은 임의의 타입을 String 타입으로 변환
to_string()은 많은 메모리를 사용하므로 &str 타입에서는 to_owned() 함수를 사용하는 것이 좋다
String
fn main() {
let s = String::from("hello");
// String::from() > 문자열 리터럴을 String 타입으로
// let s: String = "hello".to_owned(); // 동일
println!("{}", s);
}
Heap 메모리 상에 문자열을 저장
문자열 메모리에 새 문자들을 추가하거나 수정할 수 있다
fn main() {
let mut s = String::new(); // 새로운 empty string 생성
// 빈 문자열이므로 문자를 추가하기 위해 변수를 mut로 만들어준다
s.push('H'); // 문자 추가
s.push('i'); // 문자 추가
s.push_str(" Tom"); // 문자열 추가
println!("{}", s); // "Hi Tom" 출력
}
fn main() {
//String::replace() 함수를 사용 > 문자열의 일부를 다른 문자들로 치환
let mut s = String::from("Hello Bill");
s = s.replace("Hello", "Hi");
println!("{}", s); // "Hi Bill" 출력
}
'텃밭 1 : BlockChain > Rust' 카테고리의 다른 글
[Rust] 러스트 변수(variable) 특성 (0) | 2022.04.08 |
---|---|
[Rust] 러스트 Cargo 사용법 (0) | 2022.04.08 |