자바 = 객체지향언어스프링 = 좋은 객체 지향 app을 개발할 수 있게 도와주는 프레임 워크즉, EJB를 쓸때는 EJB에 의존적으로 코드를 짜야 했기 때문에객체의 많은 장점을 사용할 수 없었다.
객체 지향 프로그램? 객체 지향 프로그램의 궁극의 핵심 = 다형성 다형성? 자동차의 역할 = 인터페이스 운전자는 운전면허만 있으면 어떤 자동차든 운전할 수 있다. 운전자는 k3가 어떻게 작동하는지, 테슬라가 어떻게 작동하는지는 중요하지 않다. 운전자는 그 자동차가
한 클래스는 하나의 책임만 가져야한다.책임이라는 것을 어떻게 판단?=> 중요한 기준은 변경이다.변경이 있을 때 파급이 적으면 단일 책임 원칙을 잘 따른 것✨가장 중요!!!!!!!!!!!!!!!!!!!!확장에는 열려있어야 하고, 변경에는 닫혀 있어야 한다.=> 다형성을
OCP DIP 를 지키면서 java 코드를 짜면,결국 Spring framework 가 만들어 진다모든 설계에 역할, 구현을 분리인터페이스를 도입 ==> 추상화라는 비용이 발생(코드가 길어짐, 코드를 보면 인터페이스만 보임)즉, 확장 가능성이 없어 보이면 그냥 구현 클
위 코드는 DIP를 위반하고 있다.해결책은 OrderServiceImpl가 interface만 의존하도록 바꿔야한다.그러나 OrderServicImpl이 interface만 의존한다면 Null을 가리키는 오류가 발생한다. 어떻게 해야할까?예를 들어 로미오와 줄리엣 연극
프레임워크가 내가 작성한 코드를 제어하고, 대신 실행하면 프레임워크다. (JUnit)내가 작성한 코드가 직접 제어의 흐름을 담당한다면 그것은 프레임워크가 아니라 라이브러리다.프로그램의 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것: 정적인 클래스 의존 관계와,
ApplicationContext를 스프링 컨테이너라 한다.ApplicationContext는 인터페이스이다. = 다형성이 적용되어 있다.AnnotationConfigApplicationContext는 ApplicationContext 인터페이스의 구현체이다.컨테이너
스프링 컨테이너의 최상위 인터페이스스프링 빈을 관리하고 조회하는 역할을 담당한다.getBean() 을 제공한다.빈을 관리하고, 조회하는 모든 기능들은 BeanFactory가 제공한다.BeanFactory 기능을 모두 상속받아서 제공한다.빈을 관리하고 검색하는 기능을 B
객체 인스턴스를 한정되게 생성하도록하여 불필요한 자원의 소모를 막는다.싱글톤 패턴은 인스턴스가 한개만 생성되도록 하는 설계 패턴코드 자체가 많아진다.의존관계상 클라이언트가 구체 클래스에 의존한다. DIP위반(getInstance())구체 클래스에 의존하기 때문에 OCP
@ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다기본 이름은 클래스명에서 앞글자만 소문자로 바꿔 사용한다.의존관계 자동 주입빈 저장소에서 타입이 같은 빈을 찾아서 주입 => 타입이 같은게 있으면?getBean(xxx.class
생성자를 통해서 의존 관계를 주입생성자 호출시점에 딱 1번만 호출되는 것이 보장불변, 필수(값이 무조건 필요) 의존관계에 사용⚠생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입선택, 변경 가능
데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 초기화 작업과 종료 작업이 어떻게 진행되는지 알아보자!스프링 컨테이너 생성 => 스프링 빈 생성 => 의존관계 주입 => 초기화 콜백 => 사용 => 소멸전 콜백 => 스프링 종료초기화 콜백: 빈을 생성, 빈의 의존관계 주
빈이 존재할 수 있는 범위를 말한다.기본 스코프, 컨테이너의 시작과 종료까지 유지되는 스코프1) 클라이언트의 요청2) 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 하고 클라이언트에게 반환.(유지 x)3) 클라이언트가 또 요청한다면, 새로 생성해서 의존관