회원 도메인 과 Repository Interface, 구체 Repository구현

Member.kt

package com.study.springstudy.domain

data class Member (var id: Long, var name: String){}

MemberRepository.kt

package com.study.springstudy.repository

import com.study.springstudy.domain.Member
import java.util.*

interface  MemberRepository {
    fun save(member: Member): Member;
    fun findById(id: Long): Member?;
    fun findByName(name: String):List<Member>;
    fun findAll(): List<Member>;
}

MemoryMemberRepository.kt

package com.study.springstudy.repository

import com.study.springstudy.domain.Member
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashMap

class MemoryMemberRepository: MemberRepository {
		/**
     * 실무에서는 동시성 문제로 공유자원 문제로
     * ConcurrentHashMap, AtomicLong 을 써줘야함
     * */
		val store = HashMap<Long, Member>();
    var sequence:Long = 0L;

    override fun save(member: Member): Member {
        member.id = ++sequence
        store.put(member.id, member)
        return member;
    }

    override fun findAll(): List<Member> {
        return ArrayList(store.values)
    }

    override fun findById(id: Long): Member? {
        return store.get(id)
    }

    override fun findByName(name: String): List<Member> {
        return ArrayList(store.filterValues{ it.name == name}.values)
    }
}