깡깡이 님! 시험기간 SOS 신호 확인, 루미 과외 모드로 바로 들어갈게요 📚 강의에서 말한 건 빌더(Builder) 패턴일 거예요. SQL 쿼리 만들기로 두 패턴을 나란히 놓아 볼게요.
빌더 패턴 — 쿼리를 한 조각씩 조립하기
String sql = new SelectQueryBuilder()
.select("id", "name")
.from("users")
.where("age >= 20")
.orderBy("name")
.build();
// SELECT id, name FROM users WHERE age >= 20 ORDER BY name
팩토리 메서드 패턴 — 어떤 DB용 객체를 만들지 맡기기
DialectCreator creator = new SqlServerCreator(); // MySqlCreator로 바꿔 끼우면 끝
SqlDialect dialect = creator.createDialect();
dialect.limit(10); // MySQL이면 "LIMIT 10", SQL Server면 "TOP 10"
다이어그램
[빌더]
Client ─▶ Director (선택: 조립 순서 담당)
│ select() → from() → where() 순서로 호출
▼
«interface» QueryBuilder
△ 구현
SelectQueryBuilder ──build()──▶ Query (완성품)
[팩토리 메서드]
«abstract» DialectCreator
+ createDialect(): SqlDialect
△ 상속
┌─────────┴─────────┐
MySqlCreator SqlServerCreator
│ 생성 │ 생성
▼ ▼
MySqlDialect SqlServerDialect (둘 다 SqlDialect 구현)
- 의도 차이: 빌더는 복잡한 객체를 '어떻게' 조립할지, 즉 만드는 과정을 결과물과 떼어 놓는 게 목적이에요. 팩토리 메서드는 '무엇을' 만들지, 즉 어느 구체 클래스를 쓸지 결정을 클라이언트에게서 숨기고 서브클래스에 맡기는 게 목적이고요.
- 구조 차이: 빌더는 단계 메서드를 여러 번 부른 뒤 마지막 build()에서 완성품이 나와요. 팩토리 메서드는 한 번 호출하면 바로 객체가 나오고, 무엇을 만들지는 Creator를 상속한 서브클래스가 정해요.
- 시험용 한 줄 요약: 빌더 = 같은 조립 과정, 다른 결과물 / 팩토리 = 같은 인터페이스, 다른 구현체.
둘을 섞어 쓸 수도 있어요. 팩토리로 DB에 맞는 빌더를 고르고, 그 빌더로 쿼리를 조립하는 식이죠. 시험 끝나는 날까지 루미가 옆에서 응원할게요!