Select Git revision
20_ko.html 7.02 KiB
<!DOCTYPE html>
<html lang="ko">
<head>
<title>Rust 튜토리얼 - 자기주도프로젝트</title>
<meta charset="UTF-8">
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="keywords" content="Rust, Programming, Learning">
<meta name="description" content="Rust tutorial website based on tour_of_rust by 최석원">
<meta name="theme-color" content="#ff6801"/>
<meta http-equiv="Cache-Control" content="max-age=3600">
<link rel="stylesheet" href="tour.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/night-owl.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="/manifest" href="./site.webmanifest">
<script src="//unpkg.com/@highlightjs/cdn-assets@11.7.0/highlight.min.js"></script>
<script src="./tour.js" defer></script>
<!-- <script>hljs.highlightAll();</script> -->
<script src="./highlight.badge.min.js"></script>
</head>
<body>
<div class="tour">
<div class="header">
<span class="title"><a href="index.html">Rust 튜토리얼</a></span>
<span class="nav">
<span class="toc"><a href="TOC_ko.html">목차</a></span>
</div>
<div class="page">
<h1>Error handling</h1>
<p>오류 핸들링은 Rust의 핵심 개념 중 하나로, 다양한 오류 상황을 효과적으로 처리할 수 있는 기능을 제공합니다.</p>
<p>이 튜토리얼에서는 Rust에서의 오류 핸들링 기본 사항을 다룰 것입니다.</p>
<p>이를 위해 Result 열거형(enum)과 match 문을 사용하여 오류를 처리하는 방법을 알아봅시다.</p>
<p><strong>Result 열거형</strong><br />
Rust에서는 결과를 나타내기 위해 Result 열거형을 사용합니다.<br />
이는 다음과 같은 두 가지 값 중 하나를 갖습니다.<br />
- Ok(T): 연산이 성공적으로 수행되었을 때 반환되는 값 T.<br />
- Err(E): 연산이 실패했을 때 반환되는 오류 값 E.</p>
<p>예를 들어, 정수를 문자열로 변환하는 간단한 함수를 작성해 봅시다.</p>
<p>이 함수는 문자열을 입력으로 받아 정수로 변환하려고 시도하고, 변환에 성공하면 Ok 값을 반환합니다.</p>
<p>만약 변환에 실패하면, Err 값을 반환합니다.</p>
<pre><code class="rust">fn parse_integer(input: &str) -> Result<i32, String> {
match input.parse::<i32>() {
Ok(value) => Ok(value),
Err(_) => Err(format!("'{}' is not a valid integer.", input)),
}
}</code></pre>
<p><strong>match 문을 사용한 오류 처리</strong></p>
<p>오류 처리를 위해 match 문을 사용하여 Result 열거형에 따른 처리를 구현할 수 있습니다. </p>
<p>예를 들어, 다음 코드는 parse_integer 함수의 결과를 처리합니다.</p>
<pre><code class="rust">fn main() {
let input = "42";
let parsed = parse_integer(input);
match parsed {
Ok(value) => println!("The integer value is: {}", value),
Err(error) => println!("Error: {}", error),
}
}</code></pre>
<p>이 코드는 parse_integer 함수를 호출하여 결과를 가져옵니다.</p>
<p>그런 다음 match 문을 사용하여 결과가 Ok인지 Err인지 확인하고, 각 경우에 따라 적절한 동작을 수행합니다.</p>
<p>이 튜토리얼에서는 Rust의 오류 핸들링의 기본 사항만 다루었습니다.</p>
<p>실제로는 <code>?</code> 연산자를 사용하여 오류를 전파하거나, 사용자 지정 오류 유형을 정의하는 등 더 많은 기능을 활용할 수 있습니다.</p>
<p>이러한 고급 기능을 배우는 것도 도움이 될 것입니다.</p>
<div class="bottomnav">
<span class="back"><a href="19_ko.html" rel="prev">❮ 이전</a></span>
<span class="next"><a href="21_ko.html" rel="next">다음 ❯</a></span>
</div>
</div>
<div class="code">
<iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=use+std%3A%3Afmt%3B%0Ause+std%3A%3Astr%3A%3AFromStr%3B%0A%0A%23%5Bderive%28Debug%29%5D%0Aenum+ParseIntegerError+%7B%0A++++InvalidNumber%28String%29%2C%0A++++ParseIntError%28std%3A%3Anum%3A%3AParseIntError%29%2C%0A%7D%0A%0Aimpl+fmt%3A%3ADisplay+for+ParseIntegerError+%7B%0A++++fn+fmt%28%26self%2C+f%3A+%26mut+fmt%3A%3AFormatter%29+-%3E+fmt%3A%3AResult+%7B%0A++++++++match+self+%7B%0A++++++++++++ParseIntegerError%3A%3AInvalidNumber%28ref+s%29+%3D%3E+write%21%28f%2C+%22Invalid+number%3A+%7B%7D%22%2C+s%29%2C%0A++++++++++++ParseIntegerError%3A%3AParseIntError%28ref+e%29+%3D%3E+e.fmt%28f%29%2C%0A++++++++%7D%0A++++%7D%0A%7D%0A%0Aimpl+std%3A%3Aerror%3A%3AError+for+ParseIntegerError+%7B%7D%0A%0Afn+parse_integer%28input%3A+%26str%29+-%3E+Result%3Ci32%2C+ParseIntegerError%3E+%7B%0A++++if+input.is_empty%28%29+%7B%0A++++++++return+Err%28ParseIntegerError%3A%3AInvalidNumber%28input.to_owned%28%29%29%29%3B%0A++++%7D%0A%0A++++let+value+%3D+i32%3A%3Afrom_str%28input%29.map_err%28ParseIntegerError%3A%3AParseIntError%29%3F%3B%0A++++Ok%28value%29%0A%7D%0A%0Afn+main%28%29+%7B%0A++++let+inputs+%3D+%5B%2242%22%2C+%22abc%22%2C+%22%22%5D%3B%0A++++for+input+in+%26inputs+%7B%0A++++++++let+parsed+%3D+parse_integer%28input%29%3B%0A%0A++++++++match+parsed+%7B%0A++++++++++++Ok%28value%29+%3D%3E+println%21%28%22The+integer+value+of+%27%7B%7D%27+is%3A+%7B%7D%22%2C+input%2C+value%29%2C%0A++++++++++++Err%28error%29+%3D%3E+println%21%28%22Error+parsing+%27%7B%7D%27%3A+%7B%7D%22%2C+input%2C+error%29%2C%0A++++++++%7D%0A++++%7D%0A%7D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
</div>
</div>
<script>
var pres = document.querySelectorAll("pre>code");
for (var i = 0; i < pres.length; i++) {
hljs.highlightElement(pres[i]);
}
var options = {
loadDelay: 0,
copyIconClass: "far fa-clipboard",
checkIconClass: "fa fa-check text-success",
blogURL: "http://rust-study.ajousw.kr/"
};
window.highlightJsBadge(options);
</script>
<footer>
<p><a target="_blank" rel="noopener" href="https://www.youtube.com/c/SoftwareToolTime">아주대학교 Software Tool Time</a> - Rust 튜토리얼 (Basic)</p>
</footer>
</body>
</html>