• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

질문 2가지 드립니다.

24.01.12 16:30 작성 24.01.12 16:47 수정 조회수 163

0

첫번째 질문입니다.

SecurityResourceService클래스에서 ResourcesRepository를 주입받기위한 방법은 3가지가 있는것으로 알고있습니다.

첫째, 생성자 주입

둘째, @Autowired주입

셋째, setter주입

여기서 왜 setter주입방식을 사용하였는지 궁금합니다. setter주입방식은 찾아보니 별로 안좋다는 말이 있어서 질문드려보았습니다.

이 주입방식을 생성자 주입방식 혹은 @Autowired로 변경하여도 상관없는거죠??

 

두번째 질문입니다.

SecurityResourceService클래스에서 getResourceList()에서 이렇게 수정 되어야 하지 않나요?? 왜냐하면 configAttributeList에 권한 정보를 다 넣고 나서 result변수에 키 값인 자원과 value인 configAttributeList가 들어가야 할 것 같아서요. 강의 대로라면 1가지 자원에 여러가지 권한이 들어갈 수 있지만, 강의에서 나오는 코드 대로라면 1가지 자원에 1가지 권한밖에 들어가지 않을 것 같아서 질문드려보았습니다.

답변 2

·

답변을 작성해보세요.

0

1번은 어떤 식으로 해도 상관없습니다

편하신대로 하시면 됩니다

2번은 바로 위의 질문에서 답변해 드렸으니 참고 부탁드립니다

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.12

안녕하세요, 인프런 AI 인턴입니다.

DI(Dependency Injection)에 대한 질문을 주셨네요, 김은재 님.
Spring에서 빈을 주입하는 방법은 여러 가지가 있으며, 질문하신 세 가지 방법 모두 Spring에서 흔히 사용하는 방법입니다.
@Autowired 주입은 필드 주입(field injection)이라 불리며, 이 방법은 자동으로 의존성을 주입해주므로 코드가 간결해질 수 있는 장점이 있지만, 테스트가 어렵고 순환 참조(circular dependency) 발생 시 문제를 파악하기 어렵다는 단점이 있습니다. 이 방법은 스프링이 필드에 바로 접근해 값을 할당하기 때문에, 해당 필드에 final을 붙일 수 없어 변경 불가능성(immutable)을 보장하지 못합니다.

생성자 주입(constructor injection)은 Spring 4.3 이후 버전부터는 생성자가 단 하나이고, 생성자 파라미터가 빈으로 등록되어 있다면 @Autowired 없이도 자동으로 의존성을 주입합니다. 생성자 주입은 의존 관계가 불변하며, 생성 시점에 의존성을 주입 받기 때문에 불완전한 상태로 빈이 생성될 여지가 없어 안전합니다. 또한, 순환 참조 문제를 컴파일 시점에 발견할 수 있다는 장점이 있습니다.

setter 주입(Setter Injection)은 setter 메소드를 통해 의존성을 주입하는 방법이며, 주로 선택적인 의존성이 있을 때 사용됩니다. 이 방법은 객체가 완전히 생성된 이후에 의존성을 주입할 수 있는 유연성을 제공하지만, 생성자 주입과 비교했을 때 객체가 변경될 수 있다는 단점이 있습니다.

구체적으로 질문 주신 내용에 대해서는 아래 질문에 달린 기존 강사님의 답변에서 확인할 수 있습니다.

본인의 상황에 맞게 주입 방식을 선택하는 것이 중요합니다. 개인적으로 불변성을 보장하고 순환 참조 등의 문제를 방지하기 위해 Spring에서는 생성자 주입을 권장하고 있습니다. 변경을 원하실 경우 안정적으로 작동하는지 충분히 테스트한 후에 적용하는 것이 좋습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.