✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습
Part2. 3-13 인터페이스를 활용한 다형성 구현 (dao 구현하기)
들판속초록풀
2025. 6. 12. 17:15
인터페이스와 다형성
* 하나의 인터페이스를 여러 객체가 구현하게 되면 클라이언트 프로그램은 인터페이스의 메서드를 활용하여
여러 객체의 구현을 사용할 수 있음 (다형성)
실무에서 중요한 것은 인터페이스를 설계하는 것이다
어떻게 인터페이스를 설계를 해야 클라이언트 프로그램이 유용하게 쓸 수 있을까? 를 고민해야 한다.
패키지 : 소스의 계층 구도(하이라키)를 갖는 것
실무에서 계층 구도를 어떤 식으로 관리를 하느냐에 많은 고민들을 한다
처음 프로젝트를 설계할 때 나중에 관리하기 편하게 하기 위해 어느 소스를 어디다 둘 것인지 고민한다
인터페이스를 활용한 dao 구현해 보기
DB에 회원 정보를 넣는 dao(data access object)를 여러 DB 제품이 지원될 수 있게 구현함
환경파일(db.properties)에서 database의 종류에 대한 정보를 읽고 그 정보에 맞게 dao 인스턴스를 생성하여 실행될 수 있게 함
public class UserInfo { // 사용자 정보 클래스 (참조 자료형)
private String userId;
private String passwd;
private String userName;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
public interface UserInfoDao { // 인터페이스 (dao 에서 제공되어야 할 메서드를 선언한 인터페이스)
void insertUserInfo(UserInfo userInfo); // 추가
void updateUserInfo(UserInfo userInfo); // 업데이트
void deleteUserInf(UserInfo userInfo); // 삭제
}
// UserInfoDao 인터페이스를 구현한 MySql 버전 dao
public class UserInfoMySqlDao implements UserInfoDao{ // 구현 클래스
@Override
public void insertUserInfo(UserInfo userInfo) {
System.out.println("insert into MYSQL DB userId =" + userInfo.getUserId() );
}
@Override
public void updateUserInfo(UserInfo userInfo) {
System.out.println("update into MYSQL DB userId = " + userInfo.getUserId());
}
@Override
public void deleteUserInf(UserInfo userInfo) {
System.out.println("delete from MYSQL DB userId = " + userInfo.getUserId());
}
}
// UserInfoDao 인터페이스를 구현한 Oracle 버전 dao
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 deleteUserInf(UserInfo userInfo){
System.out.println("delete from ORACLE DB userId = " + userInfo.getUserId());
}
}
public class UserInfoClient { // 클라이언트 프로그램
public static void main(String[] args) throws IOException { // 예외처리
FileInputStream fis = new FileInputStream("db.properties"); // 파일 입출력
Properties prop = new Properties(); // key--value와 같은 데이터 쌍을 pair로 읽어주는 기능이 있는 객체
prop.load(fis);
String dbType = prop.getProperty("DBTYPE");
UserInfo userInfo = new UserInfo();
userInfo.setUserId("12345");
userInfo.setPasswd("!@#$%");
userInfo.setUserName("이순신");
UserInfoDao userInfoDao = null; // 인터페이스 null로 초기화
if(dbType.equals("ORACLE")){ // 문자열 메서드 equals() 메서드
userInfoDao = new UserInfoOracleDao();
}
else if(dbType.endsWith("MYSQL")){ // 문자열 메서드 endsWith() 메서드
userInfoDao = new UserInfoMySqlDao();
}
else{
System.out.println("db support error");
return;
}
userInfoDao.insertUserInfo(userInfo);
userInfoDao.updateUserInfo(userInfo);
userInfoDao.deleteUserInf(userInfo);
}
}