Skip to content
Snippets Groups Projects
Select Git revision
  • c43ab3d5733d0ce68e672186e3362d39b0ec2a83
  • master default
2 results

15_ko.html

Blame
  • 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>