0. ์ธ์ ์ฐ๋ฉด ์ข์๊น?
์์ธ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ ๊ณตํ๋ ๋ ๋ฆฝ์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ด๋ค. ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์์ธ๋ฅผ ๋์ง๋ค. ๊ทธ๋ฌ๋ฉด ์ ์ ํ ์์ธ ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ ๋๊น์ง ์ฝ์คํ์ ํ๊ณ ์๋ก ์ ํ๋๋ค. (ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ๋ณดํต์ ๋จ์ ๊ธฐ๋ณธ ๋์์ด ์ํ๋๋ค.) ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ฅ ์ฝ๋๋ฅผ ์ผ์ผ์ด ๊ฒ์ฌํ๊ฑฐ๋ ์ค๋ฅ๋ฅผ ์๋ณํด ์ฝ์คํ ์๋ก ๋์ง๋ ์ผ์ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค.
์์ธ๋ ์ ํํ ์์ ๋ฐ์ ๋์์ผ ๋๋ง ์ฐ์ฌ์ผ ํ๋ค. ๋ฌ๋ฆฌ ๋งํ๋ฉด ํ๋ก๊ทธ๋จ์ ์ ์ ๋์ ๋ฒ์ฃผ์ ๋ค์ง ์๋ ์ค๋ฅ๋ฅผ ๋ํ๋ผ ๋๋ง ์ฐ์ฌ์ผ ํ๋ค.
(* ์์๋ฅผ ๋์ง๋ ์ฝ๋๋ฅผ ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์ฝ๋๋ก ๋ฐ๊ฟ๋ ํ๋ก๊ทธ๋จ์ด ์ฌ์ ํ ์ ์ ๋์ํ ์ง๋ฅผ ๋ฐ์ ธ๋ณด์. ์ ์ ๋์ํ์ง ์์ ๊ฒ ๊ฐ๋ค๋ฉด ์์ธ๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ๋ ์ ํธ์ด๋ค. ์์ธ ๋์ ์ค๋ฅ๋ฅผ ๊ฒ์ถํ์ฌ ํ๋ก๊ทธ๋จ์ ์ ์ ํ๋ฆ์ผ๋ก ๋๋๋ฆฌ๊ฒ๋ ์ฒ๋ฆฌํด์ผํ๋ค.)
1. ์ ์ฐจ
(1) ์ฝ์คํ ์์์ ํด๋น ์์ธ๋ฅผ ์ฒ๋ฆฌํ ์์ธ ํธ๋ค๋ฌ๋ฅผ ์์ฑํ๋ค.
(2) ํด๋น ์ค๋ฅ ์ฝ๋๋ฅผ ๋์ฒดํ ์์ธ์ ๊ทธ ๋ฐ์ ์์ธ๋ฅผ ๊ตฌ๋ถํ ์๋ณ ๋ฐฉ๋ฒ์ ์ฐพ๋๋ค.
(๋๋ถ๋ถ์ ์ธ์ด์์๋ ์๋ธํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ์ด๋ค.)
(3) catch์ ์ ์์ ํ์ฌ ์ง์ ์ฒ๋ฆฌํ ์ ์๋ ์์ธ๋ ์ ์ ํ ๋์ฒํ๊ณ ๊ทธ๋ ์ง ์์ ์์ธ๋ ๋ค์ ๋์ง๋ค.
(4) ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํ๋ ๊ณณ ๋ชจ๋์์ ์์ธ๋ฅผ ๋์ง๋๋ก ์์ ํ๋ค.
(5) ๋ชจ๋ ์์ ํ๋ค๋ฉด ๊ทธ ์ค๋ฅ ์ฝ๋๋ฅผ ์ฝ์คํ ์๋ก ์ ๋ฌํ๋ ์ฝ๋๋ฅผ ๋ชจ๋ ์ ๊ฑฐํ๋ค.
2. ์์ ์ฝ๋
(1) ๋ฆฌํฉํฐ๋ง ์
์ ์ญ ํ ์ด๋ธ์์ ๋ฐฐ์ก์ง์ ๋ฐฐ์ก ๊ท์น์ ์์๋ด๋ ์ฝ๋๋ฅผ ์๊ฐํด๋ณด์.
function localShippingRules(country) {
const data = countryData.ShippingRules[country];
if (data) return new ShippingRules(data);
else return -23;
}
(2) ๋ฆฌํฉํฐ๋ง ํ
๋ฆฌํฉํฐ๋ง์ผ๋ก ์ถ๊ฐ๋ ์์ธ๋ง์ ์ฒ๋ฆฌํ๊ณ ์ ํ๋ค๋ฉด ๋ค๋ฅธ ์์ธ์ ๊ตฌ๋ณํ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค. ๋ณ๋ก์ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ํ ์๋ ์๊ณ ํน๋ณํ ๊ฐ์ ๋ถ์ฌํ๋ ๋ฐฉ๋ฒ๋ ์๋ค. ์์ธ๋ฅผ ํฌ๋์ค ๊ธฐ๋ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ผ๋ฉด ์๋ธ ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ ๊ฐ์ฅ ์์ฐ์ค๋ฝ๋ค.(์๋ฐ์คํฌ๋ฆฝํธ๋ ํด๋นํ์ง ์์ง๋ง..)
class OrderProcessingError extends Error {
constructor(errorCode) {
super(`์ฃผ๋ฌธ ์ฒ๋ฆฌ ์ค๋ฅ : ${errorCode}`);
this.code = errorCode;
}
get name() { return 'OrderProcessingError'; }
}
์ ํด๋์ค๊ฐ ์ค๋น๋๋ฉด ์๋ฌ ์ฝ๋ ๋ฐํ ๋์ ์๋ก ๋ง๋ ํด๋์ค๋ฅผ throw
function localShippingRules(country) {
const data = countryData.ShippingRules[country];
if (data) return new ShippingRules(data);
else throw new OrderProcessingError(-23);
}
3. ์ธ์๊น์๋ ์คํ์ผ
error instanceof OrderProcessingError
4. ์คํ๋ถ
try {
const reuslt = localShippingRules();
} catch (error) {
if (error instanceof OrderProcessingError) {
console.log(error);
}
}
5. ๊ธฐํ ์ฐธ๊ณ
https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC
[JS] ๐ ์๋ฐ์คํฌ๋ฆฝํธ - ์์ธ ์ฒ๋ฆฌ(Exception) ์ ๋ฆฌ
์์ธ(exception) ์์ธ(exception)๋ ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ ๋ฐ์ํ๋ ๋ฐํ์ ์ค๋ฅ๋ฅผ ์๋ฏธํ๋ค. ์ด๋ฌํ ์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๋ฏธ๋ฆฌ ๋ฐฉ์งํ๋ ๊ฒ๋ ์ค์ํ์ง๋ง, ๋ฐ์ํ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ๋ํ ๋งค์ฐ
inpa.tistory.com
'์ฑ ๋ฆฌ๋ทฐ > ๋ฆฌํฉํ ๋ง(์๋ฐ์คํฌ๋ฆฝํธํ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฆฌํฉํฐ๋ง 2ํ] 12.10์ ์ฝ๊ธฐ์ ์์ ์์์ด๋? (0) | 2022.11.28 |
---|---|
[๋ฆฌํฉํฐ๋ง 2ํ] 12.7 ์๋ธํด๋์ค ์ ๊ฑฐํ๊ธฐ (0) | 2022.11.24 |
[๋ฆฌํฉํฐ๋ง 2ํ] 12.6 ํ์ ์ฝ๋๋ฅผ ์๋ธํด๋์ค๋ก ๋ฐ๊พธ๊ธฐ (0) | 2022.11.24 |
[๋ฆฌํฉํฐ๋ง 2ํ] 11.13 ์์ธ๋ฅผ ์ฌ์ ํ์ธ์ผ๋ก ๋ฐ๊พธ๊ธฐ (0) | 2022.11.24 |
[๋ฆฌํฉํฐ๋ง 2ํ] 11.8 ์์ฑ์๋ฅผ ํฉํฐ๋ฆฌ ํจ์๋ก ๋ฐ๊พธ๊ธฐ (0) | 2022.11.23 |