U E D R , A S I H C RSS

토비의스프링3/오브젝트와의존관계

1. 난감 DAO

  • 보를 JDBC API를 DB DAO 만들기.
  • DAO(Data Access Object)
    • DB를 , 는 기능 록 만든 .

1.1. User

  • 보를 따르는 다.
    • (JavaBean)
      • 라고 다.
      • 미는 가능 .

        • 라미는 디 를 가
        • getter setter를 , 를 가 다.
  • User :

package springbook.user.domain;

public class User {
    String id;
    String name;
    String password;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
  • USER
드명
UserId VARCHAR(10) Primary Key
Name VARCHAR(20) Not Null
Password VARCHAR(20) Not Null

1.2. UserDao

  • UserDao : JDBC를 록, 기능 는 DAO

package springbook.user.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import springbook.user.domain.User;

public class UserDao {
    public void add(User user) throws SQLException, ClassNotFoundException{
        Class.forName("com.mysql.jdbc.Driver");
        Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book");

        PreparedStatement ps = c.prepareStatement("insert into users(id, name, password) values(?,?,?)");
        ps.setString(1, user.getId());
        ps.setString(2, user.getName());
        ps.setString(3, user.getPassword());
		
        ps.executeUpdate();
		
        ps.close();
        c.close();		
    }
    public User get(String id) throws ClassNotFoundException, SQLException{
        Class.forName("com.mysql.jdbc.Driver");
        Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book");

        PreparedStatement ps = c.prepareStatement("select * from users where id = ?");
        ps.setString(1, id);
		
        ResultSet rs = ps.executeQuery();
        rs.next();
		
        User user = new User();
        user.setId(rs.getString("id"));
        user.setName(rs.getString("name"));
        user.setPassword(rs.getString("password"));
		
        rs.close();
        ps.close();
        c.close();
		
        return user;
    }
}

1.3. main()

  • 만든 대로 동 려면
    • DAO 기능 만들 브라
      • UserDao 드가 동 무 복 .
    • 록 만들다.
  • main 메드를

public static void main(String[] args) throws SQLException, ClassNotFoundException {
    UserDao dao = new UserDao();

    User user = new User();		
    user.setId("zeropage");
    user.setName("");
    user.setPassword("zp");
		
    dao.add(user);
		
    System.out.println(user.getId() + "공");
		
    User user2 = dao.get(user.getId());		
    System.out.println(user2.getName());
    System.out.println(user2.getPassword());
		
    System.out.println(user2.getId() + " 공");
}
  • 면 다과 같 력된다.

zeropage 
zp
zeropage  

1.4. 난감 DAO?

  • 난감 DAO?
    • UserDao
      • main() 메
      • 기능
    • 그럼 UserDao 러가다.
DeleteMe) . -

2. DAO

2.1.

  • 될 때까 드는 끊다. 그렇다면 변 떻게 대가?
  • : 변 다.
    • 기능 변경
      • 단 몇 드만 는데 5 리는 개발 > 드를 는데 5 리고 뒤 문 는 개발
    • 떻게?
      • 고려
  • 모든 변경과 발 만 그 따른 는 경가 많다.

      • 군데 되게 라.
      • 것끼리는 로, 관 다른 것 가능 리.

2.2. 만들기

2.2.1. UserDao

  1. DB 떻게 가가.
  2. 록/ SQL문 Statement를 만들고 는 것.
  3. 끝나고 리를 close는 것.

  4. : DB
    • add() 메 get() 메 드가 복되 다.
      • DAO 메드를 만든다고
        • DB 드가 군데 게 되
        • DB 는 방 바뀌면 군데를 다.

2.2.2.

  • 복된 드를 다.
  • UserDao : getConnection() 메드를

public void add(User user) throws SQLException, ClassNotFoundException {
    Connection c = getConnection();
    …
}

public void get(String id) throws SQLException, ClassNotFoundException {
    Connection c = getConnection();
    …
}
    
private Connection getConnection() throws SQLException, ClassNotFoundException {
    Class.forName("com.mysql.jdbc.Driver");
    Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book");
}
  • DAO 메드가 DB 는 방 바뀌면 getConnection() 메드만 면 된다.

2.2.3. 변경 : 리링과


    • 드 내부 구를 변경
    • 부 동 .

      • 내부 가 개 드를 고 변 로 대 다.
    • ( 러, 벡 공)
DeleteMe) 보강 -

2.3. DB 만들기 독립

3. DAO

  • 따라
    • 가 다르다
    • 다르다
      • 다르다는 것 기, 기가 다르다는 것
    • 를 만들놓고 를 구는 방법 ->
  • 1.3.1
    • 로 다른 관를 독립
      • 드를 때는 기능닌 내부 를 변경 더 나 드를 만드는 것 다(리링)
      • 기능 다. 드가 를 검 다.
    • 리된 두 를 가다.
  • 1.3.2
    • 가 낮를 가 다는 것다.

      • 떤 것들 를 따로 내는
      • interface
      • 보다 가능
  • 1.3.3 관
    • 기가 는 다른 독립를 가다면 다.
      • 다.

      • 다.
      • : 란 런 가 다른 를 가는 것.
      • 방법
        • 를 내부
        • 로 구라메 는다. (다)
  • 1.3.4
    • 개방 (OCP) (SOLID)
      • 나 모 고 변경는 닫

      • 개방

        • 날 때 당 모는 부 다는 것 다.

        • 보다 민감
        • 는 다른 게 변다.
        • 가 다른 모 는 것 다.


      • 변경 고리 부로 고, 를 구 따라 바꿔
  • 결국.. 란?
    • 과 디 럽게 개발

4. (IoC)

  • 1.4.1

      • 방법고 만들 를 돌려다.
      • 리 - 다.
      • DaoFactory : 를 결리.
  • 1.4.2
    • 드 반복

public class DaoFactory{
	//  ConnectionMaker를 드가 반복됨
	public UserDao userDao( ){
		return new UserDao(new DConnectionMaker());
	}

	public AccountDao accountDao( ){
		return new AccountDao(new DConnectionMaker());
	}

	public MessageDao messageDao( ){
		return new MessageDao(new DConnectionMaker());
	}
}

public class DaoFactory{
	public UserDao userDao( ){
		return new UserDao(connectionMaker());
	}

	public AccountDao accountDao( ){
		return new AccountDao(connectionMaker());
	}

	public MessageDao messageDao( ){
		return new MessageDao(connectionMaker());
	}

	// 리
	public ConnectionMaker connectionMaker(){
		return new DConnectionMaker();
	}
}


  • 1.4.3
    • 란?
      • 로그램 가 뒤바뀌는 것
      • 다른 대다.
      • 된 대다.
        • 브러리는 능동다.
        • 반면 드가 된다.

  • IoC를 극 다.
    • 개념 다.

5. IoC

5.1 리를 IoC
  • 5.1.1
    • (bean) : 만들고 관를 부. . 를 담당 라고 부른다.
    • 리(bean factory) : 과 관 를 담당IoC. IoC를 담당 . 다.
    • (application context) : IoC 따라 만들 리. 보를 , 관 다. 보를 따로 IoC라고 볼 다. 는 xml 다.
    • 보 : 리가 IoC 보. IoC 관리되는 고 구된다.
    • /IoC : IoC 관리다는 리를 /IoC라고 다.
  • 5.1.2
    • 리 또는 보를 만드는 방법 ->
      • 1. 리를 담당라고 록 @Configuration라는 다.

@Configuration
public class DaoFactory{}
  • 2. 를 만들는 메는 @Bean라는 다.

@Configuration
public class DaoFactory{
@Bean
public UserDao userDao(){ ...}
}
  • 만들 보를 ->
    • 1. ApplicationContext 다. @Configuration 드를 보로 려면 AnnotationConfigApplicationContext 라미로 @Configuration 다.

public static void main(Strings[] args) throws ClassNotFoundException, SQLException{
ApplicatioContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
}
  • 2. ApplicationContext getBean()메드를 록된 를 가 다.

public static void main(Strings[] args) throws ClassNotFoundException, SQLException{
ApplicatioContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
UserDao dao = context.getBean("userDao", UserDao.class);
}
getBean()메드 : ApplicationContext가 관리는 메드. ""가는 것 ApplicationContext 록된 . 다는 것드를 결과를 가다고 면 된다. 는 userDao()라는 메기 때문 "" userDao가 들갔다. 메 myUserDao()라면 "myUserDao"가 된다. 기본로 Object로 리게 되 바 5 릭 메드 방 라미 된다.
5.2
  • 5.2.1
    • @Configuration IoC 보가 된다. 내부로는 가 @Configuration @Bean메드를 를 가 가 getBean() 메드로 다.
  • 5.2.2

      1. 는 구 다.
      2. IoC 다.
      3. 는 다 방법 다.

6.

6.1 리로
  • 고 관리 다. 기본다른 면 내부 를 모두 로 만든다.
  • 되기 때문 리는 부 로 만들게 되다. , 관리 관리 다.

    • 1. private 를 가기 때문 다.
    • 2. 기가 들다.
    • 3. 나만 만들는 것다.
    • 4. 를 만들 기 때문 바람다.
6.2
  • 로 값 기 때문 다. 보라면 다.
6.3
  • (scope) : 관리 되고 되는 범. 기본 만 만들 된다. 경 따라 (prototype), (request), (session) 다.

7. (DI)

  • : 두 또는 모 가 다른 .
  • (DI)? : (Dependency Injection) (IoC) 방 더 명게 나내기 다.

      1. 모델는 런 가 드러나 는다. 그러기 다.
      2. 리 같 3 가 결다.
      3. 공() 만들다.
  • DI : DI를 는데 렇게 드러나 기 때문 를 바꿔는 것 변경, 게 대 다.
  • DI
    • Bean : 는 DI를 Bean 를 관리다.
    • Bean Factory : 런 를 결 Bean Factory Bean 관리를 맺다.
    • (Dependency Lookup) : DI방 는 DI를 가 반드 Bean 다. 만 DL 면 Bean 다.

8. XML

  • XML
  • 는 DI를 만들 때 드를 는 것 다. XML 기 때문 다루기 빌드 다.
    • <beans> : @Configuration다. 러 개 <bean>다.
      • <bean> : @Bean 바 메다.
        • <id> : @Bean 메 . getBean() 다.
        • <class> : @Bean 메드가 return는 값. 모두 다.
        • <property> : @Bean 메 DI를 다. 다.
          • <name> : set부 나머 다.
          • <ref> : 드를 Bean id다.
          • <value> : 다른 Bean 라 단 때 <ref> 대 다. 게 변기 때문 링, 다.
  • (Java 드)

@Configuration
class DaoFactory {
 ...

 @Bean
 public ConnectionMaker connectionMaker() {
  return new DConnectionMaker();
 }

 @Bean
 userDao setConnectionMaker(connectionMaker()) {
 ... };
}
  • (XML)

<beans>
 <bean id="myConnectionMaker" class="springbook.user.dao.DConnectionMaker" />

 <bean id="userDao" class="springbook.dao.UserDao">
  <property name="connectionMaker ref="myConnectionMaker" />
 </bean>
</beans>
  • XML
    • GenericXmlApplicationContext("xml 경로")를 다.

ApplicationContext context = new GenericXmlApplicationContext("springbook/user/dao/daoContext.xml")

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:21
Processing time 0.0543 sec