언리얼 엔진의 블루프린트 시스템은 시각적 스크립팅과 전통적인 코딩을 독특하게 혼합한 놀라운 도구다. 블루프린트의 작동 방식을 이해하려면 코드를 작성하지 않고도 복잡한 게임 로직을 구축할 수 있는 시각적 인터페이스라고 상상해 보라. 이 시스템은 시각적 스크립팅의 유연성과 기존 프로그래밍의 기능을 결합하므로 C++로 작성된 메서드와 통합할 때 특히 유리하다. 예시 슈팅 게임에서 C++와 블루프린트 통합 총을 쏘고 적에게 피해를 주는 것과 같은 핵심 기능을 처리하기 위해 C++로 작성된 메서드가 있는 슈팅 게임 시나리오를 고려해 보자. 이러한 메서드는 게임 로직의 중추를 형성한다. C++ ShootGun Method 이 메소드은 총 발사 메커니즘을 처리한다. 여기에는 탄약 사용, 반동, 총이 현재 발사 가능한..
전체 글
개발 내용과 지식을 정리한 블로그입니다.![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAwbo3%2FbtsFoDjo0c5%2FnWASzYIkiexw1thpkLKauK%2Fimg.png)
방문자 패턴 객체의 구조와 객체에 수행되는 작업을 분리한다. 기존 클래스를 변경하지 않고도 새로운 작업을 정의할 수 있게 한다. 구조 Visitor - 방문자 클래스들이 구현해야 할 인터페이스. 각 구체적인 요소 클래스(Element)를 방문(visit)하는 메소드를 선언한다. Concrete Visitor - Visitor 인터페이스를 구현하는 클래스. 구체적인 요소(Element)들에 대한 방문 동작을 구현한다. 각 요소에 대해 수행할 작업을 정의한다. Element - 요소 클래스들이 구현해야 할 인터페이스. 이 인터페이스는 Accept 메소드를 선언하여, 방문자 객체가 요소 객체를 방문할 수 있게 한다. Concrete Element - Element 인터페이스를 구현하는 클래스. 실제 데이터와 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6rDwO%2FbtsFnVxPyXj%2F0ZdhHTbXcJEAIbd35USiJK%2Fimg.png)
템플릿 메소드 패턴 알고리즘의 골격을 정의한 메소드를 제공하고, 일부 단계를 서브클래스에서 구현하게 함으로써, 구조를 유지하면서도 특정 부분의 변경을 가능하게 하는 디자인 패턴. 구조 AbstractClass - 서브클래스들이 재정의를 통해 구현해야 하는 알고리즘 처리 단계의 기본 연산(골격)을 정의한다. 그리고 알고리즘의 뼈대를 정의하는 템플릿 메서드를 구현한다. ConcreteClass - 서브클래스마다 달라진 알고리즘 처리 단계를 수행하기 위한 기본 연산을 구현한다. 기본 인터페이스 // 추상 기본 클래스 public abstract class AbstractClass { // 템플릿 메소드 public void TemplateMethod() { BaseOperation(); // 기본 작업 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtgoMl%2FbtsFn93sCeV%2FYN1uYgJgaxslojrwkDI4JK%2Fimg.png)
전략 패턴 여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴. 알고리즘을 사용하는 클라이언트와 상관 없이 독립적으로 알고리즘을 다양하게 변경할 수 있다. 구조 Strategy - 제공하는 모든 알고리즘에 대한 공통 연산들을 인터페이스로 정의한다. Context 클래스는 ConcreteStrategy 클래스에서 정의한 인터페이스를 통해 실제 알고리즘을 사용한다. ConcreteStrategy - Strategy의 인터페이스를 실제 알고리즘으로 구현한다. Context - ConcreteStrategy 객체를 통해 구성된다. Strategy 객체에 대한 참조를 관리하고, 실제로는 Strategy 서브클래스(ConcreteStrategy)의 인스턴스를 갖고 있음으로써 구체화한다. 또한 St..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUdMSt%2FbtsFb8pQ9pb%2FOx0qdzadKjDHvVM6TmDE7K%2Fimg.jpg)
옵저버 패턴 객체를 가볍게 만들어 메모리 사용량을 줄이는 패턴. 자주 변하는 속성과 불변 속성을 분리하고 불변 속성을 재사용함으로써 메모리 사용량을 줄일 수 있다. 구조 Subject - Observer(감시자)를 을 알고 있는 구독자. 임의의 개수의 감시자 객체는 Subject를 감시한다. Subject의 상태가 변경되면 Observer에게 알림을 보낸다. Observer - Subject의 상태 변화를 갱신하는 데 필요한 인터페이스를 정의한다. Subject의 변경에 따라 변화되어야 하는 객체들의 일관성이 유지된다. ConcreteSubject - ConcreteObserver 객체에게 알려주어야 하는 상태를 저장한다. 상태가 변경되면 해당 ConcreteObserver에 변경을 통보한다. Con..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyA684%2FbtsE7uzU4qY%2Fp3ZSG1IQU09MPnsFlDnzP1%2Fimg.jpg)
상태 패턴 객체 내부 상태 변경에 따라 객체의 행동이 달라지는 패턴. 상태에 특화된 행동들을 분리해 낼 수 있으며, 새로운 행동을 추가하더라도 다른 행동에 영향을 주지 않는다. 구조 Context - 사용자가 관심 있는 인터페이스를 정의한다. 객체의 현재 상태를 정의한 ConcreteState 클래스 객체를 유지 및 관리한다. State - Context의 각 상태별로 필요한 핸동을 캡슐화하여 인터페이스로 정의한다. ConcreteState 클래스들 - 각 서브클래스들은 Context의 상태에 따라 처리되어야 할 실제 행동을 구혀한다. 기본 인터페이스 public interface IState { void Handle(Context context); } public class ConcreteSta..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkzSEB%2FbtsDQ4bDpql%2FOYdAmLMdw69eCwO8qHE9e1%2Fimg.png)
메멘토 패턴 객체의 상태를 이전의 상태로 복원할 수 있는 방법을 제공하는 디자인 패턴. 객체의 상태를 캡처하고 필요할 때 그 상태를 복원하는 기능을 통해, 객체의 내부 상태에 대한 직접적인 접근을 피하면서도 상태 정보를 외부에 저장하고 관리할 수 있다. 구조 Memento - 객체의 내부 상태를 저장하는 클래스. 객체의 상태를 저장하거나 복원하기 위해 사용된다. Originator - 원조 객체. 메멘토를 생성하여 현재 객체의상태를 저장하고, 메멘토를 사용하여 내부 상태를 복원한다. Caretaker - 메멘토의 보관을 책임지는 클래스. 메멘토의 내부 상태를 읽거나 접근하지 못하고 단지 보관만 한다. 기본 인터페이스 public class Memento { public string State { ge..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFsinv%2FbtsDLMjjWfT%2FtJGNcn1Db2ZKRm4cSISpek%2Fimg.png)
문제 링크 성능 요약 메모리: 4.14 MB, 시간: 0.03 ms 문제 설명 수학에서 칸토어 집합은 0과 1 사이의 실수로 이루어진 집합으로, [0, 1]부터 시작하여 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만들어집니다. 남아는 칸토어 집합을 조금 변형하여 유사 칸토어 비트열을 만들었습니다. 유사 칸토어 비트열은 다음과 같이 정의됩니다. 0 번째 유사 칸토어 비트열은 "1" 입니다. n(1 ≤ n) 번째 유사 칸토어 비트열은 n - 1 번째 유사 칸토어 비트열에서의 1을 11011로 치환하고 0을 00000로 치환하여 만듭니다. 남아는 n 번째 유사 칸토어 비트열에서 특정 구간 내의 1의 개수가 몇 개인지 궁금해졌습니다. n과 1의 개수가 몇 개인지 알고 싶은 구간을 나타내는 ..