Java/Language
Java Method Chaining : '자바에서 메소드 이어서 쓰기' 랄까?
허니몬
2011. 7. 17. 00:45
Method chaining - Wikipidea : http://en.wikipedia.org/wiki/Method_chaining
자바 7에 추가될뻔한 기능이었다고 한다. ^^; 자바의 빈클래스에 막 길들어지기 시작한 내게는 조금 낯선 형태랄까?
setter 메소드에서 클래스(this)를 리턴해주는 형태니까...
Chaining.java
ChainingTest.java
이렇게 쓰는 것에 낯설기는 하지만... 익숙하게 사용했을때 어떤 장점이 있는지 확인해보고 익혀두는 것도 나쁘지 않겠다.
자바 7에 추가될뻔한 기능이었다고 한다. ^^; 자바의 빈클래스에 막 길들어지기 시작한 내게는 조금 낯선 형태랄까?
setter 메소드에서 클래스(this)를 리턴해주는 형태니까...
Chaining.java
public class DateChaining { private String year; private String month; private String day; public String getMonth() { return month; } public DateChaining setMonth(String month) { this.month = month; return this; } public String getDay() { return day; } public DateChaining setDay(String day) { this.day = day; return this; } public String getYear() { return year; } public DateChaining setYear(String year) { this.year = year; return this; } @Override public String toString() { return "DateChaining [year=" + year + ", month=" + month + ", day=" + day + "]"; } }
ChainingTest.java
package test; import main.DateChaining; import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; import org.junit.Test; public class ChainingTest { @Test public void 체이닝_테스트() { //given DateChaining chain = new DateChaining(); //when chain.setYear("2011").setMonth("07").setDay("17"); //then assertThat(chain.getYear(), is("2011")); assertThat(chain.getMonth(), is("07")); assertThat(chain.getDay(), is("17")); } @Test public void 순서흐트러진_체이닝_테스트() { //given DateChaining chain = new DateChaining(); //when chain.setMonth("07").setDay("17").setYear("2011"); //then assertThat(chain.getYear(), is("2011")); assertThat(chain.getMonth(), is("07")); assertThat(chain.getDay(), is("17")); } @Test public void 중복된_필드에대한_세트선언시() { //given DateChaining chain = new DateChaining(); //when // chain.setYear("2011").setMonth("07").setDay("17").setYear("2012"); //then assertNotSame(chain.getYear(), is("2011")); assertThat(chain.getMonth(), is("07")); assertThat(chain.getDay(), is("17")); } }