목록전체 글 (167)
Hyunebee
다양한 의존 관계 주입방법 1. 생성자 주입 생성자 호출시점에 딱 1번만 호출되는것을 보장한다. 불변 필수 의존관계에 사용한다. 2. 세터주입 변경, 선택 가능성이 있는 의존 관계에 사용 3. 필드주입 사용하지 말자(테스트가 어렵고, DI프레임워크가 없다면 사용할 수 도 없다.) 4. 메서드 주입 한번에 여러 필드를 주입 받을 수 있다. 빈 우선 순위 결정 @Qualifier -> @Qualifier("mainDiscountPolicy") -> public DiscountPolicy setDiscountPolicy(@Qualifier("mainDiscountPolicy") 이렇게 서로 매칭 시켜서 사용한다. 만약 해당 빈이름이 없다면 오류 발생 @Primary 해당 어노테이션이 붙어있는것이 우선순위를 가..
@CompoenetScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다. 이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다. @Autowired 의존관계 자동주입 생성자에 @Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입한다. 이때 기본 조회 전략은 타입이 같은 빈을 찾아서 주입한다. 이렇게 자동으로 의존관계를 주입하다보면 같은 빈 이름을 등록하면 어떻게 될까? 1.자동 빈 등록 vs 자동 빈 등록 컴포넌트 스캔에 의해 자동으로 스프링 빈이 등록되는데, 그 이름이 같은 경우 스프링은 오류를 발생시킨다. ConflictingBeanDefinitionException 예외 발생 2.자동 빈 등록 vs 수동 빈 등록 이..
웹 애플리케이션과 싱글톤 이렇게 사용할시 사용자가 호출할 때마다 객체가 생성된다. -> 메모리 낭비 이렇게 사용함으로써 동일한 객체에만 접근할 수 있도록 설계를 해줄 수 있다. --> 스프링이 제공을 해준다. 싱글톤 패턴 문제점 1. 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 2. 의존관계상 클라이언트가 구체 클래스에 의존한다. 3. DIP를 위반한다. 4. 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다. 5. 테스트하기 어렵다. 6. 내부 속성을 변경하거나 초기화 하기 어렵다. 7. private 생성자로 자식 클래스를 만들기 어렵다. 8. 결론적으로 유연성이 떨어진다. 하지만 스프링은 이러한 단점을 해결해준다. 스프링 싱글톤 방식의 주의점 싱글톤 방식은 여러 클라이언..
스프링 컨테이너는 @Configuration붙은 것은 구성 정보로 사용한다. @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. @Bean에 적힌 메서드의 명으로 컨테이너에 등록한다. 등록된 빈은 applicationContext.getBean()으로 찾아서 사용할 수 있다. ApplicationContext는 인터페이스 이며 보통 스프링 컨테이너라고 한다. 우리는 new 키워드를 사용해서 AppConfig.class를 구성정보로 지정해서 사용한다. Spring Container에서 생성된 빈들은 서로의 의존관계를 설정한다. 스프링 빈 조회 - 기본 getBean(빈이름, 타입) getBean(타입) if 조회 대상이 빈에 없으면 예외(NoSuchBeanDefinitio..
새로운 할인 정책 이 코드는 문제점이있다. 다형성도 활용하고 인터페이스와 구현을 분리했다. 하지만 OrderServiceImpl은 DiscountPolicy와 구현체인 FixDiscountPolicy,RateDiscountPolicy에도 의존하고 있다. -> DIP위반 또한 기능을 확장해서 변경하면 클라이언트의 코드가 변경된다. -> OCP위반 이렇게 사용할 경우 구연체가 없어서 오류가 발생하게 된다. 관심사를 분리하자 구현 객체를 생성하고 연결하는 책임을 가지는 별도의 클래스를 만들어서 사용하자 이것이 AppConfig이다. 이런식으로 생성자를 주입해준다. 그러면 생성자가 생성되는 시점에 기능이 주입되게 된다. 그렇게 된다면 AppConfig만의 변경으로 기존코드의 변경없이 기능을 확장시킬 수 있다. ..
비즈니스 요구 사항과 설계 회원 도메인 설계 1.회원 도메인 요구사항 회원을 가입하고 조회할 수 있다. 2.회원은 일반과 VIP 두 가지 등급이 있다. 3.회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) MemberRepository -> 역할 MemoryMemberRepository, DbMemberRepository ->MemberRepository의 실체화 (구현체) MemberServiceImp은 MemberRepository와 직접연관 클라이언트는 서비스를 서비스는 메모리 저장소와 연관되어 있다. 주문 도메인 설계 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%..
스프링의 진짜 핵심은?? 1. 스프링은 자바 언어 기반의 프레임워크이다. 2.자바 언어의 가장 큰 특징 - 객체 지향 언어이다. 3.스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다. 객체 지향 프로그래밍이란?? 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립적인 단위 객체들의 모임으로 파악하고자 하는 것이다. -> 이렇게 개발을 하면 프로그램을 유연하고 변경이 용이하게 만들 수 있게 된다. 객체 지향의 특징 1. 캡슐화 2. 추상화 3. 상속 4. 다형성 -> 스프링에서 중요 다형성 스프링에서 다형성 역할과 구현으로 세상을 구분한다. --> 역할(interfacae) 구현(object , class) 역할과 구현을 분리하면 좋은점 1. 사용자는 대상의 역할만 ..