728x90
반응형
SMALL
인터페이스가 하는 일
- 클래스나 프로그램이 제공하는 기능을 명시적으로 선언합니다.
- 일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세입니다.
- 클라이언트 프로그램은 인터페이스에 선언된 메서드 명세만 보고 이를 구현한 클래스를 사용할 수 있습니다.
- 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미입니다.
- 인터페이스를 구현한 다양한 객체를 사용합니다. (다형성)
- 예) JDBC 인터페이스
인터페이스를 활용한 다형성 구현 (dao 구현하기)
인터페이스와 다형성
하나의 인터페이스를 여러 객체가 구현하게 되면 클라이언트 프로그램은 인터페이스의 메서드를 활용하여 여러 객체의 구현을 사용할 수 있습니다. (다형성)
인터페이스를 활용한 dao구현하기
- DB에 회원 정보를 넣는 dao(data access object)를 여러 DB 제품이 지원될 수 있게 구현합니다.
- 환경 파일(db.properties)에서 DB의 종류에 대한 정보를 읽고 그 정보에 맞게 dao인스턴스를 생성하여 실행될 수 있게 합니다.
UserInfo.java
package ch30.domain.userinfo;
public class UserInfo {
private String userID;
private String userPW;
private String userName;
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserPW() {
return userPW;
}
public void setUserPW(String userPW) {
this.userPW = userPW;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
UserInfoDao.java
package ch30.domain.userinfo.dao;
import ch30.domain.userinfo.UserInfo;
public interface UserInfoDao {
void insertUserInfo(UserInfo userinfo);
void updateUserInfo(UserInfo userinfo);
void deleteUserInfo(UserInfo userinfo);
}
UserInfoOracleDao.java
package ch30.domain.userinfo.dao.oracle;
import ch30.domain.userinfo.UserInfo;
import ch30.domain.userinfo.dao.UserInfoDao;
public class UserInfoOracleDao implements UserInfoDao {
@Override
public void insertUserInfo(UserInfo userinfo) {
System.out.println("Insert into Oracle DB userID = " + userinfo.getUserID());
}
@Override
public void updateUserInfo(UserInfo userinfo) {
System.out.println("Update into Oracle DB userID = " + userinfo.getUserID());
}
@Override
public void deleteUserInfo(UserInfo userinfo) {
System.out.println("Delete from Oracle DB userID = " + userinfo.getUserID());
}
}
UserInfoClient.java
package ch30.domain.userinfo.web.userinfo;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import ch30.domain.userinfo.UserInfo;
import ch30.domain.userinfo.dao.UserInfoDao;
import ch30.domain.userinfo.dao.mysql.UserInfoMySqlDao;
import ch30.domain.userinfo.dao.oracle.UserInfoOracleDao;
public class UserInfoClient {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("db.properties");
Properties prop = new Properties();
prop.load(fis);
String dbType = prop.getProperty("DBTYPE");
UserInfo userInfo = new UserInfo();
userInfo.setUserID("12345");
userInfo.setUserPW("54321");
userInfo.setUserName("SJ");
UserInfoDao userInfoDao = null;
if(dbType.equals("ORACLE")) {
userInfoDao = new UserInfoOracleDao();
}
else if (dbType.equals("MYSQL")) {
userInfoDao = new UserInfoMySqlDao();
}
else {
System.out.println("db error");
return;
}
userInfoDao.insertUserInfo(userInfo);
userInfoDao.updateUserInfo(userInfo);
userInfoDao.deleteUserInfo(userInfo);
}
}
db.properites (프로젝트 안에 파일 생성)
DBTYPE=ORACLE
출력 결과
Insert into Oracle DB userID = 12345
Update into Oracle DB userID = 12345
Delete from Oracle DB userID = 12345
728x90
반응형
LIST
'Java' 카테고리의 다른 글
[JAVA] 자바 - 여러 인터페이스 구현하기, 인터페이스의 상속 (0) | 2021.12.14 |
---|---|
[JAVA] 자바 - 인터페이스의 여러가지 요소 (0) | 2021.12.03 |
[JAVA] 자바 - 인터페이스(interface) (0) | 2021.12.01 |
[JAVA] 자바 - final예약어 (0) | 2021.12.01 |
[JAVA] 자바 - 추상 클래스의 응용 (템플릿 메서드 패턴) (0) | 2021.12.01 |
댓글