
컨트롤러가 직접 DB에 접근하게 되면, 메소드가 중복된다. 중복을 제거하려면? 공통 부분을 따로 분리해낸다. 계층의 분리! UserDao를 통해 DB에 접근한다면 중복코드가 제거된다. 이 UserDao를 영속 계층(Persistence Layer), Data Access Layer 라고 하고, 컨트롤러 부분은 Presentation Layer라고 한다. 데이터를 보여주는 계층이다. 이렇게 분리해내는 이유는 1.관심사의 분리 / 2. 변하는 것과 변하지 않는 것 / 3. 중복, 공통 코드 1,3번이다. 나중에 MySQL을 쓰던지 Oracle을 쓰던지, 인터페이스를 사용하면 UserDao가 바뀌어도 상관없다. UserDao.java를 만들고, UserDaoImpl을 만들었다. UserDao를 인터페이스로 만..
스프링으로 DB를 다루기위해, TDD코드에 테이블에 회원 정보를 추가하는 메소드를 만들고 매개변수로 User를 주었기 때문에 User클래스를 만들어준다(테이블의 컬럼과 똑같이 만들어준다) 그리고나서 insertUser메소드를 만들어준 뒤 Test코드로 insertUserTest()코드를 만들어준다. public class DBConnectionTest2Test { @Autowired DataSource ds; @Test public void insertUserTest() throws Exception{ User user = new User("kim","1234","abc","aaa@aaa.com",new Date(),"fb",new Date()); int rowCnt=insertUser(user); as..

package com.fastcampus.ch3; import java.sql.*; public class DBConnectionTest { public static void main(String[] args) throws Exception { // 스키마의 이름(springbasic)이 다른 경우 알맞게 변경해야 함 String DB_URL = "jdbc:mysql://localhost:3306/springbasic?useUnicode=true&characterEncoding=utf8"; // DB의 userid와 pwd를 알맞게 변경해야 함 String DB_USER = "hyerin"; String DB_PASSWORD = "hyerin"; Connection conn = DriverManager...

Inversion of Flow Control Flow : if / for 즉, 실행 흐름이 바뀌는 것 전통적인 방식 다른 사람이 만든 라이브러리를 단순히 호출하는 것 잘 변하는 코드 부분(아랫 부분) IOC 호출을 하긴 하긴 하지만, 사용자가 제공한 코드(new SuperEngine)를 라이브러리에서 호출 잘 변하지 않는 코드 부분 (즉, 변하는 코드를 잘 변하지 않는 코드로 분리해냈다) 다른 사람이 만든 코드가 내 코드를 호출한다 (문장이 실행되는 순서를 뒤집었다) DI new SuperEngine을 Engine engin에 수동 주입 (사용할 객체를 외부에서 주입하고 있는 것) IOC 패턴에 DI가 적용되는 것이다. (전략 패턴 : 내가 원하는대로 전략을 바꿀 수 있다) library는 단순히 기능..

자바빈즈부터 시작.. 자바가 서버쪽에서 각광을 받고, 화면에 안보여지는 쪽에서 Bean을 쓰게 됨 MVC에서 모델 역할을 하고(데이터 전달할 때), EL, Scope에서 쓰임.. - JSP container가 관리 EJB가 나옴 -> EJP Container가 관리 관리란? 빈을 생성하고 소멸시키는 것 Spring Bean --> EJB의 복잡한 규칙을 단순하게 만든 것, 단순/독립적 - Spring Container가 관리 스프링 컨테이너(Spring Container) 스프링에서 의존관계 주입(Dependency Injection, DI)을 이용하여 애플리케이션을 구성하는 여러 빈(Bean)들의 생명주기(Lifecycle)와 애플리케이션의 서비스 실행 등을 관리하며 생성된 인스턴스들에게 기능을 제공하..

resource > xml 파일 만들어주기 config.xml SpringDiTest.java package com.fastcampus.ch3; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; class Car{} class Engine{} class Door{} public class SpringDiTest { public static void main(String[] args) { ApplicationContext ac = new GenericXmlApplicationContext("config.xml"); Car car ..

객체 찾기 1. 이름으로 찾기 - Map의 Key로 찾기 (객체 주소 반환) 2. 타입으로 찾기 - Map의 Value로 찾기 (객체 반환) Object getBean(String key){ return map.get(key); } //By Type 검색 Object getBean(Class clazz) { for (Object obj : map.values()) { //map의 모든 value를 가져와서 if (clazz.isInstance(obj)) //obj가 class의 객체거나 자손이면 true가 됨 return obj; } return null; } } public class Main3 { public static void main(String[] args) throws Exception { ..

package com.fastcampus.ch3.diCopy3; import com.google.common.reflect.ClassPath; import org.springframework.util.StringUtils; import org.springframework.stereotype.Component; import java.awt.*; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Set; @Component class Car{} @Component class SportsCar e..