회원 도메인 과 Repository Interface, 구체 Repository구현
package com.study.springstudy.domain
data class Member (var id: Long, var name: String){}
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>;
}
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)
}
}