패키지
자바 interface, implement 실습 본문
interface는 선언만** 로직 x (객체지향적 프로그래밍)
implement 는 interface를 상속
extend - 일반클래스와 abstract클래스를 상속
반복되는 메소드 클래스로 빼기(인터페이스, 추상메소드)
1.메소드 추출 |
* 외부클래스, 내부 클래스
* 객체를 사용하기 위해서는 객체를 생성해야 한다
* 클래스 아래 변수는 읽기 전용이므로 원래는 private를 써주는게
샘플 UserDAO라는 클래스를 만들고, 소스수정(소스수정-> 서버 on/off -> 비효율)을 하면서 생기는 비효율적인 부분을 해결하기 위한 Interface, implement에 대한 실습.
ConnectionMaker라는 인터페이스를 만들고 각각의 디비에 접근가능하게 하는 implement를 해줌으로서 클라이언트가 메인 메소드에 접근할 때 해당 db를 연결해주는 클래스를 수정하지 않고도 찾아가게 해줌으로서
소스 작업의 효율성을 높여준다는 것을 배울 수 있었다. 또한 생성자에 대한 부분도 다시 알 수 있었다(생성자 생성 중요).
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.iffice.test.domain.User;
public class UserDAO {
// SimpleConnectionMaker scm = new SimpleConnectionMaker();
//이렇게 선언해줘도 돌아가지만,
//scm으로 메소드를 불어올 필요가 없을 때도 선언이 되어버림으로
//필요없는 메모리가 낭비됨...
ConnectionMaker scm;
//생성자를 이런식으로 선언해야 하는 이유 //변수 네이밍 주의할 것 (직관적으로 알아볼 수 있게) //default |
public void add(User user) throws ClassNotFoundException, SQLException {
Connection c = scm.getConnection();
PreparedStatement ps = c
.prepareStatement("insert into test_users(id,name,password) values(?,?,?)");
ps.setString(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getPw());
//executeUpdate() 메소드는 INSERT, UPDATE, DELETE 쿼리 전용
ps.executeUpdate();
ps.close();
c.close();
}
public User get(String id) throws SQLException, ClassNotFoundException {
Connection c = scm.getConnection();
PreparedStatement ps = c
.prepareStatement("select * from test_users where id = ?");
//데이터바인딩
ps.setString(1, id);
//executeQuery() 메소드는 SELECT 쿼리 전용
ResultSet rs = ps.executeQuery();
//next() 메소드는 ROW 단위 접근
//결과 집합(ResultSet)에서 순차적으로 ROW를 접근하고
//더 이상 접근할 ROW가 없으면 false를 반환한다.
rs.next();
User user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPw(rs.getString("password"));
rs.close();
ps.close();
c.close();
return user;
}
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
//인터페이스와 인터페이스를 상속받은(implement) 클래스 ConnectionMaker cm = new OracleConnectionMaker(); |
User user = new User();
user.setId("tester55");
user.setName("테스터");
user.setPw("tester");
dao.add(user);
System.out.println(user.getId() + " 등록성공");
User user2 = dao.get(user.getId());
System.out.println(user2.getName());
System.out.println(user2.getPw());
System.out.println(user2.getId() + " 조회성공");
}
}
package com.iffice.test.dao;
import java.sql.Connection;
import java.sql.SQLException;
public interface ConnectionMaker {
//getConnection이라는 메소드를 만듬
//interface에서는 로직생성 하지 않음.
public Connection getConnection() throws ClassNotFoundException, SQLException;
}
package com.iffice.test.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class SimpleConnectionMaker implements ConnectionMaker{
public Connection getConnection() throws ClassNotFoundException, SQLException {
//디비 커넥션
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c = DriverManager.getConnection(
"jdbc:sqlserver://ip주소:1433;databaseName=ㅇㅇ", "아이디", "비밀번호");
return c;
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class OracleConnectionMaker implements ConnectionMaker{
public Connection getConnection() throws ClassNotFoundException, SQLException {
//디비 커넥션
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c = DriverManager.getConnection(
"jdbc:sqlserver://ip주소:1433;databaseName=ㅇㅇ", "아이디", "비밀번호");
return c;
}
}
'Server-Side > Java' 카테고리의 다른 글
JAVA 힙(heap)/스택 영역, garbage collection (0) | 2016.03.29 |
---|---|
svn연동하면서 생긴 LoginController 에러/outofmemory (0) | 2016.03.29 |
객체 지향 프로그래밍_기초개념 (3) | 2015.08.04 |
메소드 오버로딩(Overloading) (0) | 2015.08.03 |
생성자(Constructor) (0) | 2015.08.01 |