인터페이스를 활용한 다형성 구현 (dao 구현하기)

일상 코딩·2022년 8월 17일

01.인터페이스와 다형성

  • 하나의 인터페이스를 여러 객체가 구현하게 되면 클라이언트 프로그램은 인터페이스의 메서드를 활용하여 여러 객체의 구현을 사용할 수 있음 ( 다형성)

여러가지 예


02.인터페이스를 활용한 dao 구현하기

  • DB에 회원 정보를 넣는 dao(data access object)를 여러 DB 제품이 지원될 수 있게 구현함
  • 환경파일(db.properties) 에서 database의 종류에 대한 정보를 읽고 그 정보에 맞게 dao 인스턴스를 생성하여 실행될 수 있게 함

source hierachy


UserInfo.java (사용자 정보 클래스)

package ch13.domain.userinfo;

public class UserInfo {
	private String userId;
	private String password;
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	private String userName;
}

UserInfoDao.java (dao에서 제공되어야 할 메서드를 선언한 인터페이스)

package ch13.domain.userinfo.dao;

import ch13.domain.userinfo.UserInfo;

public interface UserInfoDao {

	void insertUserInfo(UserInfo userinfo);
	void updateUserInfo(UserInfo userinfo);
	void deleteUserInfo(UserInfo userinfo);
}

UserInfoMySqlDao.java (UserInfoDao 인터페이스를 구현한 MySql 버전 dao)

package ch13.domain.userinfo.dao.mysql;

import ch13.domain.userinfo.UserInfo;
import ch13.domain.userinfo.dao.UserInfoDao;

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 deleteUserInfo(UserInfo userinfo) {
		System.out.println("delete from MySQL DB userID = " + userinfo.getUserId());		
	}
}

UserInfoOracleDao.java (UserInfoDao 인터페이스를 구현한 Oracle 버전 dao)

package ch13.domain.userinfo.dao.oracle;

import ch13.domain.userinfo.UserInfo;
import ch13.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 (UserInfoDao 인터페이스를 활용하는 클라이언트 프로그램)

package ch13.web.userinfo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import ch13.domain.userinfo.UserInfo;
import ch13.domain.userinfo.dao.UserInfoDao;
import ch13.domain.userinfo.dao.mysql.userInfoMysqlDao;
import ch13.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.setPassword("!@#$");
		userinfo.setUserName("Lee");
		
		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.properties (db.properties 환경파일이 MYSQL 일때)

DBTYPE=MYSQL

실행 결과

db.properties (db.properties 환경파일이 ORACLE 일때)

DBTYPE=ORACLE

실행 결과

profile
일취월장(日就月將) - 「날마다 달마다 성장하고 발전한다.」

0개의 댓글