Java/정리

인터페이스 활용예제

낭구리 2021. 8. 31. 14:08

패키지 계층구조없이 코드를 완성해 봅시다.

패키지 ex10을 먼저 만들어 주세요.

※ chapter03 생략

1. UserInfo 클래스 생성

package ex10;

// 1 UserInfo 클래스를 만들어 줍니다. 
public class UserInfo {
	private String userId;
	private String password;
	private String userName;

	// 멤버 변수가 접근 지시 제어자가
	// private 이기 때문에 getter, setter 메서드를 만들어 줍니다.

	// 단축키 Alt + Shift + s --> Generate getter and setter 클릭 
	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;
	}

}

2. UserInfoDao 인터페이스 생성

package ex10;

// 2. UserInfoDao 인터페이스를 선언 하고 추상 메서드 선언을 합니다.  
public interface UserInfoDao {
	
	// 클라이언트 쪽 개발자는 인터페이스만 보고 기능을 구현할 수 있습니다. 
	// DB 쪽 연결 기능을 구현하는 개발자도 인터페이스만 보고 기능을 구현할 수 있습니다. 
	// 둘다 매개 변수로 UserInfo 객체만 넘겨주면(인스턴스 변수) 프로그램이 실행 될 수 있도록 
	// 처리 하겠다는 의미 입니다. 
	void insertUserInfo(UserInfo userInfo);
	void updateUserInfo(UserInfo userInfo);
	void deleteUserInfo(UserInfo userInfo);
}

3. UserInfoMySqlDao 객체 생성 ( UserInfoDao 인터페이스 구현)

package ex10;

// 3. DB 쪽 연결 개발자는 UserInfoDao 인터페이스를 implement 합니다.
public class UserInfoMySqlDao implements UserInfoDao {
	
	// 인터페이스 추상 메서드를 실제로 구현합니다. 
	// 클래스 이름에 마우스를 올려 놓으면 해결 방안을 이클립스가 안내해 줍니다. 
	@Override
	public void insertUserInfo(UserInfo userInfo) {
		System.out.println("insert into MYSQL DB userId =' " + userInfo.getUserId()  + " ' " );
		System.out.println(" and pwd = ' " + userInfo.getPassword() + " ' ");
		System.out.println(" and userName = ' " + userInfo.getUserName() + " ' ");
	}

	@Override
	public void updateUserInfo(UserInfo userInfo) {
		System.out.println("update MYSQL DB userName =' " + userInfo.getUserName()  + " ' " );
	}

	@Override
	public void deleteUserInfo(UserInfo userInfo) {
		System.out.println("delete from MYSQL DB userId = ' " + userInfo.getUserId() + " ' ");
	}
	
}

4. UserInfoOracleDao 객체 생성 ( UserInfoDao 인터페이스 구현)

package ex10;

//4. DB 쪽 연결 개발자는 UserInfoDao 인터페이스를 implement 합니다.
public class UserInfoOracleDao implements UserInfoDao {

	// 인터페이스 추상 메서드를 구현합니다.
	// 클래스 이름에 마우스를 올려 놓으면 해결 방안을 이클립스가 안내해 줍니다.
	@Override
	public void insertUserInfo(UserInfo userInfo) {
		System.out.println("insert into ORACEL DB userId =' " + userInfo.getUserId() + " ' ");
		System.out.println(" and pwd = ' " + userInfo.getPassword() + " ' ");
		System.out.println(" and userName = ' " + userInfo.getUserName() + " ' ");
	}

	@Override
	public void updateUserInfo(UserInfo userInfo) {
		System.out.println("update ORACEL DB userName =' " + userInfo.getUserName() + " ' ");
	}

	@Override
	public void deleteUserInfo(UserInfo userInfo) {
		System.out.println("delete from ORACEL DB userId = ' " + userInfo.getUserId() + " ' ");
	}

}

5. UserInfoClient 클래서 생성 (main 함수 실행 부분)

package ex10;

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

// 5. UserInfo Client 쪽 개발자도 UserInfoDao 인터페이스만 보고 코드를 구현할 수 있습니다. 
public class UserInfoClient {

	public static void main(String[] args) throws IOException {
		// 파일에 값에 따라서 
		// UserInfoMySqlDao 객체를 생성 또는 
		// UserInfoOracleDao 객체를 생성 할수 있도록 만들예정입니다. 
		
		// 1. 파일 만들기 chapter03 프로젝트 계층에서 파일을 만들어 줍니다. 
		// chapter03 클릭 오른쪽 마우스 New --> File 선택 
		// 2. 파일명 db.propertise10 이라고 입력합시다. 
		// 3. 생성된 파일에 DBTYPE=MYSQL 입력해 봅시다. 
		
		// 4 FileInputStream 객체 선언과 동시에 초기화를 합시다. 
		FileInputStream fis = new FileInputStream("db.properties10");
		// 오류표시가 보이면 예외 처리를 해주면 됩니다. (파일이 없을 경우 에러 방지)
		// main 메서드 괄호 옆에 throws IOException 라고 입력 또는 자동완성해 주세요. 
		
		// 5. 파일과 연결된 상태이기 때문에 파일안에 글자를 읽을수 있는 객체를 생성 합니다.
		Properties prop = new Properties(); // key 와 value 타입으로 글자를 읽어주는 객체 입니다. 
		prop.load(fis); // FileInputStream 인스턴스 변수 fis와 Properties 객체를 연결(로드) 합니다. 
		
		// 글자를 가지고 오는 메서드를 실행하고 값을 변수에 담습니다. 
		String dbType = prop.getProperty("DBTYPE");  // MYSQL, ORACLE 값이 담김
		
		// 6. 사용자한테 userInfo 정보를 받습니다. 
		UserInfo userInfo = new UserInfo();
		userInfo.setUserId("myUserId");
		userInfo.setPassword("123456!#");
		userInfo.setUserName("홍길동");
		
		
		// UserInfoDao 타입으로 userDao 인스턴스 변수 선언 
		UserInfoDao userDao = null;
		
		if(dbType.equals("MYSQL")) {
			// dbType 변수에 담기 값이 MYSQL과 같다면 실행. 
			userDao = new UserInfoMySqlDao(); // UserInfoMySqlDao 객체 생성(변수에 주소값 입력) 
		} else if(dbType.equals("ORACLE")) {
			userDao = new UserInfoOracleDao(); // UserInfoOracleDao 객체 생성(변수에 주소값 입력)
		} else {
			System.out.println("error support db");
			return; 
		}
		
		// 인터페이스 UserInfoDao 선언된 메서드를 가지고 실행 시켜 봅시다.  
		userDao.insertUserInfo(userInfo);
		userDao.updateUserInfo(userInfo);
		userDao.deleteUserInfo(userInfo);
		
		// DBTYPE=ORACLE 변경해서 실행해 봅시다. 
//		userDao.insertUserInfo(userInfo);
//		userDao.updateUserInfo(userInfo);
//		userDao.deleteUserInfo(userInfo);
		
	}

}

※ 오류가 난다면 파일 생성 또는 파일안에 글자를 확인해주세요.

도전과제

1. UserInfoMssqlDao 객체를 생성하고 implements UseInfoDao 를 구현하고 코드를 작성해 봅시다.

2. UserInfoClient 객체 main 함수에 else if(dbType.equals("MSSQL)) 구문을 추가 해서 UserInfoMssqlDao 객체를 생성해 봅시다.

3. db.properties10 파일에 값을 DBTYPE=MSSQL 로 변경하고 메인 함수를 실행해 봅시다.

 

'Java > 정리' 카테고리의 다른 글

내부클래스  (0) 2021.09.01
Object클래스  (0) 2021.09.01
인터페이스  (0) 2021.08.31
ArrayList  (0) 2021.08.30
객체 지향 프로그래밍으로 구현해보기 (ex문제)  (0) 2021.08.30