Exception Handling

예외 처리

기본 예외 처리

예외가 발생하기 않게 사전에 해결하는 것

이벤트 연결의 예외 처리

							function registerEventListener (node, event, listener) {
								if (node.addEventListener) {
									// 파이어폭스, 크롬, 사파리, 오페라
									node.addEventListener(event, listener, false);
								}else if (node.attachEvent) {
									node.attachEvent('on'+event, listener);
								} 
							}	
						

이벤트 객체의 예외 처리

							function whenClick (e) {
								var event = window.event || e;
								var willAlert = "";
								willAlert += 'clientX: ' + event.clientX + '\n';
								willAlert += 'clientY: ' + event.clientY + '\n';
								alert(willAlert);
							}	
						

고급 예외 처리

고급 예외 처리는 try, catch, finally 키워드를 사용해 예외를 처리하는 방법

try 구문 안에서 예외가 발생하면 이를 catch 구문에서 처리합니다. finally 구문은 필수사항은 아니며 예외 발생 여부와 상관없이 수행돼야 하는 작업이 있을 때 사용합니다.

							try{
							
							}catch (exception){
							
							}finally{
							
							}
						

try catch 구문의 사용

1. 강제 예외 발생
아래 코드에서 WillExcept 자체가 존재하지 않는데, 거기에 willExcept의 byeBye()메서드를 사용합니다. willExcept라는 객체도 없고 byeBye() 메서드도 존재하지 않습니다. 예외 처리 예제를 위해 강제로 예제를 발생시킨 거죠.

							try{
								willExcept.byeBye();
							}catch{
								
							}
						

2. 강제 예외 발생 후 catch구문 실행
try 구문 안에서 예외가 발생하면 더 이상 try 구문을 진행하지 않고 catch 구문을 실행시킵니다.

							try{
								willExcept.byeBye();
								alert('try 구문 종료');
							}catch{
								alert('예외가 발생했습니다.');
							}
						

위의 코드의 경우, willExcept.byeBye()를 실행하려는 순간 예외가 발생해 catch 구문을 실행합니다.
따라서 첫 번째 경고창은 출력하지 않으며, 두 번째 경고창만 출력됩니다.

3. finally 구문 사용

							try{
								willExcept.byeBye();
								alert('try 구문 종료');
							}catch{
								alert('예외가 발생했습니다.');
							}finally{
								alert('예외 발생 가능 부분을 통과했습니다.');
							}
						

우선, try 구문에서 예외가 발생되고 catch 구문이 실행됩니다. try 구문에서 예외가 발생하든 안하든 무조건 finally 구문은 실행되므로, 다시 한번 alert 창이 뜹니다. 결과적으로 총 2번의 alert 창이 뜹니다.

고급 예외 처리를 이용한 예제

							// AJAX 요청객체를 만드는 함수
							function createRequest () {
								try {
									request = new XMLHttpRequest(); // 표준브라우저 요청객체
								}
								catch (tryMS) {
									try {
										request = new ActiveXObject("Msxml2.XMLHTTP"); // 인터넷 익스플로러 요청객체1
									}
									catch (otherMS) {
										try {
											request = new ActiveXObject("Microsoft.XMLHTTP"); // // 인터넷 익스플로러 요청객체2
										}
										catch (failed) {
											request = null;
										}// end catch 3
									}// end catch2
								}// end catch1
								return request;
							}