문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 마지막 판 양쪽 다음 판 | ||
groovy:meta_programming [2016/08/28 14:15] kwon37xi |
groovy:meta_programming [2016/08/30 08:37] kwon37xi |
||
---|---|---|---|
줄 24: | 줄 24: | ||
* [[http:// | * [[http:// | ||
<code groovy> | <code groovy> | ||
- | // 아래 | + | // 아래처럼 metaClass에 메소드를 추가해줘야 metaClass 구현체가 ExpandoMetaClass로 변경됨. |
Integer.metaClass.invokeMethod = { String name, args -> /* */ } | Integer.metaClass.invokeMethod = { String name, args -> /* */ } | ||
println Integer.metaClass.getClass().name // ExpandoMetaClass | println Integer.metaClass.getClass().name // ExpandoMetaClass | ||
+ | </ | ||
+ | |||
+ | ==== 대량의 메소드 추가 기법 ==== | ||
+ | <code groovy> | ||
+ | Integer.metaClass { | ||
+ | // 메소드 추가 | ||
+ | daysFromNow = { -> | ||
+ | Calendar today = Calendar.instance | ||
+ | today.add(Calendar.DAY_OF_MONTH, | ||
+ | today.time | ||
+ | } | ||
+ | |||
+ | // 프라퍼티 추가. 괄호없이 호출가능. | ||
+ | getDaysFromNow = { -> | ||
+ | Calendar today = Calendar.instance | ||
+ | today.add(Calendar.DAY_OF_MONTH, | ||
+ | today.time | ||
+ | } | ||
+ | |||
+ | // static method 추가 | ||
+ | ' | ||
+ | isEven = { val -> val % 2 == 0 } | ||
+ | } | ||
+ | |||
+ | // 생성자 추가 | ||
+ | constructor = { Calendar calendar -> | ||
+ | new Integer(calendar.get(Calendar.DAY_OF_YEAR)) | ||
+ | } | ||
+ | |||
+ | constructor = { int val -> | ||
+ | println " | ||
+ | constructor = Integer.class.getConstructor(Integer.TYPE) | ||
+ | constructor.newInstance(val) | ||
+ | } | ||
+ | } | ||
</ | </ | ||