aboutsummaryrefslogtreecommitdiff
path: root/files/ko/web/javascript/reference/statements/try...catch/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/ko/web/javascript/reference/statements/try...catch/index.html')
-rw-r--r--files/ko/web/javascript/reference/statements/try...catch/index.html273
1 files changed, 273 insertions, 0 deletions
diff --git a/files/ko/web/javascript/reference/statements/try...catch/index.html b/files/ko/web/javascript/reference/statements/try...catch/index.html
new file mode 100644
index 0000000000..c7cdf05b1f
--- /dev/null
+++ b/files/ko/web/javascript/reference/statements/try...catch/index.html
@@ -0,0 +1,273 @@
+---
+title: try...catch
+slug: Web/JavaScript/Reference/Statements/try...catch
+translation_of: Web/JavaScript/Reference/Statements/try...catch
+---
+<div>
+<p>{{jsSidebar("Statements")}}</p>
+
+<p><strong><code>try...catch</code></strong> 문은 실행할 코드블럭을 표시하고 예외(exception)가 발생(throw)할 경우의 응답을 지정합니다.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/statement-trycatch.html")}}</p>
+</div>
+
+<h2 id="문법">문법</h2>
+
+<pre class="notranslate">try {
+ <em>try_statements</em>
+}
+[catch (<em>exception_var</em>) {
+ <em>catch_statements</em>
+}]
+[finally {
+ <em>finally_statements</em>
+}]</pre>
+
+<dl>
+ <dt><code>try_statements</code></dt>
+ <dd>실행될 선언들</dd>
+</dl>
+
+<dl>
+ <dt><code>catch_statements</code></dt>
+ <dd>try 블록에서 예외가 발생했을 때 실행될 선언들</dd>
+</dl>
+
+<dl>
+ <dt><code>exception_var</code></dt>
+ <dd>catch 블록과 관련된 예외 객체를 담기 위한 식별자</dd>
+</dl>
+
+<dl>
+ <dt><code>finally_statements</code></dt>
+ <dd>try 선언이 완료된 이후에 실행된 선언들. 이 선언들은 예외 발생 여부와 상관없이 실행된다.</dd>
+</dl>
+
+<h2 id="설명">설명</h2>
+
+<p>try 선언의 구성은 하나 혹은 그 이상의 선언을 포함한 try 블록 및 catch 항목이나 finally 항목 중 최소한 하나 혹은 둘 다 포함하여 이루어진다. 즉, try 선언에는 세 가지 형식이 존재한다.</p>
+
+<ol>
+ <li><code>try...catch</code></li>
+ <li><code>try...finally</code></li>
+ <li><code>try...catch...finally</code></li>
+</ol>
+
+<p><code>catch</code> 블록은 <code>try</code> 블록 안에서 예외가 발생(throw)하는 경우 무엇을 할지 명시하는 코드를 포함합니다.  <code>try</code> 블록 (또는 <code>try</code> 블록 내에서 호출된 함수) 내의 명령문이 예외를 throw 하면 제어가 <code>catch</code> 블록으로 이동합니다. <code>try</code> 블록에 예외가 발생하지 않으면 <code>catch</code> 블록을 건너뜁니다.</p>
+
+<p><code>finally</code> 블록은 <code>try</code> 블록과 <code>catch</code> 블록(들)이 실행을 마친 후 항상 실행됩니다. 예외가 발생했는지에 관계없이 항상 실행됩니다.</p>
+
+<p>하나 이상의 <code>try</code> 문을 중첩 할 수 있습니다. 내부의 <code>try</code> 문에 <code>catch</code> 블록이 없으면, 둘러싼 <code>try</code> 문의 <code>catch</code> 블록이 입력됩니다.</p>
+
+<p>또한 <code>try</code> 문을 사용하여 예외처리를 합니다. 예외처리에 대해 더 알고 싶다면, <a href="/en-US/docs/Web/JavaScript/Guide" title="en/JavaScript/Guide">JavaScript Guide</a> 를 참고하세요.</p>
+
+<h3 id="무조건적_catch_문">무조건적 <code>catch</code> 문</h3>
+
+<p><code>try</code>-block 내에서 예외가 발생하면 <code>catch</code>-block이 실행됩니다. 예를 들어, 다음 코드에서 예외가 발생하면 제어가 <code>catch</code> 블록으로 전송됩니다.</p>
+
+
+
+<pre class="brush: js notranslate">try {
+ throw "myException"; // generates an exception
+}
+catch (e) {
+ // statements to handle any exceptions
+ logMyErrors(e); // pass exception object to error handler
+}
+</pre>
+
+<h3 id="조건적_catch_문">조건적 <code>catch</code> 문</h3>
+
+<p>다음과 같이 <code>try...catch</code>블록을 <code>if...else if...else</code> 구조와 결합하여 '조건부 <code>catch</code>-blocks'을 만들 수 있습니다.</p>
+
+
+
+<pre class="notranslate">try {
+ myroutine(); // may throw three types of exceptions
+} catch (e) {
+ if (e instanceof TypeError) {
+ // statements to handle TypeError exceptions
+ } else if (e instanceof RangeError) {
+ // statements to handle RangeError exceptions
+ } else if (e instanceof EvalError) {
+ // statements to handle EvalError exceptions
+ } else {
+ // statements to handle any unspecified exceptions
+ logMyErrors(e); // pass exception object to error handler
+ }
+}
+</pre>
+
+
+
+<p>이에 대한 일반적인 사용 사례는 예상 오류의 작은 하위 집합 만 포착 (및 침묵) 한 다음 다른 경우에 오류를 다시 발생시키는 것입니다.</p>
+
+<pre class="notranslate">try {
+ myRoutine();
+} catch (e) {
+ if (e instanceof RangeError) {
+ // statements to handle this very common expected error
+ } else {
+ throw e; // re-throw the error unchanged
+ }
+}</pre>
+
+<h3 id="The_exception_identifier">The exception identifier</h3>
+
+<p><code>try</code>-block에서 예외가 발생하면 <code>exception_var</code> (즉, <code>catch (e)</code>내부의 <code>e</code>)가 예외 값을 보유합니다. 이 식별자를 사용하여 발생한 예외에 대한 정보를 얻을 수 있습니다. 이 식별자는 <code>catch</code>-block의 {{Glossary("Scope", "scope")}}에서만 사용할 수 있습니다.</p>
+
+
+
+<pre class="notranslate">function isValidJSON(text) {
+ try {
+ JSON.parse(text);
+ return true;
+ } catch {
+ return false;
+ }
+}</pre>
+
+<h3 id="The_finally-block">The finally-block</h3>
+
+<p>The <code>finally</code>-block contains statements to execute after the <code>try</code>-block and <code>catch</code>-block(s) execute, but before the statements following the <code>try...catch...finally</code>-block. Note that the <code>finally</code>-block executes regardless of whether an exception is thrown. Also, if an exception is thrown, the statements in the <code>finally</code>-block execute even if no <code>catch</code>-block handles the exception.</p>
+
+
+
+<p>The following example shows one use case for the <code>finally</code>-block. The code opens a file and then executes statements that use the file; the <code>finally</code>-block makes sure the file always closes after it is used even if an exception was thrown.</p>
+
+<pre class="notranslate">openMyFile();
+try {
+ // tie up a resource
+ writeMyFile(theData);
+}
+finally {
+ closeMyFile(); // always close the resource
+}</pre>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Nested_try-blocks">Nested try-blocks</h3>
+
+<p>First, let's see what happens with this:</p>
+
+<pre class="notranslate">try {
+ try {
+ throw new Error('oops');
+ }
+ finally {
+ console.log('finally');
+ }
+}
+catch (ex) {
+ console.error('outer', ex.message);
+}
+
+// Output:
+// "finally"
+// "outer" "oops"
+</pre>
+
+<p>Now, if we already caught the exception in the inner <code>try</code>-block by adding a <code>catch</code>-block</p>
+
+<pre class="notranslate">try {
+ try {
+ throw new Error('oops');
+ }
+ catch (ex) {
+ console.error('inner', ex.message);
+ }
+ finally {
+ console.log('finally');
+ }
+}
+catch (ex) {
+ console.error('outer', ex.message);
+}
+
+// Output:
+// "inner" "oops"
+// "finally"
+</pre>
+
+<p>And now, let's rethrow the error.</p>
+
+<pre class="notranslate">try {
+ try {
+ throw new Error('oops');
+ }
+ catch (ex) {
+ console.error('inner', ex.message);
+ throw ex;
+ }
+ finally {
+ console.log('finally');
+ }
+}
+catch (ex) {
+ console.error('outer', ex.message);
+}
+
+// Output:
+// "inner" "oops"
+// "finally"
+// "outer" "oops"
+</pre>
+
+<p>Any given exception will be caught only once by the nearest enclosing <code>catch</code>-block unless it is rethrown. Of course, any new exceptions raised in the "inner" block (because the code in <code>catch</code>-block may do something that throws), will be caught by the "outer" block.</p>
+
+<h3 id="Returning_from_a_finally-block">Returning from a finally-block</h3>
+
+<p>If the <code>finally</code>-block returns a value, this value becomes the return value of the entire <code>try-catch-finally</code> statement, regardless of any <code>return</code> statements in the <code>try</code> and <code>catch</code>-blocks. This includes exceptions thrown inside of the <code>catch</code>-block:</p>
+
+<pre class="notranslate">(function() {
+ try {
+ try {
+ throw new Error('oops');
+ }
+ catch (ex) {
+ console.error('inner', ex.message);
+ throw ex;
+ }
+ finally {
+ console.log('finally');
+ return;
+ }
+ }
+ catch (ex) {
+ console.error('outer', ex.message);
+ }
+})();
+
+// Output:
+// "inner" "oops"
+// "finally"</pre>
+
+<p>The outer "oops" is not thrown because of the return in the <code>finally</code>-block. The same would apply to any value returned from the <code>catch</code>-block.</p>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table>
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-try-statement', 'try statement')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.statements.try_catch")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("Statements/throw", "throw")}}</li>
+</ul>