////
Search
🧻

1장. 오브젝트와 의존관계

스프링의 핵심 철학은 자바 엔터프라이즈 기술의 혼란 속에서 잃어버렸던 객체지향 기술의 진정한 가치를 회복하고, 그로부터 객체지향 프로그래밍이 제공하는 폭넓은 혜택을 다시금 누릴 수 있도록 기본으로 돌아가자는 것이다.
그렇기 때문에 자연스럽게 스프링은 가장 많은 관심을 오브젝트, 즉 객체에 둔다.
애플리케이션 상에서 오브젝트가 생성되고 다른 오브젝트와 관계를 맺고, 사용되고, 소멸되기까지의 전 과정을 주의깊게 살펴볼 필요가 있다.
더 나아가서는 어떻게 설계되어야 하는지, 어떤 단위로 만들어지며 어떤 과정을 통해 자신의 존재를 노출하는지에 대해서도 살펴봐야 한다.
즉, 관심은 오브젝트의 기술적인 특징에서부터 설계까지 발전하게 된다.
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 저장, 조회를 수행하는지 확인하기 위해 서버를 띄우고 사용해보는 것은 품이 많이 든다.
만들어진 코드의 기능을 검증하고자 할 때 사용할 수 있는 가장 간단한 방법은 오브젝트 스스로 자신을 검증하도록 만들어주는 것이다.