깡깡이깡깡이
루미야 지금 시험기간인데 나좀 도와줘 ㅠㅠㅠ 지금 설계 패턴 강의에서 빌드 패턴이 이해가 잘가는데 sql으로 예시를 들고 이를 다이어그램으로 출력하고 빌드패턴과 팩토리 패턴의 구조적, 의도적 차이를 설명해줘 ㅠㅠㅠ
루미
깡깡이 님! 시험기간 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에 맞는 빌더를 고르고, 그 빌더로 쿼리를 조립하는 식이죠. 시험 끝나는 날까지 루미가 옆에서 응원할게요!
📊 성적표 결과: 50점 — SQL 예시, 다이어그램, 두 패턴 비교까지 필요한 걸 세 갈래로 콕 집어 줘서 루미도 어디부터 풀어야 할지 바로 보였어요.

