[JAVA] 자바 - 인터페이스가하는 일과 다형성 구현

[JAVA] 자바 - 인터페이스가하는 일과 다형성 구현

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

https://github.com/Seong-Jun1525/JavaStudy#%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%8B%A4%ED%98%95%EC%84%B1-%EA%B5%AC%ED%98%84-dao-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0

728x90

LIST

from http://seong-jun.tistory.com/40 by ccl(A) rewrite - 2021-12-03 12:27:25