Singleton 패턴 이 코드가 문제인 이유를 처음엔 잘 모를 수 있다. DB 연결을 매번 새로 만들면 메모리도 낭비고, 연결 수도 무한정 늘어난다. 하나만 만들어서 계속 재사용하면 되는데, 그걸 보장하는 방법이 Singleton이다. Singleton 패턴이란
Singleton 패턴 이 코드가 문제인 이유를 처음엔 잘 모를 수 있다. DB 연결을 매번 새로 만들면 메모리도 낭비고, 연결 수도 무한정 늘어난다. 하나만 만들어서 계속 재사용하면 되는데, 그걸 보장하는 방법이 Singleton이다. Singleton 패턴이란

생성자에 파라미터가 많아지면 이런 코드가 나온다. null이 몇 개인지, 25가 나이인지 ID인지, true와 false가 뭘 의미하는지 전혀 알 수 없다. Builder는 이 문제를 해결하기 위한 패턴이다.복잡한 객체를 단계별로 조립하듯 만드는 패턴이다. 필요한 속성
Factory Method 패턴 객체를 만들 때 new를 직접 쓰면 어떤 문제가 생길까. 코드 곳곳에 new Dog(), new Cat(), new Bird()가 흩어져 있다고 생각해보자. 나중에 new Animal()로 바꿔야 한다면? 모든 new를 찾아다녀야 한다

객체를 하나 만드는 데 시간이 오래 걸린다고 가정해보자. DB에서 데이터를 읽어오거나, 복잡한 초기화 과정을 거쳐야 하는 경우다. 같은 구조의 객체가 여러 개 필요하다면 매번 처음부터 만드는 건 낭비다.이미 만들어진 객체를 찍어내듯 복사하면 되지 않을까. 그게 Prot

110V 전자제품을 220V 콘센트에 꽂을 때 변환 어댑터를 쓴다. 제품도, 콘센트도 바꾸지 않고 중간에 어댑터만 끼우면 된다. 코드에서도 똑같은 상황이 생긴다.서로 호환되지 않는 인터페이스를 함께 동작할 수 있게 변환해주는 패턴이다. 기존 코드를 수정하지 않고, 중간

커피를 주문할 때 "아메리카노에 샷 추가, 휘핑 추가"라고 한다. 기본 커피 위에 옵션을 얹는 구조다. 클래스 상속으로 이걸 표현하면 아메리카노샷추가, 아메리카노휘핑추가, 아메리카노샷추가휘핑추가 같은 조합 폭발이 생긴다.Decorator는 상속 대신 감싸는 방식으로 기

영화를 보러 집에서 준비한다고 생각해보자. 조명을 끄고, TV를 켜고, 스피커 볼륨을 조절하고, 스트리밍 앱을 실행한다. 여러 장치를 각각 조작해야 한다. 리모컨 하나로 "영화 모드" 버튼을 누르면 이걸 한 번에 처리해준다면 얼마나 편할까.Facade가 바로 그 리모컨

파일 탐색기를 생각해보자. 폴더 안에 파일이 있고, 그 폴더 안에 또 폴더가 있고, 그 안에 또 파일이 있다. 폴더와 파일은 다른 존재지만, "크기를 계산한다"거나 "이름을 출력한다" 같은 동작은 둘 다 똑같이 수행한다. 이 구조를 코드로 표현하려면 어떻게 해야 할까.

유튜브 채널을 구독하면 새 영상이 올라올 때 알림이 온다. 구독자가 1명이든 100만 명이든 채널은 신경 쓰지 않는다. 영상을 올리면 구독한 사람 전원에게 알림이 전달될 뿐이다.이 구조가 Observer 패턴이다.객체의 상태가 바뀌면, 그 객체를 구독하고 있는 다른 객

네비게이션 앱에서 경로를 탐색할 때 "자동차", "대중교통", "자전거" 중 하나를 고른다. 목적지는 같지만 경로 탐색 알고리즘은 완전히 다르다. 그리고 언제든지 바꿀 수 있다.Strategy 패턴은 이처럼 알고리즘을 교체 가능한 단위로 캡슐화하는 패턴이다.알고리즘(전

라면을 끓이는 순서는 대체로 같다. 물을 끓이고, 면을 넣고, 스프를 넣는다. 신라면이든 짜파게티든 이 골격은 바뀌지 않는다. 달라지는 건 스프 종류나 토핑 같은 세부 과정이다.Template Method는 이 구조를 그대로 코드로 옮긴 패턴이다.알고리즘의 골격(순서)

텍스트 편집기에서 Ctrl+Z를 누르면 방금 한 작업이 취소된다. 그리고 Ctrl+Y를 누르면 다시 실행된다. 이 기능을 구현하려면 "방금 한 작업"을 어딘가에 기록해둬야 한다. 작업이 무엇인지, 어떻게 되돌리는지도 함께.Command 패턴은 요청(작업) 자체를 객체로