Share
Sign In
Lighthouse Dev
디자인 패턴 - Observer
L
Lighthouse
👍
1
👏
1
😀
1
😘
1
오늘은 디자인 패턴 중 하나인 Observer 패턴에 대해 간단히 소개해드리려고 합니다.
Observer 패턴이란?
Observer 패턴은 객체의 상태 변화를 관찰하는 객체들을 등록하고, 객체의 상태가 변경될 때마다 등록된 객체들에게 알림을 보내는 패턴입니다. 즉, 객체의 상태 변화를 관찰하고 싶은 객체들을 객체에 등록하고, 객체의 상태가 변경될 때마다 등록된 객체들에게 알림을 보내는 방식으로 객체의 상태 변화를 관리합니다.
Observer 패턴의 장점
Observer 패턴을 사용하면 다음과 같은 장점이 있습니다.
객체의 상태 변화를 관찰하고 싶은 객체들을 쉽게 관리할 수 있습니다.
객체의 상태 변화를 관찰하는 객체들을 쉽게 추가하거나 제거할 수 있습니다.
객체의 상태 변화를 관찰하는 객체들 간의 결합도를 낮출 수 있습니다.

Observer 패턴의 예시
Observer 패턴의 예시로 게임의 캐릭터를 생각해 볼 수 있습니다. 게임의 캐릭터는 자신의 상태가 변경될 때마다, 이를 관찰하고 있는 다른 캐릭터들에게 알림을 보냅니다.
다음은 Observer 패턴을 사용하여 게임의 캐릭터를 구현한 예시입니다.
Python Code
class Character: def __init__(self): self.observers = [] def addObserver(self, observer): self.observers.append(observer) def removeObserver(self, observer): self.observers.remove(observer) def notifyObservers(self): for observer in self.observers: observer.update(self) def changeState(self): self.notifyObservers() class Enemy(Character): def __init__(self): super().__init__() self.hp = 100 def update(self, character): if character.hp <= 0: print("Enemy is dead!") class Player(Character): def __init__(self): super().__init__() self.attack_power = 10 def update(self, character): if character.hp <= 0: print("Player won!") enemy = Enemy() player = Player() enemy.addObserver(player) enemy.changeState()
위 코드에서 Character 클래스는 observers라는 리스트를 사용하여 Observer 객체들을 관리합니다. notifyObservers() 메서드는 observers 리스트에 등록된 모든 Observer 객체들에게 알림을 보냅니다.
Enemy 클래스는 Character 클래스를 상속받아 구현됩니다. Enemy 클래스는 hp 필드를 사용하여 적의 체력을 관리합니다. changeState() 메서드는 적의 체력이 0 이하가 되면, notifyObservers() 메서드를 호출하여 플레이어에게 알림을 보냅니다.
Player 클래스도 Character 클래스를 상속받아 구현됩니다. Player 클래스는 attack_power 필드를 사용하여 플레이어의 공격력을 관리합니다. update() 메서드는 notifyObservers() 메서드를 호출하여 적에게 알림을 보냅니다.
클라이언트 코드에서는 enemy 객체와 player 객체를 생성합니다. 그리고 enemy 객체에 player 객체를 Observer 객체로 등록합니다.
enemy 객체의 changeState() 메서드를 호출하면, player 객체에게 알림이 전달됩니다. player 객체는 알림을 수신하여 적의 체력이 0 이하가 되었다는 것을 확인합니다.
Observer 패턴의 적용
Observer 패턴은 다음과 같은 상황에서 유용하게 사용할 수 있습니다.
객체의 상태 변화를 관찰하고 싶은 객체들이 있는 경우
객체의 상태 변화를 관찰하는 객체들을 쉽게 추가하거나 제거할 수 있어야 하는 경우
객체
Kp
Subscribe to 'kpmg-lighthouse'
Welcome to 'kpmg-lighthouse'!
By subscribing to my site, you'll be the first to receive notifications and emails about the latest updates, including new posts.
Join SlashPage and subscribe to 'kpmg-lighthouse'!
Subscribe
👍
1
👏
1
😀
1
😘
1
Lighthouse
하둡 - Map Reduce
MapReduce는 대규모 데이터를 분산 환경에서 처리하기 위한 프로그래밍 모델입니다. MapReduce는 입력 데이터를 키-값 쌍으로 변환하는 Map 단계와, 동일한 키를 가진 데이터를 집계하는 Reduce 단계로 구성됩니다. MapReduce는 다음과 같은 특징을 가지고 있습니다. 병렬 처리: MapReduce는 입력 데이터를 여러 노드에 분산하여 처리합니다. 이를 통해 대규모 데이터를 효율적으로 처리할 수 있습니다. 간결한 프로그래밍: MapReduce는 단순한 프로그래밍 모델을 제공합니다. 이를 통해 개발자가 대규모 데이터를 쉽게 처리할 수 있습니다. 확장성: MapReduce는 확장성이 뛰어납니다. 이를 통해 대규모 데이터 처리 환경에 쉽게 적용할 수 있습니다. MapReduce의 구조 MapReduce는 다음과 같은 구조로 구성됩니다. JobTracker: JobTracker는 MapReduce 작업을 관리하는 서버입니다. JobTracker는 MapReduce 작업을 분배하고, 작업의 진행 상황을 추적합니다. TaskTracker: TaskTracker는 MapReduce 작업을 수행하는 서버입니다. TaskTracker는 JobTracker의 명령에 따라 MapReduce 작업을 수행합니다. MapReduce의 작동 방식 MapReduce는 다음과 같은 방식으로 작동합니다. 사용자는 MapReduce 작업을 생성합니다. JobTracker는 MapReduce 작업을 분배합니다. TaskTracker는 MapReduce 작업을 수행합니다. JobTracker는 작업의 진행 상황을 추적합니다. 사용자는 JobTracker를 통해 MapReduce 작업을 생성할 수 있습니다. JobTracker는 MapReduce 작업을 여러 TaskTracker에 분배합니다. TaskTracker는 JobTracker의 명령에 따라 MapReduce 작업을 수행합니다. JobTracker는 작업의 진행 상황을 추적합니다. MapReduce의 단계 MapReduce는 다음과 같은 두 단계로 구성됩니다. Map 단계: Map 단계는 입력 데이터를 키-값 쌍으로 변환합니다. Map 단계는 입력 데이터를 한 줄씩 읽어 키-값 쌍으로 변환합니다. Reduce 단계: Reduce 단계는 동일한 키를 가진 데이터를 집계합니다. Reduce 단계는 Map 단계의 출력을 키-값 쌍으로 받고, 동일한 키를 가진 데이터를 집계합니다. MapReduce는 다양한 분야에서 활용되고 있습니다. 예를 들어, 빅데이터 분석, 디지털 아카이빙, 미디어 스트리밍 등에서 MapReduce가 사용되고 있습니다. MapReduce의 장점 MapReduce는 다음과 같은 장점을 가지고 있습니다. 병렬 처리: MapReduce는 입력 데이터를 여러 노드에 분산하여 처리합니다. 이를 통해 대규모 데이터를 효율적으로 처리할 수 있습니다. 간결한 프로그래밍: MapReduce는 단순한 프로그래밍 모델을 제공합니다. 이를 통해 개발자가 대규모 데이터를 쉽게 처리할 수 있습니다. 확장성: MapReduce는 확장성이 뛰어납니다. 이를 통해 대규모 데이터 처리 환경에 쉽게 적용할 수 있습니다. MapReduce의 단점 MapReduce는 다음과 같은 단점을 가지고 있습니다. 복잡성: MapReduce는 복잡한 구조를 가지고 있습니다. 따라서 MapReduce를 사용하려면 충분한 이해가 필요합니다. 성능: MapReduce의 성능은 네트워크 대역폭에 따라 제한될 수 있습니다. MapReduce의 활용 사례 MapReduce는 다음과 같은 분야에서 활용되고 있습니다.
😀😘
2
Lighthouse
하둡 - HDFS
HDFS(Hadoop Distributed File System)는 하둡 에코시스템의 핵심 구성 요소 중 하나로, 대용량 데이터를 저장하고 관리하기 위한 분산 파일 시스템입니다. HDFS는 수백 대 또는 수천 개의 서버에 분산된 데이터를 저장하여 대규모 데이터 처리를 가능하게 합니다. HDFS는 다음과 같은 특징을 가지고 있습니다. 분산: HDFS는 데이터를 여러 서버에 분산하여 저장합니다. 이를 통해 대규모 데이터를 저장하고 관리할 수 있습니다. 내결함성: HDFS는 데이터의 손실을 방지하기 위해 내결함성을 갖추고 있습니다. 데이터는 여러 서버에 복제되어 저장되며, 서버 하나가 고장나더라도 데이터를 복구할 수 있습니다. 효율성: HDFS는 데이터를 효율적으로 저장하고 관리합니다. 데이터는 블록 단위로 저장되며, 블록의 크기는 64MB에서 128MB 사이로 조정할 수 있습니다. HDFS는 다음과 같은 용도로 사용될 수 있습니다. 대규모 데이터 저장: HDFS는 수백 TB 또는 수 PB 이상의 데이터를 저장할 수 있습니다. 대규모 데이터 분석: HDFS는 대규모 데이터를 분석하기 위한 플랫폼으로 사용될 수 있습니다. 디지털 아카이빙: HDFS는 디지털 아카이빙을 위한 플랫폼으로 사용될 수 있습니다. HDFS의 구조 HDFS는 다음과 같은 구조로 구성되어 있습니다. NameNode: NameNode는 HDFS의 메타데이터를 저장하는 서버입니다. 메타데이터에는 파일의 이름, 크기, 위치 등이 포함됩니다. DataNode: DataNode는 실제 데이터를 저장하는 서버입니다. DataNode는 NameNode의 명령에 따라 데이터를 저장하고 관리합니다. HDFS의 작동 방식 HDFS는 다음과 같은 방식으로 작동합니다. 사용자가 파일을 생성하면 NameNode는 파일의 메타데이터를 저장합니다. NameNode는 DataNode에 파일을 저장할 위치를 지시합니다. DataNode는 NameNode의 지시에 따라 파일을 저장합니다. 사용자는 NameNode를 통해 파일을 생성, 수정, 삭제할 수 있습니다. NameNode는 DataNode에 파일을 저장할 위치를 지시하며, DataNode는 NameNode의 지시에 따라 파일을 저장하고 관리합니다. HDFS의 장점 HDFS는 다음과 같은 장점을 가지고 있습니다. 대규모 데이터 저장: HDFS는 수백 TB 또는 수 PB 이상의 데이터를 저장할 수 있습니다. 내결함성: HDFS는 데이터의 손실을 방지하기 위해 내결함성을 갖추고 있습니다. 효율성: HDFS는 데이터를 효율적으로 저장하고 관리합니다. HDFS의 단점 HDFS는 다음과 같은 단점을 가지고 있습니다.
😘😀👍
3
Lighthouse
하둡 에코시스템 - 개요
오늘은 대용량 데이터 처리를 위한 프레임워크인 Hadoop에 대해 간단히 소개해드리려고 합니다. Hadoop이란? Hadoop은 Apache Software Foundation에서 개발한 오픈소스 프레임워크로, 대용량 데이터 처리를 위한 분산 처리 시스템입니다. Hadoop은 MapReduce와 HDFS라는 두 가지 주요 기술을 기반으로 합니다. MapReduce는 대용량 데이터를 처리하기 위한 분산 처리 프레임워크입니다. MapReduce는 데이터를 작은 단위로 나누어 병렬 처리하는 방식으로 대용량 데이터를 효율적으로 처리할 수 있습니다. HDFS는 대용량 데이터를 저장하기 위한 분산 파일 시스템입니다. HDFS는 데이터를 여러 대의 서버에 분산 저장하여 대용량 데이터를 효율적으로 저장하고 관리할 수 있습니다. Hadoop의 특징 Hadoop의 주요 특징은 다음과 같습니다. 분산 처리: Hadoop은 대용량 데이터를 처리하기 위해 분산 처리 방식을 사용합니다. 확장성: Hadoop은 클러스터 규모를 쉽게 확장할 수 있습니다. 내구성: Hadoop은 데이터의 손실을 방지하기 위해 다양한 내구성 기능을 제공합니다. 오픈소스: Hadoop은 오픈소스 소프트웨어로, 누구나 무료로 사용할 수 있습니다. Hadoop의 적용 Hadoop은 다양한 분야에서 대용량 데이터 처리를 위해 사용되고 있습니다. Hadoop의 주요 적용 분야는 다음과 같습니다.
👍😘😀
4