문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 마지막 판 양쪽 다음 판 | ||
groovy:meta_programming [2016/08/28 14:16] kwon37xi [ExpandoMetaClass] |
groovy:meta_programming [2016/08/30 08:37] kwon37xi |
||
---|---|---|---|
줄 27: | 줄 27: | ||
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) | ||
+ | } | ||
+ | } | ||
</ | </ | ||