Development/Java

java - 메서드 체인닝(Method chaining)

linuxism 2012. 10. 8. 14:09


Method chaining - Wikipidea : http://en.wikipedia.org/wiki/Method_chaining

자바 7에 추가될뻔한 기능이었다고 한다. ^^; 자바의 빈클래스에 막 길들어지기 시작한 내게는 조금 낯선 형태랄까?
setter 메소드에서 클래스(this)를 리턴해주는 형태니까...

Chaining.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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"));
    }
}
이렇게 쓰는 것에 낯설기는 하지만... 익숙하게 사용했을때 어떤 장점이 있는지 확인해보고 익혀두는 것도 나쁘지 않겠다.


출처 - http://java.ihoney.pe.kr/175