package exception.ex1;
public class NetworkServiceV1_2 {
public void sendMessage(String data) {
String address = "http://example.com";
NetworkClientV1 client = new NetworkClientV1(address);
client.initError(data); // 추가
String connectResult = client.connect();
if (isError(connectResult)) {
System.out.println("[네트워크 오류 발생] 오류코드: " + connectResult);
return;
}
String sendResult = client.send(data);
if (isError(sendResult)) {
System.out.println("[네트워크 오류 발생] 오류코드: " + sendResult);
return;
}
client.disconnnect();
}
private boolean isError(String connectResult) {
return !connectResult.equals("success");
}
}
package exception.ex1;
import java.util.Scanner;
public class MainV1 {
public static void main(String[] args) {
// NetworkServiceV1_1 networkServiceV0 = new NetworkServiceV1_1();
// NetworkServiceV1_2 networkServiceV0 = new NetworkServiceV1_2();
NetworkServiceV1_3 networkServiceV0 = new NetworkServiceV1_3();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("전송할 문자: ");
String input = scanner.nextLine();
if (input.equals("exit")) {
break;
}
networkServiceV0.sendMessage(input);
System.out.println();
}
System.out.println("프로그램을 정상 종료합니다.");
}
}
자바의 경우 GC가 있기 때문에 JVM 메모리에 있는 인스턴스를 자동으로 해제할 수 있다.
하지만 외부 연결과 같은 자바의 외부 자원은 자동으로 해제되지 않는다.
따라서, 외부 자원을 사용한 후에는 연결을 해제하여 외부 자원을 반납해야한다.
package exception.ex1;
public class NetworkServiceV1_3 {
public void sendMessage(String data) {
String address = "http://example.com";
NetworkClientV1 client = new NetworkClientV1(address);
client.initError(data); // 추가
String connectResult = client.connect();
if (isError(connectResult)) {
System.out.println("[네트워크 오류 발생] 오류코드: " + connectResult);
return;
} else {
String sendResult = client.send(data);
if (isError(sendResult)) {
System.out.println("[네트워크 오류 발생] 오류코드: " + sendResult);
return;
}
}
client.disconnnect();
}
private boolean isError(String connectResult) {
return !connectResult.equals("success");
}
}
현재 해당 코드들을 보면 정상 흐름, 예외 흐름이 잘 구분이 되어 있지 않다.
코드 해석도 어렵고 심지어 예외 흐름의 코드가 훨씬 많다.
어떻게 하면 정상흐름과 예외흐름을 구분할 수 있을까?
지금과 같이 반환값을 사용해서 예외 처리를 하는 방식으로는 해결할 수 없을 것이다.
이런 문제를 해결하기 위해 예외 매커니즘이 존재한다.