
2,3번 둘다 정답.
인터페이스의 추상 메소드는 기본적으로 public abstract으로 선언되며, 인터페이스 내부에서 static이나 private로 선언할 수 없습니다.
또한, Java 8부터 인터페이스 내부에 default 메소드를 선언할 수 있게 되었는데, 이는 기본적으로 public 접근제한자를 가지므로, default void insert(){}는 올바르게 선언된 것입니다.
예외 처리가 발생하는 함수의 코드 영역에서 예외를 외부로 전송하는 키워드는 throw 입니다.
throw 키워드는 예외 객체를 명시적으로 생성하여, 해당 예외 객체를 호출한 곳으로 전달합니다. 반면에 throws 키워드는 예외가 발생할 가능성이 있는 메서드나 생성자를 정의할 때, 해당 예외를 호출한 곳에서 처리하도록 선언하는 키워드입니다.
변수, 변수의 타입, 캐스팅 매우 중요했다.
만들었던 Account 파일은 현업에서 거의 안쓴다.
for while도 거의 안썼다.
인터페이스 기능정의와 그것을 implements 받아서 구현하는 것 중요했다!
상속, 다형성... 중요
예외처리 복습
package bank;
public class Account {
private String accNo;
private double balance;
public Account() {
this.accNo = MakeAccountNumber.makeAccNum();
}
public Account(double balance) throws Exception {
this();
if(balance < 0) {
throw new Exception("ER0001");
}
this.balance = balance;
}
public Account(String accNo, double balance) {
this.accNo = accNo;
this.balance = balance;
}
public void withdraw(double money) throws Exception {
if(money <= 0) {
throw new Exception("ER0002");
}
if(balance < money) {
throw new Exception("ER0003");
}
balance -= money;
}
@Override
public String toString() {
return "Account [accNo=" + accNo + ", balance=" + balance + "]";
}
}
package bank;
public class Atm {
public static void main(String[] args) {
Account acc1 = null;
try {
acc1 = new Account(900);
System.out.println(acc1);
acc1.withdraw(1000);
} catch (Exception e) {
//System.out.println("고객센터에 문의하세요 "+ e.getMessage());//오류발생 메세지를 출력해줌.
System.out.println(Makemessage.makeMessage(e.getMessage()));
System.out.println(e.getMessage());
}
}
}
package bank;
public class Makemessage {
public static String makeMessage(String code) {//String으로 된 code를 리턴한다.
String result = "";
switch(code) {
case "ER0001" : result = "계좌개설 실패...";
break;
case "ER0002" : result = "음수 입력...";
break;
case "ER0003" : result = "잔액 부족...";
break;
default : result = "고객센터에 문의하세요...";
}
return result;
}
}
MakeAccNumber은 day05 코드 이용.

ItemService는 DAO로 금결원에 보낸다.
(itemservice -> dao -> oracle)
ItemService는 보냈으면 은행 계좌정보를 업데이트를 한다.
(itemservice -> 업데이트 -> 정보서버)
ItemService는 고객에게도 알림을 보낸다.
(itemservice -> sms -> sms서버)

App에서 에러가 발생할 수 있다? 그럼 그 전단계부터 예외처리를 해주기 시작해야함.
UserDAO에 예외처리사항을 넣고 싶다? 에러발생. 전단계부터 처리해줘야함(DAO인터페이스)


DAO, Service를 수정했다? -> UserDAO, UserService도 수정해줘야 한다.

만약 DAO에 익셉션을 던지지 않고 UserDAO에 예외선언을 추가하면 오류가 발생함.

UserDAO를 수정했더니 UserService를 수정해줘야해.
그런데 UserService에서 try catch로 예외처리를 해버리면 App에서는 출력이 안된다. 따라서 처리 없이 던진다.
try catch throw e + 선언을 통해 던질 수가 있고
throws로 던질 수도 있다. 하지만 그냥 던져버리게 되면 어디서 어떤 에러가 발생했는지 로그를 남길 수가 없다.

위와 같이 처리해줘야 한다.

마지막으로 App에서 처리.
UserDAO에서 특정 프로세스에서 예외처리를 하고싶다? -> DAO, Service 상위단계에서 예외처리를 할수도 있다는 선언을 하고 -> UserService도 예외를 받아서 다시 던지고 -> App에서 처리함.
ItemDTO 만들기 : Item구성요소 지정. getter setter, 생성자, toString 구성, 예외 발생할 수 있음 throws설정해서 던지기
ItemDAO 만들기 : DAO를 implements받아서 구현하기. DAO엔 제네릭<K, v>로 설정되어있고, ItemDAO만들면서 값 넣어주기. 각 insert, delete, update에 예외 설정하고 예외 던지기. 에러코드 설정해주기!
ItemService 만들기 : DAO 패키지를 먼저 받기.
DAO<Integer, ItemDTO> dao = new ItemDAO();
ItemService 함수인 register, remove, modify에선 DAO의 메소드를 이용해야하기 때문. 예외발생은 throw해서 App에서 처리가능하도록 던지기.
App : try catch로 예외처리 하기.
System.out.println(Makemessage.makemessage(e.getMessage()));이용하면 에러코드 내용을 출력해주는 Makemessage에서 작성된 에러내용 말해줌.
