반응형

프링 부트에서 의존성 주입(DI, Dependency Injection)은 주로 세 가지 방식으로 이루어집니다: 생성자 주입, 수정자 주입, 필드 주입. 각각의 방법에 대한 코틀린 예시를 제공하겠습니다.

 

1. 생성자 주입(Constructor Injection)

 

생성자 주입은 가장 권장되는 방법으로, 클래스의 의존성을 생성자를 통해 주입하는 방식입니다.

 

예시: 생성자 주입

package com.example.demo.service

import org.springframework.stereotype.Service

@Service
class GreetingService {
    fun greet(name: String): String {
        return "Hello, $name!"
    }
}

 

 
package com.example.demo.controller

import com.example.demo.service.GreetingService
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController

@RestController
class GreetingController(private val greetingService: GreetingService) {

    @GetMapping("/greet")
    fun greet(@RequestParam name: String): String {
        return greetingService.greet(name)
    }
}

2. 수정자 주입(Setter Injection)

 

수정자 주입은 의존성을 수정자 메서드(Setter)를 통해 주입하는 방식입니다.

package com.example.demo.controller

import com.example.demo.service.GreetingService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController

@RestController
class GreetingController {

    private lateinit var greetingService: GreetingService

    @Autowired
    fun setGreetingService(greetingService: GreetingService) {
        this.greetingService = greetingService
    }

    @GetMapping("/greet")
    fun greet(@RequestParam name: String): String {
        return greetingService.greet(name)
    }
}

여기서 GreetingController 클래스는 setGreetingService 메서드를 통해 GreetingService를 주입받습니다. 이 방법은 주입할 의존성이 선택적일 때 유용할 수 있습니다.

 

3. 필드 주입(Field Injection)

 

필드 주입은 의존성을 클래스의 필드에 직접 주입하는 방식입니다.

 

예시: 필드 주입

package com.example.demo.controller

import com.example.demo.service.GreetingService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController

@RestController
class GreetingController {

    @Autowired
    private lateinit var greetingService: GreetingService

    @GetMapping("/greet")
    fun greet(@RequestParam name: String): String {
        return greetingService.greet(name)
    }
}

정리

 

생성자 주입: 가장 권장되는 방법으로, 변경 불가능하고 테스트가 용이합니다.

수정자 주입: 선택적 의존성을 주입할 때 유용합니다.

필드 주입: 간단하지만, 테스트와 유지보수가 어렵고 권장되지 않습니다.

반응형

+ Recent posts