티스토리 뷰
반응형
중복 코드를 제거하고 API 처리와 컨트롤러의 결합을 제거하기 위해 사용합니다.
Interface인 Service를 만들고 Service를 상속받는 Component를 만들고 사용하면 됩니다.
서비스 인터페이스
interface CustomerService {
fun getCustomer(id: Int): Customer?
fun createCustomer(customer: Customer)
fun deleteCustomer(id: Int)
fun updateCustomer(id: Int, customer: Customer)
fun searchCustomer(nameFilter: String): List<Customer>
}
RESTful API에서 동작할 작업들을 담은 interface를 만들었습니다.
구현 생성
@Component
class CustomerServiceImpl : CustomerService {
companion object {
val initialCustomers = arrayOf(
Customer(1, "Hello"),
Customer(2, "Kotlin", Telephone("+82", "56453423")),
Customer(3, "Spring"))
}
private val customers = ConcurrentHashMap<Int, Customer>(initialCustomers.associateBy(Customer::id))
override fun getCustomer(id: Int): Customer? = customers[id]
override fun createCustomer(customer: Customer) { customers[customer.id] = customer }
override fun deleteCustomer(id: Int) { customers.remove(id) }
override fun updateCustomer(id: Int, customer: Customer) {
deleteCustomer(id)
customers[id] = customer
}
override fun searchCustomer(nameFilter: String): List<Customer> =
customers.filter {
it.value.name.contains(nameFilter, true)
}.map(Map.Entry<Int, Customer>::value).toList()
}
CustomerServiceImpl이라는 클래스를 만들고 Service를 상속받았습니다.
그리고 함수들을 오버라이드 해주고 구현하였습니다.
initialCustomers라고 기본 값을 생성하고 customers에 지정해주었습니다.
@Component 어노테이션을 붙여서 CustomerServiceImpl를 컴포넌트로 만들어 줍니다. ( 나중에 빈 구현할 때 주입이 됩니다. )
서비스 사용
@RestController
class CustomerController {
@Autowired
private lateinit var customerService : CustomerService
@GetMapping(value = ["/customers"])
fun getCustomers(@RequestParam(required = false, defaultValue = "") nameFilter: String) = customerService.searchCustomer(nameFilter)
...
}
변수에 서비스를 넣고 @Autowired 어노테이션을 붙여줍니다.
컴포넌트 스캔이 CustomerServiceImpl를 해당 인터페이스에 주입합니다.
customerService를 통해 구현한 함수들을 사용하면 됩니다.
반응형
'알려주는 이야기 > 스프링 부트' 카테고리의 다른 글
Spring Boot - JSON에서 Null 처리 (0) | 2020.09.08 |
---|---|
Spring Boot - Http 상태 처리 (0) | 2020.09.08 |
@PathVariable, @RequestParam (0) | 2020.09.08 |
@RestController (0) | 2020.09.08 |
코틀린을 사용한 스프링부트로 Rest Api 만들기 - 2 (0) | 2020.06.19 |
댓글