참조 : http://www.martinfowler.com/bliki/FluentInterface.html
번역 : http://younghoe.info/1

오늘 OpenSeed 스터디를 통해서 알게 된 단어이자 어떻게 해석해야 할지 막막한 ‘흐르는 듯한 인터페이스’라고 하면 어울리려나..

code를 보시면 감이 팍 올 것 같습니다.

before

private void makeNormal(Customer customer) {
Order o1 = new Order();
customer.addOrder(o1);
OrderLine line1 = new OrderLine(6, Product.find("TAL"));
o1.addLine(line1);
OrderLine line2 = new OrderLine(5, Product.find("HPK"));
o1.addLine(line2);
OrderLine line3 = new OrderLine(3, Product.find("LGV"));
o1.addLine(line3);
line2.setSkippable(true);
o1.setRush(true);
}

after

   private void makeFluent(Customer customer) {
customer.newOrder()
.with(6, "TAL")
.with(5, "HPK").skippable()
.with(3, "LGV")
.priorityRush();
}

멋지지 않나요? DSL(Domain Specific Language)과도 관계가 있고 Value Object 이야기가 나오는걸 보니 DDD(Domain Driven Design)와도 관계가 있는 글 같습니다.

가독성 좋고, 코드 길이가 짧아져서 좋은 것 같습니다. 본문에 단점이라고 꼽은 것으로는 메소드 그 자체만 보면 의아해 할 수도 있다는 내용이 있었습니다. setter에 리턴타입이 표기 되기 때문에 그럴 수 있지요. 따라서 “연속되는 행위”에 활용이 되면 좋겠다는 내용이 있습니다.

Anyway 멋지네요.