[JAVA] 객체 지향 핵심 – 인터페이스 와 인터페이스를 활용한 다형성 구현(dao 구현)

– 인터페이스

자바에서 인터페이스(Interface)는 클래스가 구현해야 하는 메서드의 집합을 정의하는데 사용되는 중요한 개념입니다. 인터페이스는 다형성을 지원하고, 여러 클래스가 공통된 행동을 제공하도록 하는데 중요한 역할을 합니다.
  • 모든 메서드가 추상 메서드로 선언됨 public abstract
  • 모든 변수는 상수로 선언됨 public static final
public interface Calc {

    double PI = 3.14;
    int Error = -9999999;
    int add(int num1, int num2);
    int substract(int num1, int num2);
    int times(int num1, int num2);
    int divide(int num1, int num2);

}

public abstract class Calculator implements Calc{
    @Override
    public int add(int num1, int num2) {
        return num1 + num2;
    }
    @Override
    public int substract(int num1, int num2) {
        return num1 - num2;
    }
}

public class CompleteCalc extends Calculator{

    @Override
    public int times(int num1, int num2) {
        return num1 + num2;
    }
    @Override
    public int divide(int num1, int num2) {
        if (num2 == 0){
            return Error;
        }
        else {
            return  num1 / num2;
        }
    }
    public void showInfo(){
        System.out.println("모두 구현하였습니다.");
    }
}

public class CompleteCalculator {
    public static void main(String[] args) {
        CompleteCalc calc = new CompleteCalc();

        int num1 = 10;
        int num2 = 2;

        System.out.println(num1 + " + " + num2 + " = " + calc.add(num1, num2));
        System.out.println(num1 + " - " + num2 + " = " + calc.substract(num1, num2));
        System.out.println(num1 + " * " + num2 + " = " + calc.times(num1, num2));
        System.out.println(num1 + " / " + num2 + " = " + calc.divide(num1, num2));
        calc.showInfo();
    }
}

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

  • 하나의 인터페이스를 여러 객체가 구현하게 되면 클라이언트 프로그램은 인터페이스의 메서드를 활용하여 여러 객체의 구현을 사용할 수 있음(다형성)
package ch13.domain.uesrinfo;
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;
    }
}

package ch13.domain.uesrinfo.dao;
import ch13.domain.uesrinfo.UserInfo;

public interface UserInfoDao {
    void insertUserInfo(UserInfo userInfo);
    void updateUserInfo(UserInfo userInfo);
    void deleteUserInfo(UserInfo userInfo);
}

 ch13.domain.uesrinfo.dao.oracle;

import ch13.domain.uesrinfo.UserInfo;
import ch13.domain.uesrinfo.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 into ORACLE DB userId = " + userInfo.getUserId());
    }

package ch13.domain.uesrinfo.dao.mysql;

import ch13.domain.uesrinfo.UserInfo;
import ch13.domain.uesrinfo.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 into MYSQL DB userId = " + userInfo.getUserId());
    }
}

package ch13.client.web;

import ch13.domain.uesrinfo.UserInfo;
import ch13.domain.uesrinfo.dao.UserInfoDao;
import ch13.domain.uesrinfo.dao.mysql.UserInfoMySqlDao;
import ch13.domain.uesrinfo.dao.oracle.UserInfoOracleDao;

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

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");
        System.out.println(dbType);

        UserInfo userInfo = new UserInfo();
        userInfo.setUserId("user01");
        userInfo.setPasswd("!@#$!12345");
        userInfo.setUserName("James");
        UserInfoDao userInfoDao = null;

        if (dbType.equals("ORACLE")){
            userInfoDao = new UserInfoOracleDao();
        }
        else if (dbType.equals("MYSQL")){
            userInfoDao = new UserInfoMySqlDao();
        }
        else {
            System.out.println("not support");
        }
        if (userInfoDao != null){
            userInfoDao.insertUserInfo(userInfo);
            userInfoDao.updateUserInfo(userInfo);
            userInfoDao.deleteUserInfo(userInfo);
        }

    }
}
db.properties = 디비;
DBTYPE = ORACLE

댓글 남기기