try..catch 사용하기

try..catch 가 실무에서 어떻게 사용되는지 알아봅시다.

JSON으로 인코딩된 값을 읽을 수 있도록 해주는 JSON.parse(str) 메서드는 주로 서버 등에서 네트워크를 통해 전달받은 데이터를 디코딩하는 데 사용합니다.

전달받은 데이터에 JSON.parse 를 호출하는 식으로 사용됩니다.

let json = '{"name":"John", "age": 30}'; // 서버로 부터 전달받은 데이터
let user = JSON.parse(json); // 전달받은 문자열을 자바스크립트 객체로 변환

// 문자열 형태로 번달받은 user가 프로퍼티를 가진 객체가 됨
alert(user.name); // John
alert(user.age);  // 30

잘못된 형식의 json 이 들어온 경우, JSON.parse 는 에러를 만들기 때문에 스크립트가 죽습니다.

서버에서 전달받은 데이터가 잘못되어 스크립트가 죽는 경우, 사용자는 개발자 콘솔을 열지 않는 이상 절대 원인을 알 수 없습니다. 그런데 사람들은 메시지 등을 통해 에러의 원인을 알지 못한 채 무언가가 ‘그냥 죽는 것’을 정말 싫어합니다.

try..catch를 사용해 이를 처리해 봅시다.

let json = "{ bed json }";

try {
	let user = JSON.parse(json); // 에러 발생
	alert(user.name); // 이 코드는 동작하지 않습니다.
} catch (e) {
	// 에러가 발생하면 제어 흐름이 catch 문으로 넘어옵니다.
	alert("데이터에 에러가 있어 재요청을 시도합니다.");
	alert(e.name);
	alert(e.message);
}

위 예제에서 에러가 발생했다는 걸 보여주기 위해 간단히 예외처리 했지만, catch 블록 안에서 새로운 네트워크 요청 보내기, 사용자에게 대안 제안하기, 로깅 장치에 에러 정보 보내기 등과 같은 구체적인 일을 할 수 있습니다. 스크립트가 죽도록 놔두는 것보다 훨씬 나은 대응입니다.