개요
이번 포스트에서는 자바스크립트 Observers를 활용하여 데이터 필터링하는 방법에 대해 알아보겠습니다. Observers는 객체의 상태 변화를 감지하고 이에 따라 특정 동작을 수행할 수 있는 기능을 제공합니다. 데이터 필터링은 특정 조건에 맞는 데이터만 선택적으로 출력하는 기능으로, Observers를 활용하여 이를 구현할 수 있습니다.
Observers 패턴
Observers 패턴은 한 객체가 변경될 때, 이를 감지하고 다른 객체에게 변경 사항을 알려주는 디자인 패턴입니다. Observers 패턴은 객체 간의 결합도를 낮추고 확장성을 높일 수 있는 장점이 있습니다. 자바스크립트에서 Observers 패턴을 구현하려면 addEventListener
메서드를 이용하여 객체에 이벤트를 등록하고, 이벤트가 발생할 때 동작할 함수를 등록해야 합니다.
데이터 필터링 방법
1. 데이터 객체 생성
가장 먼저, 데이터 객체를 생성합니다. 데이터 객체에는 원본 데이터와 데이터 변화를 감지할 Observers 함수를 포함시켜야 합니다.
class DataObject {
constructor() {
this.data = [];
this.observers = [];
}
addObserver(observer) {
this.observers.push(observer);
}
removeObserver(observer) {
const index = this.observers.indexOf(observer);
if (index !== -1) {
this.observers.splice(index, 1);
}
}
notifyObservers() {
for (const observer of this.observers) {
observer.update(this.data);
}
}
setData(newData) {
this.data = newData;
this.notifyObservers();
}
}
2. Observer 객체 구성
데이터 변화를 감지하여 특정 조건에 맞는 데이터를 필터링할 Observer 객체를 구성합니다.
class FilterObserver {
constructor(filterCondition) {
this.filterCondition = filterCondition;
}
update(data) {
const filteredData = data.filter(this.filterCondition);
console.log("Filtered Data:", filteredData);
}
}
3. 데이터 필터링 실행
마지막으로, 데이터 객체와 Observer 객체를 생성하고 이들을 연결하여 데이터 필터링을 실행합니다.
const dataObject = new DataObject();
// 데이터 객체에 Observer 객체 등록
const filterObserver = new FilterObserver(item => item.age > 30 && item.gender === 'male');
dataObject.addObserver(filterObserver);
// 데이터 추가 및 필터링
dataObject.setData([
{ name: "John", age: 25, gender: "male" },
{ name: "Emily", age: 40, gender: "female" },
{ name: "Alex", age: 35, gender: "male" }
]);
실행 결과는 다음과 같습니다.
Filtered Data: [
{ name: "Alex", age: 35, gender: "male" }
]
결론
자바스크립트 Observers를 활용하여 데이터 필터링하는 방법을 알아보았습니다. Observers 패턴은 객체 간의 결합도를 낮추고 상태 변화를 감지하여 필요한 동작을 수행할 수 있는 강력한 기능을 제공합니다. 이를 활용하여 데이터 필터링 등 다양한 기능을 구현할 수 있습니다.
#javascript #Observers