2025/07 23

[C++]행동 패턴/옵저버 패턴

순서옵저버 패턴이란?옵저버 패턴의 장점과 단점옵저버 패턴 사용시 고려사항간단한 옵저버 패턴 작성옵저버 패턴이란?한 객체의 상태 변화를 감지해서 연관된 객체에 자동으로 통보하는 패턴객체 간의 느슨한 결합을 유지함상태 변화에 따른 자동 동기화를 사용함옵저버 패턴 사용의 예플레이어 상태 변화: 플레이어 체력이 변할 때 UI, 사운드, 이펙트가 동시에 반응해야할 때이벤트 기반 시스템: 게임 상태 변화를 여러 시스템이 감지해야 할 때느슨한 결합을 유지하면서 이벤트를 전파하고 싶을 때MVC 패턴에서 모델의 변화를 뷰에 알려야 할 때옵저버 패턴의 장점과 단점장점이벤트 기반 시스템 설계 가능객체 간 의존도 낮음단점순서 보장이 어려움많은 옵저버가 있을 경우 성능에 문제가 생길 수 있음옵저버 패턴 사용시 고려사항옵저버 등..

C++/디자인패턴 2025.07.31

[C++]구조 패턴/퍼사드 패턴

순서퍼사드 패턴이란?퍼사드 패턴의 장점과 단점퍼사드 패턴 사용시 고려사항간단한 퍼사드 패턴 작성퍼사드 패턴이란?복잡한 시스템에 대해 간단한 인터페이스를 제공하는 패턴복잡한 하위 시스템을 숨기고 간단한 인터페이스로 제공함퍼사드패턴 사용 예게임 시작 시 수많은 시스템을 초기화할 때복잡한 라이브러리를 간단하게 사용하고 싶을 때여러 서브시스템을 조합해서 사용해야 할 때클라이언트가 내부 구조를 몰라도 되게 하고 싶을 때퍼사드 패턴의 장점과 단점장점클라이언트 코드 단순화시스템 구조에 대한 결합도 감소단점퍼사드에 너무 많은 기능이 집중되면 변경에 취약하위 시스템에 대한 직접 제어가 필요할 때 오히려 방해됨퍼사드 패턴 사용시 고려사항퍼사드가 지나치게 방대한 책임을 지지 않도록 주의해야함간단한 퍼사드 패턴 작성

C++/디자인패턴 2025.07.30

[C++]구조 패턴/데코레이터 패턴

순서데코레이터 패턴이란?데코레이터 패턴의 장점과 단점데코레이터 패턴 사용시 고려사항간단한 데코레이터 패턴 작성데코레이터 패턴이란?객체에 새로운 기능을 동적으로 추가하는 패턴상속 대신 구성을 이용함기능 확장이 필요할 때 서브클래싱 대신 사용함데코레이터 패턴 사용의 예무기에 여러 인챈트를 조합하고 싶을 때버프/디버프를 중첩해서 적용할 때기본 기능에 옵션을 동적으로 추가/제거하 때상속으로는 조합이 폭발적으로 증가하는 경우데코레이터 패턴의 장점과 단점장점런타임에 객체에 기능 추가 가능상속보다 유연함단점많은 클래스가 생성될 수 있음(데코레이터 체인)디버깅 어려움데코레이터 패턴 사용시 고려사항객체 조합 순서가 중요하여 순서를 고려해야함데코레이터가 너무 많으면 관리가 어려움간단한 데코레이터 패턴 작성

C++/디자인패턴 2025.07.29

[C++]구조패턴/어댑터 패턴

순서어댑터 패턴이란?어댑터 패턴의 장점과 단점어댑터 패턴 사용시 고려사항간단한 어댑터 패턴 작성어댑터 패턴이란?서로 다른 인터페이스를 가진 클래스들을 함께 작동하도록 만들어주는 중개자 역할의 디자인 패턴즉, 호환되지 않는 인터페이스를 연결해주는 디자인 패턴어댑터 패턴 사용의 예외부 SDK/라이브러리 통합크로스 플랫폼 개발레거시 시스템 연동다양한 API 통렌합(렌더링, 오디오, 네트워크)어댑터 패턴의 장점과 단점장점기존 클래스를 수정 없이 재사용 가능함클라이언트 코드 변경 없이 다양한 인터페이스 연결 가능함단점코드가 복잡해질 수 있음너무 많이 사용하면 설계가 모호해질 수 있음어댑터 패턴 사용시 고려사항진짜 인터페이스 불일치 문제인지, 설계 문제인지 먼저 확인해야함 - 인터페이스가 이미 호환되는 경우엔 피해..

C++/디자인패턴 2025.07.28

[C++]생성 패턴/빌더 패턴

순서빌더 패턴이란?빌더 패턴의 장점과 단점빌더 패턴 사용시 고려사항간단한 빌더 패턴 작성빌더 패턴이란?복잡한 객체의 생성 과정을 단계별로 나누어, 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 생성 패턴.복잡한 객체를 조립하듯이 여러 단계로 나누어 생성함.빌더 패턴의 사용 예캐릭터 커스터마이징과 같이 많은 옵션이 필요할 때생성자 매개변수가 너무 많을 때선택적 매개변수가 많을 때객체 생성 과정이 여러 단계일 때빌더 패턴의 장점과 단점장점복잡한 객체 생성 제어: 객체 생성 과정을 세밀하게 조정 가능가독성 향상: 메서드 체이닝을 통한 명확한 생성 절차를 가짐불변 객체 생성 용이: 생성 후 변경 불가능한 객체 정의에 적합함생성과 사용의 분리: 클라이언트는 생성 세부사항을 몰라도 됨단점클래스 수..

C++/디자인패턴 2025.07.25

[C++] 우선순위 큐

순서큐란?우선순위 큐란?우선순위 큐 구현방법힙이란?힙의 특징과 종류큐란?큐(Queue)는 먼저 들어오는 데이터가 먼저 나가는 FIFO(First In First Out)형식의 자료구조우선순위 큐란?우선순위 큐(Priority Queue)는 먼저 들어오는 데이터가 아닌, 우선순위가 높은 데이터가 먼저 나가는 형태의 자료구조일반적으로 힙(Heap)을 이용하여 구현함우선순위 큐 구현방법 힙이란? 힙은 우선순위 큐를 위해 고안된 완전 이진 트리 형태의 자료구조여러 개의 값 중 최댓값 또는 최솟값을 찾아내는 연산이 빠름힙의 특징과 종류힙의 특징완전 이진 트리 형태로 이루어져있음부모 노드와 서브 트리간 대소 관계가 성립됨.(반정렬 상태)이진 탐색 트리와 달리 중복된 값이 허용됨힙의 종류최대 힙: 부모 노드의 키 값..

CS/자료구조 2025.07.24

[C++]생성 패턴/팩토리 패턴

순서팩토리 팩턴이란?팩토리 패턴의 장점과 단점팩토리 패턴 사용시 고려사항간단한 팩토리 패턴 작성팩토리 팩턴이란?객체 생성을 공장(Factory)화 시킨 클래스에 캡슐화 처리하여 대신 생성하게 하는 생성 디자인 패턴클라이언트 코드가 직접 new 연산자를 사용하지 않고, 팩토리 메서드나 클래스를 통해 객체를 생성하게하여, 객체 생성의 책임을 분리시킴팩토리 패턴의 사용 예다양한 종류의 몬스터/아이템을 사용할 때조건에 따라 다른 객체를 생성해야 할 때생성 로직이 복잡하고 자주 변경될 때팩토리 패턴의 장점과 단점장점객체 생성 캡슐화: 객체 생성 로직을 클라이언트 코드로부터 분리하여 유지보수가 쉬워짐유연성 증가: 새로운 클래스나 로직이 추가되어도 기존 코드를 거의 수정하지 않고 확장 가능함의존성 감소: 구체적인 클..

C++/디자인패턴 2025.07.23

[C++]Rvalue/Lvalue

순서Rvalue란?Lvalue란?Rvalue와 Lvalue의 차이Rvalue란?기존 C에서 rvalue는 right value 즉 대입연산자를 기준으로 오른쪽 값메모리 주소가 없는 일시적으로 계산된 결과 또는 임시 값임 => 지금만 잠깐 사용하는 값예를 들어 int a = 5; 에서 rvalue는 5이다.Lvalue란?기존 C에서 rvalue는 left value 즉 대입연산자를 기준으로 왼쪽 값객체를 참조하는 표현식으로 특정 메모리의 위치를 가지고 있고 주소도 가질 수 있는 존재하는 값예를 들어 int a = 5;에서 lvalue는 a이다.Rvalue와 Lvalue의 차이lvalue와 rvalue를 구분하는 이유이동생성자 / 이동 대입 연산자함수 오버로딩 시 구분 가능

C++ 2025.07.22

[자료구조]AVL트리

순서트리란?트리에 사용되는 용어AVL트리란?레드-블랙트리란?이진탐색트리(BST)레드-블랙트리와 AVL트리 비교AVL트리가 STL 컨테이너로부터 간택받을 수 없는 이유트리란?트리란 계층적인 자료구조이다.하나의 루트(root)노드에서 시작하여 자식 노드로 나눠짐그래프의 한 종류지만 사이클이 없는 형태트리의 용도계층적 데이터 표현탐색 및 정렬우선순위 큐(힙)파싱 등 트리에 사용되는 용어루트 노드: 트리의 가장 위에 있는 노드를 뜻함리프 노드: 자식이 없는 노드부모/자식: 연결된 두 노드의 관계를 뜻함서브트리: 트리의 일부로서 하나의 노드와 그 하위 노드들높이: 루트에서 가장 깊은 리프까지의 거리AVL트리란?각 노드의 왼쪽, 오른쪽 서브트리 높이 차이가 1 이하가 되도록 자동으로 균형을 유지하는 이진 탐색 ..

CS/자료구조 2025.07.21

[C++] 에라토스테네스의 체

순서소수란?에라토스테네스의 체란?에라토스테네스의 체 사용 이유에라토스테네스의 체 원리에라토스테네스의 체 구현소수란?소수란 1보다 크며 1과 자신으로만 나누어지는 수에라토스테네스의 체란?소수를 판별하는 알고리즘.많은 수의 소수들을 빠르고 정확하게 구하는 방법에라토스테네스의 체 사용이유소수를 판별해야하는 상황 중 "2부터 N까지 수 중 소수 찾기"와 같이 특정 범위 수 중에서 소수를 찾는 데 사용할 수 있는 효율적인 방법이기 때문에라토스테네스의 체 원리각 수에 대해 그 수의 배수를 모두 제거하는 작업을 수행2의 배수를 제거할 때 n/2번, 3의 배수를 제거할 때 n/3번...방식을 반복함시간 복잡도는 n/2 + n/3 + n/4 + ... + 1 = n( n/2 + n/3 + n/4 )가 된다.여기서 1/2..

CS/알고리즘 2025.07.18