•
스프링의 핵심 철학은 자바 엔터프라이즈 기술의 혼란 속에서 잃어버렸던 객체지향 기술의 진정한 가치를 회복하고, 그로부터 객체지향 프로그래밍이 제공하는 폭넓은 혜택을 다시금 누릴 수 있도록 기본으로 돌아가자는 것이다.
•
그렇기 때문에 자연스럽게 스프링은 가장 많은 관심을 오브젝트, 즉 객체에 둔다.
◦
애플리케이션 상에서 오브젝트가 생성되고 다른 오브젝트와 관계를 맺고, 사용되고, 소멸되기까지의 전 과정을 주의깊게 살펴볼 필요가 있다.
◦
더 나아가서는 어떻게 설계되어야 하는지, 어떤 단위로 만들어지며 어떤 과정을 통해 자신의 존재를 노출하는지에 대해서도 살펴봐야 한다.
◦
즉, 관심은 오브젝트의 기술적인 특징에서부터 설계까지 발전하게 된다.
•
1장에서는 스프링이 어떤 것이고 무엇을 제공하는지보다 스프링이 관심을 갖는 대상인 오브젝트의 설계와 구현, 동작원리에 더 집중해서 살펴보는 것을 추천한다.
1. 초난감 DAO
•
DAO는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.
1. User
@Getter
@Setter
public class User {
String id;
String name;
String password;
}
Java
복사
2. UserDao
•
사용자 정보를 DB에서 관리할 수 있도록 돕는 DAO 클래스다.
public class UserDao {
public void add(User user) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook?characterEncoding=UTF-8", "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?characterEncoding=UTF-8", "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;
}
}
Java
복사
3. main()을 이용한 테스트 코드
•
실제 UserDao가 DB 저장, 조회를 수행하는지 확인하기 위해 서버를 띄우고 사용해보는 것은 품이 많이 든다.
•
만들어진 코드의 기능을 검증하고자 할 때 사용할 수 있는 가장 간단한 방법은 오브젝트 스스로 자신을 검증하도록 만들어주는 것이다.