전체 글

단계별로 성장하자!
1. Bean scope란? 빈이 존재할 수 있는 범위를 뜻한다. 스프링 빈은 기본적으로 싱글톤 scope로 생성된다. 2. 스프링이 지원하는 스코프 종류 (1) 싱글톤: 기본 스코프이며, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 scope (2) 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더이상 관리하지 않는 짧은 범위의 scope (3) 웹 싱글톤 스코프를 제외한 스코프는 진짜 필요한 곳에서만 사용해야 유지보수가 편하다 라는 말을 시작으로 한번 정리해보자! 3-1. Prototype Scope 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다. 클라이언트가 prototype scope의 빈을 요청하면 그때서..
4가지 방법이 존재한다. 1. 생성자 주입 2. setter 주입 3. 필드 주입 4. 일반 메서드 주입 1. 생성자 주입 생성자를 통해서 의존관계를 주입 받는 방법이다. 생성자 호출시점에 1번만 호출되는 것이 보장되므로 주로 불변이나 필수 의존관계에 사용한다. 의존관계를 public set메서드를 통해서 수정 하지 못하게 할때 사용한다. 생성자가 1개일때는 @Autowired를 붙여주지 않아도 된다. 컴포넌트 스캔이 될 때 Spring Bean을 등록하기위해 new로 객체를 생성하면서 같이 생성자가 호출되어 주입된다. final 키워드를 사용할 수 있어서 생성자에서 값이 설정되지 않는 오류를 컴파일 시점에 막아준다. @Component public class OrderServiceImpl impleme..
IOC(Inversion Of Control) 기존 프로그램은 클라이언트 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 즉, 스스로 필요한 서버 구현 객체를 생성, 연결, 실행했다는 말이다. 하지만, 제어 흐름에 대한 권한을 외부 다른 곳에서 소유하고 있어 외부에서 제어 흐름을 관리해주는 것을 IOC 제어의 역전이라고 한다. 이 개념은 프레임워크와 라이브러리를 구분할 때 적용할 수 있는데 작성한 코드를 외부에서 제어를 해주고 대신 실행하면 프레임워크 작성한 코드를 내가 직접 제어의 흐름을 담당하면 라이브러리 DI(Dependency Injection) 다형성 개념을 이용해서 한 Service 객체가 한 인터페이스에 의존하고 있을 때 Service 클래스 내에서 인터페이스의 구현체를 지정해준다면 나..
2022.06.29 1. Spring의 탄생 자바 진영에 EJB(Enterprise Java Beans)라는 기술이 있었다. 지금으로 따지면 Spring + Jpa를 다 합쳐 놓은 기술. 컨테이너, 분산 등의 기술이 획기적이었는데 가격이 수천만원으로 비쌌다.. 이론적으로는 좋은데 EJB에 의존적으로 코드를 작성해야 하기 때문에 복잡하고 느린데다가 비싸기까지 하니 개발자들이 많이 힘들었다고 한다. 이렇게 되니 다시 오래된 방식의 간단한 자바로 돌아가자 해서 나온 용어가 POJO(Plain Old Java Object)다. 그래서 개발자들이 직접 스프링, hibernate등의 오픈 소스를 만들게 되었다. 스프링은 EJB 컨테이너를 대체하고 단순하였다. Hibernate는 EJB의 엔티티빈 기술을 대체하였고,..
2022.06.29 SOLID 원칙 좋은 객체 지향 설계의 5가지 원칙 SRP: 단일 책임 원칙(Single Responsibility principle) OCP: 개방-폐쇄 원칙(Open/closed principle) LSP: 리스코프 치환 원칙(Liskov Substitution principle) ISP: 인터페이스 분리 원칙(Interface Segregation principle) DIP: 의존관계 역전 원칙(Dependency Inversion Principle ) 1. SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가진다. 하나의 책임이라는 것은 문맥에 따라 다르며 클 수도 있고 작을 수도 있기에 모호하다. 변경이 중요한 기준이다. 변경이 있을 때 파급효과가 적다면 SRP를 잘 따른 것..
AOP(Aspect Oriented Programming) 1. AOP가 필요한 Example public Long join(Member member){ long start = System.currentTimeMillis(); try{ //같은 이름이 있는 중복 회원X 라고 가정 validateDuplicateMember(member); //중복 회원 검증 memberRepository.save(member); return member.getId(); }finally { long finish = System.currentTimeMillis(); long timeMs = finish - start; System.out.println("join = " + timeMs + "ms"); } } 만약 위와 같이 ..
DevPoong
Poong