PS를 위한 Rust 입출력 코드.1

SangJun·2024년 8월 4일

Rust

목록 보기
1/2
post-thumbnail

Rust에 익숙해질겸 백준을 풀어볼까 했는데.. 입출력에서부터 막혔다.
다른 사람이 짠 코드들을 살펴보고, 어떤 함수가 사용되었는지도 공부해 보자.


정수 하나 입력

Input: 3
우선, read_line() 함수의 시그니처를 살펴보자.

pub fn read_line(&self, buf: &mut String) -> Result<usize>
  • Locks this handle and reads a line of input, appending it to the specified buffer.

“Locks this handle” : read_line이 호출될 때, 해당 I/O 핸들을 잠금(lock) 설정해 다른 쓰레드가 동시에 접근하지 못하도록 한다.
이를 통해 멀티쓰레드 환경에서 데이터 무결성을 보장한다.

“appending it to the specified buffer” : 받은 입력을 매개변수로 넣은(&mut String) 버퍼에 이어붙인다.

“ -> Result<usize, std::io::Error>” : 입력받은 데이터의 바이트 크기 혹은 에러를 반환한다.

입력이 없다면 Ok(0)을 반환한다. (EOF를 판단할 수 있다.)

.unwrap()은 Result나 Option 열거형 값을 바로 꺼내서 쓸 수 있게 해준다. 정상적인 값을 꺼내거나, 에러를 꺼내 panic!으로 코드를 종료시킨다.

1. Result 타입에서의 동작:
• Ok(T): Result가 Ok일 경우, unwrap()은 내부의 T 값을 반환합니다.
• Err(E): Result가 Err일 경우, unwrap()은 프로그램을 패닉 상태로 만들며, 패닉 메시지로 에러의 디버깅 정보를 출력합니다.

2. Option 타입에서의 동작:
• Some(T): Option이 Some일 경우, unwrap()은 내부의 T 값을 반환합니다.
• None: Option이 None일 경우, unwrap()은 프로그램을 패닉 상태로 만들며, 패닉 메시지로 "called Option::unwrap()on aNone value"를 출력합니다.

실제 프로덕션에선 .unwrap()으로 panic!을 발생시키기 보다, 적절한 에러 처리를 수행하는게 바람직하다.

  • .trim()은 input 변수에 저장된 문자열 양 끝의 공백을 제거하는 함수이다.
  • .parse() 메서드는 명시된 자료형으로(여기선 i32) 형변환 한 결과를 Result 열거형 타입에 담아 반환한다.
  • .expect() 메서드는 parse가 Err(e)를 반환했을 때(if parsing fails), 매개변수로 받은 문자열을 출력하고 panic!을 발생시킨다.

한 줄, 공백으로 구분된 개수가 정해진 정수 입력

Input: 1 2 3 main 블럭의 4번째 줄만 보도록 하자. Rust의 튜플은 색인을 통해 다중 바인딩이 가능하다.

나머지 내용은 다음 게시글에서 더 다뤄보도록 하겠다.

profile
Let there be bit.

0개의 댓글