...
- 코틀린에서는 함수에서 추출한 함수를 원 함수 내부에 중첩시킬 수 있다. 이를 로컬 함수라 한다.
아래 코드는 반복되는 검증 코드를 로컬 함수로 분리하는 예시다.
코드 블럭 language java theme Eclipse title before linenumbers true fun saveUser(user: User) { if (user.name.isEmpty()) { throw IllegalArgumentException("Can't save user ${user.id}: empty name") } if (user.address.isEmpty()) { throw IllegalArgumentException("Can't save user ${user.id}: empty address") } // db에 저장 }
코드 블럭 language java theme Eclipse title after linenumbers true fun saveUser(user: User) { fun validate(value: String, fieldName: String) { if (value.isEmpty()) { throw IllegalArgumentException("Can't save user ${user.id}: empty $fieldName") } } validate(user.name, "name") validate(user.address, "address") // db에 저장 }
컴파일될 땐 중첩된 내부 클래스가 static으로 선언된다
코드 블럭 language java theme Eclipse linenumbers true fun out() { fun inner() { println("inner") } inner() }
코드 블럭 language java theme Eclipse title 컴파일 linenumbers true public final class Test { public final void out() { out$inner(); out$inner(); } private static final void out$inner() { String var0 = "inner"; boolean var1 = false; System.out.println(var0); } }