// java
public class TodoService {

    private final TodoRepository todoRepository;

    public TodoService(TodoRepository todoRepository) {
        this.todoRepository = todoRepository;
    }

// kotlin
class TodoService(
    private val todoRepository: TodoRepository,
) 
// java
@Transactional(readOnly = true)
    public Todo findById(Long id) {
        return todoRepository.findById(id)
            .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
    }

// kotlin
@Transactional(readOnly = true)
    fun findById(id: Long): Todo =
        todoRepository.findByIdOrNull(id) ?: throw ResponseStatusException(HttpStatus.NOT_FOUND)
// java
@Transactional
    public Todo update(Long id, TodoRequest request) {
        Assert.notNull(request, "TodoRequest is null");

        Todo todo = findById(id);
        todo.update(request.getTitle(),
                    request.getDescription(),
                    request.getDone());
        return todoRepository.save(todo);
    }

// kotlin
@Transactional
    fun update(id: Long, request: TodoRequest?): Todo {
        checkNotNull(request) { "TodoRequest is null" }

        return findById(id).let { // Todo or Throw => nullable X
            it.update(request.title, request.description, request.done)
            todoRepository.save(it)
        }
    }

⇒ model mapper같은 model과 dto을 매핑해주는 라이브러리를 사용할 필요없이 언어에서 기본제공해주는 기능을 쓰게된다.