문제
DaoExample 클래스의 main() 메소드에서 dbWork() 메소드를 호출할 때 OracleDao와 MysqlDao 객체를 매개값으로 주고 호출하였다. dbWork() 메소드는 두 객체를 모두 매개값으로 받기 위해 DataAccessObject 타입의 매개 변수를 가지고 있다. 실행 결과를 보고 DataAccessObject 인터페이스와 OracleDao, MySqlDao 구현 클래스를 각각 작성해보자.
실행 결과
코드 작성
[DaoExample.java : 클래스]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class DaoExample {
public static void dbWork(DataAccessObject dao) {
dao.select();
dao.insert();
dao.update();
dao.delete();
}
public static void main(String[] args) {
dbWork(new OracleDao());
dbWork(new MySqlDao());
}
}
|
cs |
[DataAccessObject.java : 인터페이스]
1
2
3
4
5
6
|
public interface DataAccessObject {
public void select();
public void insert();
public void update();
public void delete();
}
|
cs |
CRUD를 4가지 추상메소드로 구현하였다.
인터페이스의 구성요소는 총 4가지가 있다. (상수, 추상 메소드, 디폴트 메소드, 정적 메소드)
상수는 인터페이스의 고정된 값으로 런타임 시에 데이터를 바꿀 수 없다.
추상메소드는 객체가 가지고 있는 메소드를 설명한 것으로 호출할 때 어떤 매개값이 필요하고,
리턴 타입이 무엇인지만 알려준다.
인터페이스에서 추상 메소드를 구현 시 해당 인터페이스를 구현하는 클래스는 반드시
추상 메소드를 모두 오버라이딩 해서 메소드를 구현시켜야 한다.
디폴트 메소드는 클래스의 인스턴스 메소드와 같지만 선언은 인터페이스에서 하고 구현은
클래스 구현 객체에서 한다. 디폴트 메소드는 구현하는 클래스에서 반드시 작성하지 않아도
된다. 디폴트 메소드를 사용하는 이유는 기존 인터페이스를 확장해서 새로운 기능를 추가하기
위해서이다.
정적 메소드는 인터페이스로 바로 호출이 가능하다.
[OracleDao.java : 클래스(구현 객체)]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public class OracleDao implements DataAccessObject{
@Override
public void select() {
System.out.println("Oracle DB에서 검색");
}
@Override
public void insert() {
System.out.println("Oracle DB에 삽입");
}
@Override
public void update() {
System.out.println("Oracle DB를 수정");
}
@Override
public void delete() {
System.out.println("Oracle DB에서 삭제");
}
}
|
cs |
[MySqlDao.java : 클래스(구현 객체)]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class MySqlDao implements DataAccessObject {
@Override
public void select() {
System.out.println("MySql DB에서 검색");
}
@Override
public void insert() {
System.out.println("MySql DB에 삽입");
}
@Override
public void update() {
System.out.println("MySql DB를 수정 ");
}
@Override
public void delete() {
System.out.println("MySql DB에서 삭제");
}
}
|
cs |
인터페이스 구현 객체들은 위와 같이 인터페이스에서 선언한 추상메소드들을 클래스 구현 객체 특성에 맞게 반드시 오버라이딩하여 작성해야 한다.
'IT > 연습문제' 카테고리의 다른 글
이것이 자바다 11장 연습문제 : 기본API 클래스 (0) | 2020.09.17 |
---|---|
자바 연습문제 : 예외처리(try~catch) (0) | 2020.09.12 |
자바 연습문제 : Up&Down 게임 (0) | 2020.09.08 |
클래스 연습문제 풀어보기(계좌관리 프로그램) (0) | 2020.09.07 |
클래스 연습문제 풀어보기(은행계좌) (0) | 2020.09.07 |