본문 바로가기
  • AI (Artificial Intelligence)
Programming/Java

JAVA: 객체 직렬화, 멀티 쓰레드(Thread)

by 로샤스 2014. 11. 3.

★ 객체 직렬화

일반적으로 메모리에 생성된 객체의 인스턴스는 "비영속성"을 갖는다.

파일이나 데이터베이스에 저장된 데이터처럼 영속성을 가지기 위해서 자바에서는 '객체 직렬화' 기능을 제공한다. 객체 직렬화를 사용하면 파일이나 네트워크를 통해 영속성을 유지할 수 있다.

 

클래스 3개가 필요하다.

 

1. Person

- 게터와 생성자를 사용해서 이름과 나이를 불러온다.

- Serializable을 implements 해오는 게 특징. 보통 인터페이스의 용도는 강제로 오버라이딩을 하는 것이 목적인 경우가 많지만, 여기서는 Serializable의 기능을 사용할 수 있게 하는 의미로 쓰인다.

 

2. 파일 저장 (FileOutputStream)

- serial.dat이라는 파일 안에 생성자의 내용을 불러들여 저장해 줌.

- 자원의 낭비를 막기 위해 사용 후  close() 메서드를 이용해 닫아주어야 함.

 

3. 파일 출력 (FileInputStream)

- 저장된 serial.dat 파일을 불러와서 출력해줌.

- 게터 앤 세터의 기능을 사용해 이름과 나이를 불러와 출력할 수 있도록 코딩됨.

- catch(){} 문이 3개가 있는데, 이를 한꺼번에 통합해줄 수 있음. Exception 클래스를 사용해 주면 됨!

 

결과

 

 

★ 멀티 쓰레드

☆ 싱글 쓰레드 실습

- run() 메서드는 각 작업을 1씩 증가시켜 목표치까지 수행해준다.

- 싱글 쓰레드는 A작업이 끝난 후 차례로 B,C작업이 수행된다.

 

결과



☆ 멀티 쓰레드 실습(1) - Thread

- 멀티 쓰레드를 하는 방법은 2가지가 있다.

- 그 중 하나인 멀티 쓰레드 기능을 수행하는 "Thread"라는 클래스가 라이브러리에 저장되있다.

- 이를 상속받아주면 되며, 메서드는 run()이 아닌 start()이다.

- 멀티 쓰레드 이기 때문에 작업은 순서대로 이루어지지 않으며, 컴퓨터의 빠른 처리속도 기준으로 작업이 이루어진다.

 

결과

 

☆ 멀티 쓰레드 실습(2) - Runnable

- 이해를 돕기 위해 빈 A 클래스를 생성하였다.

- A 클래스를 상속받는 경우, 다중상속이 불가능하므로 멀티 쓰레드를 상속받을 수 없다. 이런 경우 implements를 사용하여 Runnable 클래스를 사용할 수 있다.

- 메인 메서드에서 사용법은 실습(1)과 조금 다르다. 객체를 생성할 때 "Thread" 클래스를 불러온다. 그리고 그 안에 Runnable 클래스를 상속받은 YourThread의 임시객체를 생성해준다.

 

결과

 

 

 

 

 

 

 

출처 : http://kim22036.tistory.com/302

 

 

 

 

 

댓글