| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- springboot
- 프로그래밍언어
- 컴퓨터과학
- 네트워크보안
- 데이터과학
- 데이터베이스
- 딥러닝
- 보안
- 컴퓨터공학
- 네트워크
- 자료구조
- 자바스크립트
- I'm Sorry
- 알고리즘
- 머신러닝
- 인공지능
- 데이터구조
- 빅데이터
- 소프트웨어
- 디자인패턴
- 데이터분석
- 클라우드컴퓨팅
- 사이버보안
- 웹개발
- Yes
- 파이썬
- 컴퓨터비전
- 프로그래밍
- 소프트웨어공학
- 버전관리
- Today
- Total
목록개발 (114)
스택큐힙리스트
“되돌리기(Undo)”나 “기록/재실행(Redo·Macro)”가 필요할 때, 팀이 가장 많이 헷갈리는 두 패턴이 커맨드(Command)와 메멘토(Memento)죠. 결론부터 말할게요.작업 자체를 기록·재생하고 싶다면 → 커맨드객체 상태를 ‘그 순간’으로 즉시 되돌리고 싶다면 → 메멘토두 패턴은 겹치는 영역이 있지만 목표가 다릅니다. 커맨드는 “행위(요청)”를 객체로 만들고 큐잉·지연·원격 실행·로그·매크로까지 다룹니다. 메멘토는 “상태 스냅샷”을 캡슐화해 내부 구현을 노출하지 않고 저장·복원합니다.언제 커맨드가 맞나?이럴 때 커맨드가 덜 아픕니다.행위 중심으로 생각해야 할 때: “이 버튼이 누르면 어떤 작업을 수행한다”를 깔끔히 객체화.큐·지연·원격 실행이 필요할 때(잡 큐, 워커, 재시도).Audit/..
복잡한 편집기나 결제 플로우에서 “방금 전으로 돌아가줘”는 거의 필수 기능이죠. 이걸 매번 if/else로 땜빵하다 보면 상태 관리가 산으로 갑니다. 메멘토 패턴은 객체의 내부 구현을 까지 않고(캡슐화 유지) 이전 상태 스냅샷을 저장·복원하게 해 주는 정석 해법이에요.왜 메멘토인가? (문제 → 해법)문제: 객체가 복잡해질수록 “원래대로” 돌리는 로직이 여기저기 흩어짐 → 사이드이펙트·버그 증가해법: 현재 상태를 Memento(스냅샷) 로 외부에 맡겨 두고, 필요할 때 Originator 가 그 스냅샷으로 복원. 스냅샷 묶음은 Caretaker 가 관리. 구조가 단순하고 테스트가 쉬워집니다.구성 요소 한 번에 이해하기Originator: “상태 주인공”. 스냅샷을 만들고(save()), 나중에 되돌리는(r..
객체 트리(파일 시스템, 문서 AST, UI 컴포넌트…)에 새로운 연산을 넣어야 할 때, 모든 클래스에 메서드를 추가하자니 코드가 산으로 가고, 상속도 이미 꽉 차 있다면?Visitor 패턴은 데이터 구조(Elements) 와 알고리즘(Visitors) 을 분리해 “클래스 손대지 않고 기능만 플러그인” 할 수 있게 해 줍니다.언제 쓰면 딱일까?컴파일러·파서: 구문 트리를 돌며 타입 체크, 코드 생성, pretty print 등 다양한 작업 추가UI 테스트 자동화: 위젯 트리를 방문하며 스냅샷·접근성 검사·통계 수집파일 탐색기: 디렉터리·파일 객체 구조에 압축, 용량 계산, 권한 검사 등 추가 기능 삽입게임 엔진: 씬 그래프에 충돌 검사, 렌더링, AI 패스 한 번에 붙이기로그·모니터링: 객체 계층을 돌며..
동영상/오디오 앱에서 “지난번 보던 자리부터 이어보기” 는 필수 UX입니다.이 기능은 사실 두 가지 디자인 패턴이 만나면 깔끔하게 풀립니다.Memento – 플레이어의 ‘스냅샷’을 저장·복원해 재생 위치를 되살린다.Iterator – 저장된 스냅샷 목록을 순회해 최근 기록을 탐색‧표시한다.아래 예시는 조회수 높은 한국 안드로이드 블로그들의 패턴 사용법을 베이스로, 실제 서비스 코드 형태로 재구성했습니다.1. 핵심 클래스 설계PlayerState (Memento)@JvmInline value class PlayerState(val positionMs: Long)불변(immutable)이라 복원 시 사이드이펙트 없음. VideoPlayer (Originator)class VideoPlayer(private ..