일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 프로그래밍언어
- 데이터구조
- 컴퓨터공학
- 컴퓨터비전
- 자바스크립트
- 네트워크보안
- 데이터베이스
- 클라우드컴퓨팅
- springboot
- 데이터과학
- 인공지능
- 버전관리
- 딥러닝
- 보안
- 데이터분석
- 컴퓨터과학
- 소프트웨어
- 빅데이터
- 머신러닝
- 소프트웨어공학
- 사이버보안
- 알고리즘
- 네트워크
- 파이썬
- Yes
- 자료구조
- 프로그래밍
- 웹개발
- I'm Sorry
- 디자인패턴
- Today
- Total
목록자바 (26)
스택큐힙리스트
내용왜 프로토타입(Prototype)인가?CLI Todo 앱에서 “매주 팀 회의”, “매일 운동”처럼 반복되는 Task를 만들 때마다 new Task()로 필드를 모두 채우면 지루하고 비효율적입니다. 프로토타입 패턴은 이미 준비된 객체를 복사 해서 새 인스턴스를 얻도록 해 주어, 클래스에 직접 의존하지 않고도 빠르게 객체를 만들 수 있게 합니다언제 빛을 발할까?생성 비용이 큰 객체: DB 쿼리나 네트워크 요청으로 초기화되는 무거운 객체를 여러 번 만들 때템플릿·프리셋이 많은 도메인: 일정, 문서·메일 템플릿처럼 기본값이 대부분 같은 경우런타임에 클래스가 확정되는 플러그인 구조: 클래스 정보를 모를 때도 복제가 가능Todo 앱 적용 예시 (Java)public class Task implements Clo..
“환경만 바꿔 끼우면 전(全) 레포지토리가 따라온다” 왜 Abstract Factory인가?CLI Todo 앱이 처음엔 로컬 파일에 데이터를 쓰다가, 팀 프로젝트로 커지면서 MySQL→REST API로 저장 방식을 바꾸게 됐다고 가정해 보죠. TaskRepository, UserRepository, TagRepository처럼 서로 연관된 객체 세트를 한 번에 교체해야 할 때, 클래스마다 new를 고치기 시작하면 지옥문이 열립니다.국내 개발자 커뮤니티에서 조회수가 높은 Inpa의 패턴 정리 글도 “추상 팩토리는 ‘제품 군’ 단위로 타입을 찍어내 확장성을 확보한다”는 점을 강조합니다.패턴 한 줄 정의서브클래스가 관련 객체 군을 생성하도록 위임해 클라이언트는 인터페이스만 의존하게 만드는 생성 패턴.Velog..
“if‧else 지옥에서 탈출, 확장이 보인다” 왜 Factory Method인가?CLI Todo 앱은 add, list, done처럼 명령(Command) 종류가 계속 늘어납니다. 매번 new AddCommand()를 직접 호출하거나 switch 분기문을 늘리면, 기능 추가 때마다 코드를 열어 수정해야 해 OCP(Open–Closed Principle)를 깨뜨리죠.국내 인기 블로그들도 “팩토리 메서드는 객체 생성 책임을 인터페이스로 감춰 결합도를 확↓, 확장성↑ 한다”고 강조합니다CLI Todo 앱에 적용하기목표: 문자열로 들어온 명령어를 적절한 Command 구현체로 매핑하고, 메인 로직은 인터페이스만 바라보게 한다.// 1️⃣ 공통 인터페이스public interface Command { vo..
“딱 한 번만 만든 뒤, 모두가 함께 쓰자” 왜 싱글턴인가?작고 단순한 CLI Todo 앱도 데이터 저장소‧로그 시스템‧설정 값 같은 공통 객체가 생깁니다. 매번 new를 호출해 중복 인스턴스를 만들면 메모리와 동기화 비용이 눈덩이처럼 불어나죠. 그래서 “전역에서 한 벌만” 쓰도록 보장하는 싱글턴 패턴이 등장했습니다. 실제로 Naver D2의 테스트 아티클도 “글로벌 객체를 싱글턴으로 만들면 목(Mock) 교체가 편하다”는 점을 강조합니다대표 적용부위: TaskRepositoryCLI Todo 앱에서 모든 명령이 접근하는 작업 목록 저장소를 예로 들어봅시다.public class TaskRepository { private static final TaskRepository INSTANCE = new..