목록분류 전체보기 (309)
진취적 삶
DI 는 Dependency Injection 의 약자 의존 주입 한 클래가 다른 클래스의 메서드를 실행할 때 이를 ‘의존’한다고 표현한다. public class MemberRegisterService { private MemberDao memberDao = new MemberDao(); public void regist(RegisterRequest req) { Member member = memberDao.selectByEmail(req.getEmail()); } 현재 MemberRegisterService 클래스가 MemberDao클래스에 의존한다 고 표현할수 있다. 의존은 변경에 의해 영향을 받는 관계를 의미한다. 변경에 따른 영향이 전파되는 관계를 ‘의존’한다고 표현 의존하는 대상이 있으면 그 ..
public class MemberRegisterService { private MemberDao memberDao; public MemberRegisterService(MemberDao memberDao) { this.memberDao=memberDao; } public Long regist(RegistRequest req) { Member member =Member memberDao.selectByEmail(req.getEmail()); if(member!=null) { throw new DuplicateMemberException("dup email" + req.getEmail();) } Member newMember= new Member(req.getEmail(), req.getPassword()..
의존 객체를 직접 생성하는 방식은 필드나 생성자에서 new 연산자를 이용해서 객체를 생성한다. public MemberRegisterService( ) { private MemberDao memberDao = new MemberDao(); } 캐시 : 데이터 값을 복사해 놓는 임시 장소를 가리킨다 . 보통 조회 속도 향상을 위해 캐시를 사용한다. DB에 있는 데이터중 자주 조회하는 데이터를 메모리를 사용하는 캐시에 보관하면 조회 속도를 향상 시킬수 있다. public MemberRegisterService(MemberDao memberDao) { this.memberDao=memberDao; } 이런식으로 의존 객체를 주입받도록 구현 하는 경우 코드의 변경을 주일수 있다.
회원 데이터 관련 클래스 Member WrongPasswordException MemberDao 회원 처리 관련 클래스 DuplicateMemberException RegisterRequest MemberRegisterService 암호 변경 관련 클래스 MemberNotFoundException ChangePasswordService 3.4.1 회원 데이터 관련 클래스 package spring; import java.time.LocalDateTime; public class Member { private Long id; private String email; private String password; private String name; private LocalDateTime registerDate..
객체를 생성하고 의존 객체를 주입해주는 클래스를 따로 작성 의존 객체를 주입한다는 것은 서로 다른 두 객체를 조립한다고 생각할수 있는데 이런 의미에서 이 클래스를 조립기라고도 표현한다 . package assembler; import spring.ChangePasswordService; import spring.MemberDao; import spring.MemberRegisterService; public class Assembler { private MemberDao memberDao ; private MemberRegisterService regSvc; private ChangePasswordService pwdSvc; public Assembler() { memberDao =new MemberDa..
스프링은 Assembler 클래스의 생성자 코드처럼 필요한 객체를 생성하고 생성한 객체에 의존을 주입한다. 3.6.1 스프링을 이용한 객체 조립과 사용 @Configuration public class AppCtx { @Bean pulbic MemberDao memberDao() { return new MemberDao(); } @Bean public MemberRegisterService memberRegSvc() { return new MemberRegisterService(memberDao()); } @Bean public ChangePasswordService changePwdSvc() { ChangePasswordService pwdSvc = new ChangePasswordService(); ..
스프링 컨테이너는 @Bean이 붙은 메서드에 대해 한개의 객체만 생성한다. 다른 설정 메서드에서 memberDao()를 몇 번을 호출하더라도 항상 같은 객체를 리턴한다는것을 의미한다. 스프링이 런타임에 생성한 설정 클래스의 memberDao() 메서든느 매번 새로운 객체를 생성하지 않는다. 대신 한번 생성한 객체를 보관했다가 이후에는 동일한 객체를 리턴한다.
@Configuration public class AppConf1 { @Bean public MemberDao memberDao() { return new MemberDao(); } @Bean public MemberPrinter memberPrinter() { return new MemberPrinter(); } } @Configuration public class AppConf2 { @Autowired private MemberDao memberDao; @Autowired private MemberPrinter memberPrinter ; @Bean public MemberRegisterService memberRegSvc() { return new MemberRegisterService(member..