Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[7장] 에러처리 #12

Open
dahye1013 opened this issue Aug 9, 2022 · 3 comments
Open

[7장] 에러처리 #12

dahye1013 opened this issue Aug 9, 2022 · 3 comments

Comments

@dahye1013
Copy link
Member

[7장 퀴즈]

에러처리

아래 마크다운을 복사 붙여넣기해서 코멘트로 퀴즈를 달아주세요 :)
객관식, 주관식에 상관없이 편하게 만들어주세요!

부가 설명을 달고 싶다면, 해설을 정답과 함께 옵션으로 작성하시면 됩니다. ☺️

예시

퀴즈 내용 객관식의 정답을 골라보세요!
(퀴즈 내용)
1. 1번 
2. 2번
3. 3번

<details>
	<summary>퀴즈 정답</summary>
	<div markdown="1">    
	정답은 1번!
	</div>
</details>
@jlee0505
Copy link
Member

jlee0505 commented Aug 11, 2022

7장 에러 처리

에러를 표현하고 처리하는 가장 일반적인 패턴 4가지 입니다.
각각의 장,단점을 서술하세요.

  1. null 반환
  2. error 던지기
  3. error 반환
  4. Option 타입
퀴즈 정답
null 반환으로 예외 처리시, 단순히 에러가 발생했을 때 처리하기 좋다. (에러 만드는 방법이 필요 없어 가장 간단한 예외처리 방법) 하지만, 단순히 에러가 발생했음을 알려주고 원인은 알려주지 않아 디버깅이 어렵다.

error 를 던져(throw) 예외 처리시, 실패와 관련된 정보를 제공한다는 장점이 있다. 하지만, 3번 방법(error 반환)에 비해 에러 처리가 구체적이지는 않아 특정 예외를 놓칠 수 있다는 단점이 있다.

error 반환으로 예외 처리시, 가능한 모든 예외를 사용자가 명시적으로 처리하도록 강제할 수 있어 안정성이 높다. 또 실패시 관련된 정보도 함께 제공한다. 다만, 코드가 복잡해질 수 있고 일일이 명시하기 귀찮다는 단점이 있다.

Option 타입은 아직 이해되지 않았다. 조금 더 읽고 이해하는 대로 퀴즈를 업데이트하겠다. 혹은 이미 이해한 누군가가 대신 이곳에 정답을 적어줄 것이다.

@yeomgahui
Copy link
Contributor

다음중 Option 타입에 대한 설명중 옳지 않은 것은?

  1. Option 타입은 자바스크립트에서 기본적으로 제공한다.
  2. 오캐멀, 러스트 등의 언어에서 가져온 개념이다.
  3. 어떤 특정한 값을 반환하는 대신 값을 포함하거나 포함하지 않을 수도 있는 컨테이너를 반환하는 것이 option타입의 핵심이다.
퀴즈 정답
정답은 1번! 자바스크립트가 기본으로 제공하지 않는다. 따라서 이 타입들을 사용하려면 NPM에서 설치하거나 직접 구현해야한다.

@dahye1013
Copy link
Member Author

null 반환은 타입 안정성을 유지하며 에러를 처리하는 가장 간단한 방법입니다.
아래와 같이 null 반환 방식으로 핸들링할 때 단점은 무엇일까요?

    const ask = () => {
        return prompt('생일이 언제에요?')
    }
    
    const isValid = (date: Date) => {
        return !Number.isNaN(date.getTime()) && date !== null;
    }
    const parse = (birthday: string): Date | null => {
        let date = new Date(birthday);
        if (!isValid(date)) {
            return null
        }
        return new Date(birthday);
    }
    
    let date = parse(ask());
    
    if(date) {
        console.info(`날짜는 ${date.toISOString()}`);
    }
퀴즈 정답
  1. 문제가 생긴 원인을 알 수 없습니다.
  2. 조합이 어려워집니다. (모든 연산에서 null을 확인해야합니다. 또한, 중첩하거나 연결시에 코드가 지저분해집니다.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants