Post

2026-04-10 TIL (0일차)

2026-04-10 TIL (0일차)

CS

• 디자인 패턴 (객체 지향)

패턴명핵심 키워드한 줄 요약
Factory (팩토리)생성 대행“객체를 만드는 법”
객체 생성 로직을 밖으로 노출하지 않고, 공장(Factory) 클래스에게 생성을 떠넘기는 패턴입니다.
Strategy (전략)행동 교체“객체의 행동을 갈아 끼우는 법”
무기(칼, 총, 활)를 런타임에 동적으로 스왑(Swap)하듯이, 알고리즘(행동)을 캡슐화하여 쉽게 갈아 끼우는 패턴입니다.
Observer (옵저버)구독과 알림“객체의 변화를 관찰하고 알리는 법”
유튜브 구독처럼, 어떤 데이터가 변경되었을 때 이를 쳐다보고 있는 모든 객체(구독자)에게 자동으로 신호를 쏴주는 패턴입니다.
Proxy (프록시)대리인 (접근 제어)“무거운 객체 대신 가벼운 대리인을 세우는 법”
용량이 크거나 접근이 민감한 원본 객체 대신 가짜(Proxy)를 먼저 쥐여주고, 진짜 데이터가 필요해지는 순간에만 원본을 호출(Lazy Load)하는 패턴입니다.
Iterator (이터레이터)순회 (탐색)“자료구조의 내부를 몰라도 순회하는 법”
배열이든, 트리든, 리스트든 내부 구조(STL)에 신경 쓰지 않고 Next()만 호출해서 순서대로 쭉 훑어볼 수 있게 해주는 패턴입니다.


UI 아키텍처 패턴 (데이터와 화면의 분리)

패턴명핵심 구조특징 및 요약
MVCModel - View - Controller“가장 클래식한 기본형”
사용자 입력이 컨트롤러로 들어옵니다. 컨트롤러가 모델을 업데이트하고 뷰를 갱신합니다. (단점: 뷰와 모델의 의존성이 남아있음)
MVPModel - View - Presenter“화면과 데이터를 완벽히 단절”
뷰와 모델이 서로를 아예 모릅니다. 중간 관리자인 프리젠터(Presenter)가 뷰의 요청을 받고 모델을 수정한 뒤, 다시 뷰를 직접 업데이트합니다. (특징: 뷰와 프리젠터가 1:1 매칭됨)
MVVMModel - 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.