[Kotlin] 후행 람다(Trailing Lambda)

호호빵·2026년 1월 6일

후행 람다 (Trailing Lambda)

  • 함수의 마지막 인자가 함수(람다)인 경우, 소괄호 밖으로 뺄 수 있다라는 규칙이 있음
    • 규칙 1: 마지막 인자가 함수면 ) 뒤에 { }를 붙여서 쓸 수 있음.
    • 규칙 2: 인자가 두 개 이상일 때, 마지막 람다만 밖으로 나감.
     이 문법을 사용하면 마치 새로운 예약어(Keyword)를 만든 것처럼 코드를 읽을 수 있음.
		if (condition) { ... }

		for (item in list) { ... }

		executeWithLock(lock) { ... } <- **"이 락을 가지고 이 로직을 실행해!"**라고 훨씬 직관적으로 읽힘
  • 예)
fun executeWithLock(lockProp: RedisKeyProperties.Lock,
                        exec: () -> Unit) {
      val lock:RLock = redissonClient.getLock(lockProp.key)
      val timeUnit = TimeUnit.MILLISECONDS

      val waitTime = timeUnit.convert(lockProp.waitTime.value, lockProp.waitTime.timeUnit)
      val leaseTime = timeUnit.convert(lockProp.leaseTime.value, lockProp.leaseTime.timeUnit)

      if (lock.tryLock(waitTime, leaseTime, timeUnit)) {
          try {
              logger.info("${lockProp.key} is locked")
              exec()
          } finally {
              lock.unlock()
              logger.info("${lockProp.key} is released")
          }
      } else {
          logger.info("${lockProp.key} can not get lock")
      }
  }
    
    
    
// 실행하려는 곳에서 (Trailing Lambda 사용)
executeWithLock(redisKeyProperties.segmentMappingLock) {
	metaMappingService.deleteMapping(request)
    executed = true
}
        
// 이 전체가 하나의 'exec' 함수가 됨
{
    metaMappingService.deleteMapping(request) // 첫 번째 실행문
    executed = true                           // 두 번째 실행문 (외부의 변수까지 변경가능)
}

profile
하루에 한 개념씩

0개의 댓글