자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
26. 예외처리
26-1. 예외란?
프로그램에 문제가 있는 것을 말하며, 예외로 인해 시스템 동작이 멈추는 것을 막는 것을 예외처리라고 한다.
Exception : Error는 개발자가 대처할수 있음
Error : 개발자가 대처할 수 없음
Exception - Checked Exception : 예외처리를 반드시 해야하는 경우(네트워크, 파일 시스템 등)
Unchekced Exception : 예외처리를 개발자의 판단에 맡기는 경우(데이터 오류 등)
26-2. Exception 클래스
Exception 클래스 하위 클래스로 NullPointerException(객체를 가리키지 않고 레퍼런스를 이용할 때), ArrayIndexOutOfBoundException(배열에서 존재하지 않는 인덱스 참조), NumberFormatException(숫자에 문자를 넣었을 떄)
26-3. try~catch
개발자가 예외처리가 가장 쉽고 많이 사용되는 방법
try {
예외가 발생할 수 있는 코드
} catch (Exception e) {
예외가 발생했을 때 처리할 코드
}
package pjtTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int i = 10;
int j = 0;
int r = 0;
System.out.println("Exception BEFORE");
try {
r = i/j;
} catch(Exception e) {
e.printStackTrace();
String msg = e.getMessage();
System.out.println(msg);
}
System.out.println("Exception AFTER");
}
}
catch 구문을 여러 개 두어 여러 개의 예외처리를 할 수 있다.
try 안에서 예외처리가 발생하면 바로 catch로 넘어간다. try 안에서 예외 이후의 코드는 처리되지 않는다.
finally 구문에 이용해 예외 발생 여부에 상관없이 언제나 실행되는 코드를 넣어줄 수 있다
26-6. throws
예외 발생 시 예외 처리를 직접 하지 않고 호출한 곳으로 넘긴다.
package pjtTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Main m = new Main();
try {
m.firstMethod();
}catch(Exception e) {
e.printStackTrace();
}
}
public void firstMethod() throws Exception {
secondMethod();
}
public void secondMethod() throws Exception {
thirdMethod();
}
public void thirdMethod() throws Exception {
System.out.println("10 / 0 = " + (10/0));
}
}
예외를 직접 처리하지 않고 나를 호출한 곳으로 던져버리는 것
27. 입력과 출력
27-1 : 입/출력이란?
프로그램과 입출력 대상 사이에 stream으로 입출력을 한다.
27-2 입출력 기본 클래스
입출력에 사용되는 기본 클래스는 1byte 단위로 데이터를 전송하는 InputStream, OutputStream이 있다.
InputStream : FileInputStream, DataInputStream, BufferedInputStream
27-3. FileInputStream, FileOutputStream
파일에 데이터를 읽고 쓰기 위한 클래스
read(), write() 메서드.
read() : 1byte씩
read(byte[])
write(byte[] b) : 전체 쓰기
write(byte[], int off, int len) : 시작점~시작점+길이까지 쓰기
package pjtTest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
InputStream inputStream = null;
try {
inputStream = new FileInputStream("C:\\Users\\sarmi\\OneDrive\\바탕 화면\\Study\\컴터\\testtest.txt");
int data = 0;
while(true) {
try {
data = inputStream.read();
}catch(IOException e) {
e.printStackTrace();
}
if(data == -1) break;
System.out.println("data : " + data);
}
}catch(FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(inputStream!=null) inputStream.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
package pjtTest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
InputStream inputStream = null;
try {
inputStream = new FileInputStream("C:\\Users\\sarmi\\OneDrive\\바탕 화면\\Study\\컴터\\testtest.txt");
int data = 0;
byte[] bs = new byte[3];
while(true) {
try {
data = inputStream.read();
}catch(IOException e) {
e.printStackTrace();
}
if(data == -1) break;
System.out.println("data : " + data);
for(int i = 0; i<bs.length; i++)
System.out.println("bs[" + i + "] : " + bs[i]);
}
}catch(FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(inputStream!=null) inputStream.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
package pjtTest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream("C:\\Users\\sarmi\\OneDrive\\바탕 화면\\Study\\컴터\\testtest.txt");
String data = "Hello java World!!";
byte[] arr = data.getBytes();
try {
outputStream.write(arr);;
} catch(IOException e) {
e.printStackTrace();
}
} catch(FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(outputStream!=null) outputStream.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
여기서 byte[] arr = data.getBytes();
outputStream.write(arr, 0, 5);
로 글자 수를 지정해 입력할 수 있다.
27-5. DataInputStream, DataOutputStream
byte 단위의 입출력을 개선해 문자열을 좀 더 편리하게 다룰 수 있다.
package pjtTest;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String str = "Hello Java World";
OutputStream outputStream=null;
DataOutputStream dataOutputStream = null;
try {
outputStream = new FileOutputStream("C:\\\\Users\\\\sarmi\\\\OneDrive\\\\바탕 화면\\\\Study\\\\컴터\\\\testtest.txt");
dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF(str);
} catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(dataOutputStream!=null) dataOutputStream.close();
} catch(Exception e) {
e.printStackTrace();
}
outputStream.close();
}
}
}
27-6. BufferedReader, BufferedWriter
byte 단위의 입출력을 개선해 문자열을 좀 더 편리하게 다룰 수 있음
package pjtTest;
import java.io.BufferedReader;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String fileName = "hello.txt";
BufferedReader br = null;
FileReader fr = null;
try {
fr = new FileReader(fileName);
br = new BufferdReader(fr);
String strLine;
while((strLine = br.readLine())!=null) {
System.out.println(strLine);
}
}catch(IOException e) {
e.printStackTrace();
}finally {
try {
if(br!=null) br.close();
if(fr!=null) fr.close();
}catch(IOException ex) {
ex.printStackTrace();
}
}
}
}
package pjtTest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String fileName = "hello.txt";
BufferedWriter bw = null;
FileWriter fw = null;
try {
String str = "Hello~\n";
str == "Hello \n";
bw = new BufferedWriter(fileName);
fw = new FileWriter(bw);
bw.write(str);;
}catch(IOException e) {
e.printStackTrace();
}finally {
try {
if(br!=null) bw.close();
if(fr!=null) fw.close();
}catch(IOException ex) {
ex.printStackTrace();
}
}
}
}
28. 네트워킹
28-1. 네트워크 사이에 입출력을 이용해 데이터를 입력하고 출력한다.
28-2. 소켓
네트워크 상에서 데이터를 주고받기 위한 장치.
28-3. Socket 클래스
서버는 클라이언트를 맞을 준비를 하고 있다가 클랑리언트 요청에 반응한다.
package pjtTest;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(9000); //포트번호
System.out.println("클라이언트 맞을 준비 완료");
socket = serverSocket.accept();
System.out.println("클라이언트 연결!");
System.out.println("socket : " + socket);
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
if(socket!=null) socket.close();
if(serverSocket!=null) serverSocket.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
}
28-4.Client와 Server 소켓
서버에 ServerSocket을 준비하고 클라이언트에서 Socket 이용해서 접속.
package pjtTest;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("localhost", 9000);
System.out.println("서버 연결");
System.out.println("socket : " + socket);
}catch(IOException e) {
e.printStackTrace();
}finally {
try {
if(socket!=null) socket.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
package pjtTest;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(9000);
socket = serverSocket.accept();
System.out.println("클라이언트 연결!");
} catch(IOException e) {
e.printStackTrace();
} finally {
try {
if(socket!=null) socket.close();
if(serverSocket!=null) serverSocket.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
'개발 공부 > Java' 카테고리의 다른 글
자바 프로그래밍 입문 강좌 18~25. JAVA 상속 및 클래스 (0) | 2020.07.05 |
---|---|
자바 프로그래밍 입문 강좌 11~17. JAVA 객체 (0) | 2020.07.05 |
자바 프로그래밍 입문 강좌 2~10 JAVA 기초 문법 (0) | 2020.07.05 |
(new) 자바 프로그래밍 입문 강좌 1. 오리엔테이션 (0) | 2020.07.05 |