2026-04-10 TIL (0일차)
2026-04-10 TIL (0일차)
CS
• 디자인 패턴 (객체 지향)
| 패턴명 | 핵심 키워드 | 한 줄 요약 |
|---|---|---|
| Factory (팩토리) | 생성 대행 | “객체를 만드는 법” 객체 생성 로직을 밖으로 노출하지 않고, 공장(Factory) 클래스에게 생성을 떠넘기는 패턴입니다. |
| Strategy (전략) | 행동 교체 | “객체의 행동을 갈아 끼우는 법” 무기(칼, 총, 활)를 런타임에 동적으로 스왑(Swap)하듯이, 알고리즘(행동)을 캡슐화하여 쉽게 갈아 끼우는 패턴입니다. |
| Observer (옵저버) | 구독과 알림 | “객체의 변화를 관찰하고 알리는 법” 유튜브 구독처럼, 어떤 데이터가 변경되었을 때 이를 쳐다보고 있는 모든 객체(구독자)에게 자동으로 신호를 쏴주는 패턴입니다. |
| Proxy (프록시) | 대리인 (접근 제어) | “무거운 객체 대신 가벼운 대리인을 세우는 법” 용량이 크거나 접근이 민감한 원본 객체 대신 가짜(Proxy)를 먼저 쥐여주고, 진짜 데이터가 필요해지는 순간에만 원본을 호출(Lazy Load)하는 패턴입니다. |
| Iterator (이터레이터) | 순회 (탐색) | “자료구조의 내부를 몰라도 순회하는 법” 배열이든, 트리든, 리스트든 내부 구조(STL)에 신경 쓰지 않고 Next()만 호출해서 순서대로 쭉 훑어볼 수 있게 해주는 패턴입니다. |
UI 아키텍처 패턴 (데이터와 화면의 분리)
| 패턴명 | 핵심 구조 | 특징 및 요약 |
|---|---|---|
| MVC | Model - View - Controller | “가장 클래식한 기본형” 사용자 입력이 컨트롤러로 들어옵니다. 컨트롤러가 모델을 업데이트하고 뷰를 갱신합니다. (단점: 뷰와 모델의 의존성이 남아있음) |
| MVP | Model - View - Presenter | “화면과 데이터를 완벽히 단절” 뷰와 모델이 서로를 아예 모릅니다. 중간 관리자인 프리젠터(Presenter)가 뷰의 요청을 받고 모델을 수정한 뒤, 다시 뷰를 직접 업데이트합니다. (특징: 뷰와 프리젠터가 1:1 매칭됨) |
| MVVM | Model - View - ViewModel | “데이터 바인딩(Data Binding)의 마법” 뷰가 뷰모델을 ‘구독(Observer)’합니다. 뷰모델의 데이터가 바뀌면, 코드를 짜지 않아도 화면(View)이 알아서(자동으로) 바뀝니다. (언리얼 UMG, 웹 프론트엔드에서 가장 많이 씀) |
코딩테스트
• 2차원 배열 길찾기 Tip
방향 배열(dy, dx) 분리이유
cpp //N,S,W,E int dir[]={-1,1,-1,1}; 하나의 배열만 사용하면 문제가 발생합니다. 배열에서 값을 꺼내왔을 때, 이 값을 y에 더해야 할지 x에 더해야 할지 알 수 없습니다.
- 만약 북쪽(‘N’)을 나타내는
-1을 꺼냈다고 가정해 봅시다.- 북쪽으로 가려면 세로(y)는 -1이 되고 가로(x)는 0이 되어야 합니다.
- 서쪽(‘W’)의
-1을 꺼내면 반대로 세로(y)는0, 가로(x)는 -1이 되어야 합니다.
결국 값을 꺼내고 나서도 “이게 상하 이동이야, 좌우 이동이야?” 하고 if-else문을 많이 사용하는 일이 발생합니다.
제를 해결하기 위해, 각 방향으로 이동할 때 발생하는 y의 변화량과 x의 변화량을 각각 분리해서 쌍(Pair)으로 만들어 줍니다.
1
2
int dy[] = {-1, 1, 0, 0};
int dx[] = {0, 0, -1, 1};
사용방법
두 줄만으로 완벽한 2차원 이동이 구현가능
1
2
3
4
5
int idx = Getdir('N'); // 0 반환
// 두 배열의 0번째 값을 각각 더해버림!
y += dy[idx]; // y += -1 (위로 한 칸)
x += dx[idx]; // x += 0 (가로는 안 움직임)
vector의 tip
vector<string>은 겉보기에는 1차원 리스트 같지만, 내부적으로 ‘문자의 배열(string)’들을 담고 있는 ‘배열(vector)’이기 때문에 사실상 2차원 배열처럼 사용할 수 있습니다.
개념
- 구조:
vector<string> vec;->vec[행][열] - 원리:
vec[i]: 벡터의 i번째에 들어있는 문자열(string) 전체에 접근합니다.vec[i][j]: i번째 문자열 안에 있는 j번째 문자(char) 하나에 직접 접근합니다.
This post is licensed under CC BY 4.0 by the author.