반응형 분류 전체보기179 Bean 자동 주입 VS 수동 주입 어떤 걸 사용해야할까? 🌱 기본적으로 자동 주입을 사용하자! 결론적으로 스프링이 출시한 후 점점 자동 주입을 선호하는 추세입니다. 스프링은 @Component 뿐만 아니라 @Controller , @Service , @Repository 처럼 계층에 맞추어 일반적인 애플리케이션 로직을 자동으로 스캔할 수 있도록 지원해줍니다. 설정 정보를 기반으로 애플케이션을 구성하는 부분과 실제 동작하는 부분을 명확하게 나누는 것이 이상적이지만, 개발자 입장에서 스프링 빈을 하나를 등록해봅시다. @Component 만 넣어주면 끝(자동 주입) @Configuration 설정 정보에 가서 @Bean을 적고 -> 객체를 생성하고 -> 주입할 대상을 일일이 적어주는 과정은 상당히 번거롭습니다.(수동 주입) 또한, 관리할 빈이 많아서 설정 정보가 커지면.. 2022. 1. 20. UnsatisfiedDependencyException 오류 해결! 😂 인프런 강의를 듣는 도 중 테스트 코드를 작성하고 테스트를 돌리자마자 이러한 에러를 발생했습니다. ㅠㅠ 한 시간 동안 삽질을 해보면서 깨달음을 얻었습니다. 저 상황은 빈을 생성할 시 해당 빈이 충돌 난 것입니다. 예를 들어, class ratediscount(퍼센트 할인)와 class fixdiscount(고정 할인)이 discount(interface)를 implements하고 있습니다. 여기서 spring bean 의존관계 주입 시 discount 인터페이스만 의존하게 구현한다면, 서비스는 discount가 실질적으로 ratediscount인지, fixdiscount인지 알 수 없습니다. 이 상황에서 ratediscount과 fixdiscount 둘 다 @bean을 적용시킨다면, 스프링은 bean 생.. 2022. 1. 19. 의존관계 주입시 생성자 주입을 사용하자! 😲 스프링에서 의존관계를 주입 시 4가지의 방법으로 나누어집니다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 말그대로 생성자를 통해서 의존성을 주입하는 것입니다. 생성자 주입의 특징으로는 생성자 호출 시점에 딱 한 번만 실행한다는 점입니다. 불변성과 필수 의존관계에 사용됩니다. 생성자 주입 시 메서드에 생성자가 한개만 있을 경우 @Autowired를 생략해도 됩니다. (물론, 스프링 빈에만 해당) 수정자 주입(setter 주입) 흔히 알고 있는 setter에 의존성을 주입하는 것입니다. 특징으로는 선택, 변경 가능성 있는의존관계에 사용합니다. 자바 빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법입니다. 이 방법은 추천하지 않습니다. 그 이유는 메서드에 set.. 2022. 1. 17. 스프링에서 싱글톤 적용 시 주의 할 점! ⚠️ 스프링 컨테이너는 기본적으로 싱글톤을 제공합니다. 위의 사진을 보자면 스프링 DI 컨테이너에 memberSerivce의 bean이 등록되어있다고 가정하면 각 각 사용자의 요청마다 객체를 생성하는 것이 아닌 객체 인스턴스를 하나만 생성하여 공유합니다. 메모리 낭비도 없고 효율적으로 재활용할 수 있습니다. 이때 주의해야 할 점이 있습니다. 스프링 컨테이너에 등록된 bean은 무상태(stateless)를 유지 해야합니다. 이 부분이 정말 정말 중요합니다. 말 그대로 객체는 상태를 가지고 있으면 안 됩니다. public class menuService { private String menuName; public void order(String menuName){ System.out.println("주문한 메뉴 .. 2022. 1. 15. BeanFactory과 ApplicationContext는 왜 사용해야할까? 일단 BeanFactory가 무엇인지 간략하게 설명해보겠습니다. BeanFactory은 스프링 컨테이너의 최상위 인터페이스입니다. 또한, 스프링 빈을 관리하고 조회하는 역할을 담당하며 getBean()을 제공합니다. https://docs.spring.io/spring-framework/docs/1.2.9/reference/beans.html Chapter 3. Beans, BeanFactory and the ApplicationContext Two of the most fundamental and important packages in Spring are the org.springframework.beans and org.springframework.context packages. Code in the.. 2022. 1. 12. Spring Bean 상속관계와 테스트코드[Juint5] "모든 자바 객체 최상위 부모는 Object입니다." 일반적으로 흔히 사용하고 있는 자바 클래스들은 최상위 부모가 Object입니다. public class ApplicationNameConfig extends Object { ... } 이런 식으로 extends Object가 생략되어 있습니다. 위의 그림 같이 상속관계를 맺고 있다고 생각하면, Spring Bean을 부모 타입으로 조회 시 자식 타입까지 다 조회됩니다. 관계도에서 1번의 Bean을 조회할 경우 1,2,3,4,5,6,7까지 모두 조회가 가능합니다. 이번에는 간단한 예제를 보면서 확인해보겠습니다. @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscoun.. 2022. 1. 10. Spring 컨테이너에 등록된 bean 조회하기 테스트 코드[Juint5] 스프링 컨테이너란? 자바 객체의 생명주기를 관리해주며, 생성된 자바의 기능을 제공해줍니다. 여기서 말하는 자바의 객체는 Spring에서 Bean이라고 불립니다. 스프링 컨테이너는 DI(의존성 주입), IoC가 적용됩니다. 대부분 객체들은 new, 인터페이스 생성을 통해, 개발자가 직접 의존성을 주입해줍니다. 이 역할을 스프링 컨테이너에 위임하는 것입니다. 스프링 컨테이너를 생성하면 스프링 컨테이너 안에 스프링 빈 저장소가 생성됩니다. 여기에 빈의 이름과, 빈객체 정보를 저장합니다. 개발자는 스프링 컨테이너에서 적용된 빈을 꺼내 활용합니다. 크게 Bean 컨테이너는 스프링 자체적인 Bean과 사용자가 생성한 Bean을 가지고 있습니다. 둘 다 출력하는 방법과 사용자의 Bean만 출력하는 방법을 작성해보았습.. 2022. 1. 9. 2022년 목표 2021년도 목표를 세우고 거의 다 달성해서 나름 알찬 한 해를 보냈습니다. 2022년도의 목표를 적어보려고 합니다. 다독왕이 되어보자. (한 달에 한 권정도 개발 관련된 책을 읽어보자!) 책에서 배운 내용들을 실무로 적용해보려고 노력해보자. ex) 클린 코드, 리팩터링 코딩 테스트 문제를 꾸준히 풀어보자.(스터디) 퇴근하고 적어도 1 ~2시간 개인 공부에 투자하자. 사이드 프로젝트로 공부했던 것들을 응용해서 만들어보자. 건강에 투자하자. (운동, 바른 자세, 좋은 의자?) 영어공부를 틈틈이 하기! 재테크 공부하기(부동산, 국내 주식, 해외주식, NFT) 이번 연도 1500만 원 저축하기! (3월부터) 학습에 돈 아끼지 않기(책, 인강, 세미나) one day one commit! 열심히 목표를 위해 노.. 2022. 1. 1. [동시성 이슈해결] HashMap보다는 ConcurrentHashMap을 쓰자! 인프런 강의를 듣던 중 회원 도메인 설계를 하다가 동시성 이슈 때문에 HashMap보다는 ConcurrentHashMap을 사용한다라고 배웠습니다. 과연 두 개의 차이점은 어떤 점 있는지, 각 각의 장단점을 깊게 파보고 싶어서 정리해보았습니다. 출처: https://javaconceptoftheday.com/hashmap-vs-concurrenthashmap-in-java/ 해외 문서를 찾아보다가 잘 정리되어 있는 문서를 발견하고 정리해보았습니다. HashMap과 ConcurrentHashMap의 차이점 1) Thread Safe 주요 차이점은 ConcurrentHashMap는 내부적 동기화 때문에 스레드가 Safe합니다. HashMap는 내부적으로 동기화되지 않고 스레드로부터 안전하지 않습니다. Has.. 2022. 1. 1. 이전 1 ··· 4 5 6 7 8 9 10 ··· 20 다음 반응형