개인참고자료 71

소켓

소켓 네트워크 프로그래밍에서 소켓이란 "사용자에게 네트워크에 접근할 수 있는 인터페이스를 제공해준다"라는 의미가 있다. 소켓을 사용하려면 소켓 생성(소켓 열기), 소켓을 통한 송신과 수신, 소켓 소멸(소켓 닫기)의 세가지 과정을 이해해야 한다. 소켓은 TCP와 UDP를 이용한 두가지 방법이 있으며 세가지 소켓 형식이 있다. 소켓은 유닉스 시스템에서 파일 입출려과 같은 방식으로 사용되도록 만들어져 있다. 유닉스 시스템은 파일을 입출력하기 위해서 다음과 같은 과정을 거친다. 파일 열기 → 파일 읽기/쓰기 → 파일 닫기 소켓도 위의 방식을 그대로 받아들여 다음과 같이 같은 방식으로 통신하도록 설계도었다. 소켓 열기 → 소켓을 통한 읽기/쓰기 → 소켓 닫기 소켓의 세 가지 형식 소켓의 세 가지 형식에는 SOCK..

객체 스트림 - 예외

객체 스트림 객체 스트림의 사용은 쉽지만 기능은 강력하다. 그리고 객체 스트림은 RMI에 내부적으로 사용되는 기술이므로 객체 스트림을 잘 알고 있어야 한다. ※ 객체 스트림을 사용할 때 java.io.Serializable 인터페이스를 꼭 구현한다. (Serializable은 구현할 메소드가 없는 마크 인터페이스이다.) 자바 API의 java.lang 패키지에서 어떠한 클래스가 java.io.Serializable 인터페이스를 구현하는지 확인한다. java.io.Serialzable 인터페이스를 구현한 클래스는 다른 클래스의 필드일 경우, 포함하고 있는 클래스가 직렬화될 때 함께 직렬화할 수 있기 때문이다. 객체 스트림에서 주의해야 할 점은, 파일에 객체 기반 스트림으로 저장할 때 객체 여러 개를 이어서..

객체 스트림 - ObjectOutputStream와 ObjectInputStream

ObjectOutputStream 클래스의 생성자와 메소드 ObjectOutputStream 클래스는 객체를 직렬화하기 위해서 사용된다. ObjectOutputStream 클래스는 다음과 같이 선언되어 있다. public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants ObjectOutputStream 클래스에 있는 생성자는 두 가지인데, 보통 OutputStream을 인자로 전달받는 생성자가 사용된다. public ObjectOutputStream(OutputStream out) throws IOException ObjectOutputStream의 생성자는 인자로 OutputStream..

객체 스트림 - 윈도우 저장과 읽기

윈도우 저장과 읽기 객체 직렬화가 불가능한 객체는 전송되지 않는다. 1. 윈도우 객체인 HelloWindow.java를 작성한다. 2. 객체 직렬화 기술을 이용해서 HelloWindow를 파일로 저장할 WindowObjectOutputStreamTest.java를 작성한다. 3. 파일에 저장된 윈도우 객체를 읽어 들일 WindowObjectInputStreamTest.java를 작성한다. 윈도우 객체를 만든 후 저장하고 읽어오는 예제다. import java.io.Serializable; import java.awt.event.*; import java.awt.*; public class HelloWindow extends Frame implements Serializable{ public HelloWi..

객체 스트림 - 나의 책 목록(객체 스트림을 이용해 저장, 읽기)

나의 책 목록 1. 책목록은 java.util.ArrayList에 저장한다. 2. 책의 정보를 저장하기 위한 Book 클래스를 만든다. Book 클래스는 마샬링될 수 있도록 반드시 java.io.Serializable 인터페이스를 구현해야한다. 3. Book 클래스는 필드로서 isbn, 제목, 저자, 가격 정보를 포함하며, 각각 java.lang.String, java.langString, java.lang.String, int형으로 선언된다. 4. 마샬링을 하려면 java.io.ObjectOutputStream을 이용해야 하며, 언마샬링을 하려면 java.io.ObjectInputStream을 이용하면 된다. 5. 객체를 직렬화해서 저장할 파일명은 booklist.dat다. 객체의 경우 마샬링을 하려면..

객체 스트림 - 소개(마샬링, 언마샬링)

객체 스트림 객체스트림이란 객체를 아주 쉽게 전송할 수 있는 방법을 말한다. 객체가 전송된다는 의미는 객체가 내부적으로 참조하는 개체들 역시 함께 전송되는 것을 뜻한다. 객체가 전송되거나 쓴다고 하면, 보통 데이터만 해당된다고 생각할 수 있다. 객체가 전송된다는 것은 애플릿(Applet), 윈도우 등도 전송될 수 있다는 것을 의미한다. 객체를 전송하려면 다음과 같은 순서를 거쳐야 한다. 1. 데이터를 특정 통신 채널로 보낼 수 있는 형태로 바꾼다. 이를 마샬링(marshaling)이라고 한다. 2. 변환된 데이터를 전송하거나 쓴다. 3. 변환된 데이터를 읽어 들여 원래의 형태로 변환한다. 이를 언마샬링(unmarshaling)이라고 한다. 마샬링 마샬링이란 데이터를 바이트의 흐름으로 만들어 TCP와 같은..

객체 스트림 - 생각해볼 문제와 간단한 예제(Vector를 이용한 파일 저장, 읽기)

객체 스트림의 간단한 예제 Vector v = new Vector(); Vector v1 = new Vector(); Vector v2 = new Vector(); Vector v3 = new Vector(); v1.addElement(new String("data 1")); v1.addElement(new String("data 2")); v1.addElement(new String("data 3")); v2.addElement(new String("data 4")); v3.addElement(v2); v.addElement(v1); v.addElement(v3); Vector 네 개가 선언된 후, 각각의 Vector 안에 String과 Vector를 추가한다. 그림으로 표현하면 다음과 같다. 메모리에..

패턴, 자바빈즈, 프레임웍(IoC, MVC, XML 역할)

패턴, 자바빈즈, 프레임웍 디자인 패턴 디자인 패턴이란 프로그래밍에서 발생하는 여러 가지 문제 영역에 대한 해결 방법들을 모아서 정리해놓은 것이다. GoF(Gang of Four)가 여러 가지 패턴들을 모아 "디자인 패턴"이라는 책을 내면서부터 디자인 패턴이라는 용어가 일반화되기 시작했다. GoF의 디자인 패턴 중 하나를 예로 들면 데코레이터(Decorator)라는 패턴이 있다. 래퍼(Wrapper)라는 말로도 쓰이는데 이것은 어떤 객체에 기본적인 동작은 유지하면서 부가적인 기능을 넣고 싶을 때 사용한다. JDBC에서 수행한 쿼리를 로그로 남기고 싶을 때 데코레이터 패턴을 사용하는 예제이다. public class LoggableStatement implements Statement { private S..

객체 스트림

객체 스트림 객체스트림은 객체를 전송시킬 수 있는 방법을 제공한다. 객체 안에 저장된 내용을 파일로 저장하거나 네트워크로 전송하려면 많은 노력이 필요하다. 객체에 있는 필드의 내용을 일일이 읽어 들여 하나씩 저장하거나 전송을 해야 하기 때문이다. 그리고 네트워크 프로그래밍 이라면 반대 쪽에서 전송한 데이터를 읽어 들이기 위해 전송한 순서대로 읽어 들여야 한다는 번거로움도 있다. 이런 문제를 쉽게 해결할 수 있게 해주는 것이 객체 스트림이다. 그렇지만 객체 스트림의 경우에는 마샬링(marshaling)과 언마샬링(unmarshaling)이라는 작업을 해야하므로 추가적인 과부하가 발생할 수 있다는 문제가 있다 하지만 요즘의 프로그래밍의 추세는 과부하보다는 조먿 손쉬움 프로그래밍 좀더 쉽게 유지보수 할 수 있..

문자 스트림 - StringReader와 StringWriter

StringReader와 StringWriter StringReader와 StringWriter 클래스는 각각 CharArrayReader, CharArrayWriter와 흡사한 클래스다. StringReader는 문자열로부터 읽어 들이기 위한 클래스고, StringWriter는 자신의 내부 저장 공간에 출력된 내용을 문자열로 반환 할 수 있는 기능을 가진 클래스다. StringReader 클래스 생성자 생성자 설명 StringReader(String s) String s로 부터 읽어 들이는 StringReader 객체를 생성한다. StringWriter 클래스 생성자 생성자 설명 StringWriter() 내부 저장 공간이 있는 StringWriter 객체를 생성한다. StringWriter 클래스의 ..