Java

2024.04.26 인터페이스 활용

정훈5 2024. 4. 26. 11:06
package basic.exercise.interfaces;

public interface IUserInfoDao {
	
	// C R U D
	// public abstract 생략 가능
	
	// public abstract void insertUserInfo();
	void insertUserInfo(String name, int age, String nickName);
	// public abstract void updateUserInfo();
	void updateUserInfo();
	// public abstract void deleteUserInfo();
	void deleteUserInfo();
	// public abstract void selectUserInfo();
	void selectUserInfo();

}

 

package basic.exercise.interfaces;

public class UserInfo {
	
	public static int SERIAL_NUM = 0;	 
	private int id; 
	private String userName;
	private String pw;
	
	public UserInfo(String userName, String pw) {
		this.userName = userName;
		this.pw = pw;
	}
	
	public int getId() {
		return id;
	}
	
	public String getUserName() {
		return userName;
	}
	
	public String getPw() {
		return pw;
	}
	
	@Override
	public String toString() {
		return id + ", " + userName + ", " + pw;
	}
}

 

--------------------------------------------

package basic.exercise.interfaces;

public interface IUserInfoDao {
	
	// C R U D
	// public abstract 생략 가능
	// TODO - 매개변수 수정 예정
	// public abstract void insertUserInfo();
	void insertUserInfo(UserInfo info);
	
	// public abstract void updateUserInfo();
	void updateUserInfo(UserInfo info); // 단 수정이 되면 안되는 것은 제외
	
	// public abstract void deleteUserInfo();
	void deleteUserInfo(int id);
	
	// public abstract void selectUserInfo();
	void selectUserInfo(); // 전체 조회 

}

 

IUserInfoDao 스펙을 구현한 클래스 - 구현 클래스 (UserInfoMySqlDaoImpl )

package basic.exercise.interfaces;

public class UserInfoMySqlDaoImpl implements IUserInfoDao {

	// 1. public 앞에 abstract 사용 하던가
	// 2. IUserInfoDao @Override 하던가

	@Override
	public void insertUserInfo(UserInfo info) {
		// SQL : 질의어 - 배웠다면 -- MySQL 언어를 활용해서 구현
		System.out.println("insert into user_tb valus(info.getUserName())");
	}

	@Override
	public void updateUserInfo(UserInfo info) {
		System.out.println("update set user_tb name = info.getUserName()");
	}

	@Override
	public void deleteUserInfo(int id) {
		System.out.println("delete from user_tb where id = info.getId()");
	}

	@Override
	public void selectUserInfo() {
		System.out.println("select * from user_tb");
	}
}

 

package basic.exercise.interfaces;

public class UserInfoOracleDaoImpl implements IUserInfoDao {
	// Alt + Shift + R 

	@Override
	public void insertUserInfo(UserInfo info) {
		System.out.println("오라클 DB 에 유저 생성");
	}

	@Override
	public void updateUserInfo(UserInfo info) {
		System.out.println("오라클 DB 에 유저 수정 ");
	}

	@Override
	public void deleteUserInfo(int id) {
		System.out.println("오라클 DB 에 유저 삭제");
	}

	@Override
	public void selectUserInfo() {
		System.out.println("오라클 DB 에 유저 조회");
	}	

}

 

package basic.exercise.interfaces;

public class UserInfoClient {
	// main (메인 쓰래드 : 메인 작업자 )
	public static void main(String[] args) {
		
		// 사용자에게 정보를 입력하세요 --> Scanner 활용
		String inputUserName = "홍길동";
		String inputUserPw = "asd123";
		
		// DTO : 데이터들을 받아서(취합해서, 가공) 전달하는 역할을 가지고 있는 인스턴스를 말한다.
		UserInfo userInfo = new UserInfo(inputUserName, inputUserPw);
		
		
		// 데이터를 받아서 IUserInfoDao를 구현한 구현 클래스 에게 전달하고자 한다.
		// UserInfoMySqlDaoImpl, UserInfoMySqlDaoImpl
		// IUserInfoDao iUserInfoDao1 = new UserInfoMySqlDaoImpl();
		IUserInfoDao iUserInfoDao1 = new UserInfoOracleDaoImpl();
		
		iUserInfoDao1.insertUserInfo(userInfo);
		iUserInfoDao1.updateUserInfo(userInfo);
		iUserInfoDao1.deleteUserInfo(userInfo.getId());
		iUserInfoDao1.selectUserInfo();
	
	} // end of main

} // end of class