핸들러(Handler): 특정 이벤트를 처리하는 메서드
핸들러는 특정 이벤트나 조건이 발생했을 때, 이를 처리하기 위해 지정된 함수나 코드 블록이다. 이벤트 기반 프로그래밍에서 핵심적인 역할을 담당하며, 사용자의 입력, 시스템의 알림, 데이터의 변화 등 다양한 상황에 대한 반응을 정의한다.
예를 들어, 웹 페이지의 버튼을 클릭했을 때 특정 동작을 수행하게 하려면 '클릭 이벤트'에 대한 핸들러를 등록해야 한다.
const button = document.getElementById('myButton');
// 'click' 이벤트가 발생했을 때 실행될 핸들러 함수
function handleClick() {
console.log('버튼이 클릭되었습니다!');
}
// 버튼에 클릭 이벤트 핸들러를 등록
button.addEventListener('click', handleClick);
이 코드에서 handleClick 함수가 바로 '클릭 이벤트 핸들러'이다. 이처럼 핸들러는 특정 이벤트와 그에 대한 처리를 연결해주는 중요한 역할을 수행한다. 안드로이드 개발에서의 Handler, 콜백 함수 등 다양한 형태로 존재하며 특정 작업을 지시하고 실행하는 해결사라고 이해하면 쉽다.
Array.prototype.find(): 조건을 만족하는 첫 번째 요소 찾기
find() 메서드는 주어진 판별 함수를 만족하는 배열의 첫 번째 요소의 값을 반환한다. 조건을 만족하는 요소가 없으면 undefined를 반환한다. for문이나 forEach()를 사용해 직접 순회하며 찾는 것보다 훨씬 간결하고 가독성 좋은 코드를 작성할 수 있게 해준다.
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
];
// id가 2인 사용자를 찾는다.
const user = users.find(user => user.id === 2);
console.log(user); // { id: 2, name: 'Bob' }
// id가 4인 사용자를 찾는다.
const nonExistentUser = users.find(user => user.id === 4);
console.log(nonExistentUser); // undefined
find()는 단순히 값을 찾는 것을 넘어, 복잡한 조건을 가진 객체 배열에서 원하는 데이터를 효율적으로 찾아낼 때 매우 유용하다. 비슷한 메서드인 filter()는 조건을 만족하는 모든 요소를 새로운 배열로 반환하는 반면, find()는 첫 번째로 찾은 요소 하나만 반환한다는 차이점이 있다.
== 와 ===
자바스크립트에서 두 값을 비교할 때 사용하는 ==(동등 연산자)와 ===(일치 연산자)는 미묘하지만 매우 중요한 차이를 가진다.
- == (동등 연산자): 두 피연산자의 값이 같으면 true를 반환한다. 비교 과정에서 타입이 다르면 강제로 타입을 변환하여 비교한다. 이를 '느슨한 비교(Loose Equality)'라고 한다.
- === (일치 연산자): 두 피연산자의 값과 타입이 모두 같아야 true를 반환한다. 타입 변환을 허용하지 않으므로 '엄격한 비교(Strict Equality)'라고 한다.
console.log(1 == '1'); // true (문자열 '1'이 숫자 1로 변환되어 비교)
console.log(1 === '1'); // false (타입이 다르므로 false)
console.log(true == 1); // true (true가 숫자 1로 변환)
console.log(true === 1); // false (타입이 다름)
console.log(null == undefined); // true (느슨한 비교에서는 같다고 판단)
console.log(null === undefined); // false (타입이 다름)
예상치 못한 타입 변환으로 인한 버그를 방지하기 위해, 특별한 경우가 아니라면 항상 ===를 사용하여 값과 타입을 모두 명확하게 비교하는 것이 권장된다.
예외 처리(Exception Handling)
예외 처리는 프로그램 실행 중 발생할 수 있는 예외(오류)에 대비하고, 이를 처리하여 프로그램이 비정상적으로 종료되는 것을 막는 중요한 프로그래밍 기법이다. try...catch...finally 구문을 사용하여 구현하는 것이 일반적이다.
- try: 예외가 발생할 가능성이 있는 코드를 이 블록 안에 작성한다.
- catch: try 블록에서 예외가 발생했을 때 실행될 코드를 작성한다. 발생한 예외 객체를 인자로 받아 오류의 원인을 파악하고 대응할 수 있다.
- finally: 예외 발생 여부와 상관없이 항상 실행되어야 하는 코드를 작성한다. 주로 자원 해제 등의 마무리 작업에 사용된다.
function divide(a, b) {
try {
if (b === 0) {
throw new Error('0으로 나눌 수 없습니다.'); // 의도적으로 예외를 발생시킴
}
return a / b;
} catch (error) {
console.error('오류 발생:', error.message);
// 오류를 처리하거나, 사용자에게 알리는 등의 후속 조치를 취한다.
} finally {
console.log('계산 시도가 완료되었습니다.');
}
}
divide(10, 2); // 정상 실행
divide(10, 0); // 오류 발생 및 catch 블록 실행
적절한 예외 처리는 프로그램의 안정성과 신뢰성을 높이는 필수적인 요소이다. 잠재적인 오류를 예측하고 그에 대한 대응책을 마련함으로써, 사용자에게 더 나은 경험을 제공하고 디버깅을 용이하게 할 수 있다.
'Programmers' 카테고리의 다른 글
| [18일차]웹 애플리케이션 동작 원리, ERD와 관계 예시 (0) | 2025.09.25 |
|---|---|
| [17일차]Object.keys() , 모듈화, API 설계 (0) | 2025.09.24 |
| [15일차]forEach와 map, 리팩토링, HTTP Status Code (0) | 2025.09.21 |
| [14일차]HTTP POST, Postman 실습 (0) | 2025.09.18 |
| [13일차]Map 객체 활용, Express Generator, JS함수 선언 방식 (0) | 2025.09.17 |