글쓴이 :곽원철 2000년 7월 19일 15:11:54
In Reply to: [Q]자바서버와 에플릿간의 소켓으로 객체전송중 발생한문제 posted by 장정문 on 2000년 7월 18일 11:12:56:
글쎄요 저는 Visual J++ 을 써본 적이 없어서 잘 모르겠는데...
"자바서버와 에플릿간의 소켓으로 객체전송"을 하시려면 전송할 객체가 Serializable해야 합니다. 이건 뭐 별게 아니고 그냥 전송하고자 하는 객체 class가 다음과 같이 정의되어 있어야 된다는 겁니다.
public class A implements Serializable{
...
}
생성된 source를 한번 확인해 보시죠? 어쩌면 툴에서는 Serializable하지 않아도 그냥 stream으로 읽고 쓰기를 해주는지도 모르겠군요. 아니면 할 수 없구요...
Serializable은 일종의 marker interface로, class 정의에 "implements Serializable"이라고 적어주기만 하면 끝입니다. 이렇게 되면 VM이 객체를 stream에 읽고 쓸 때(socket을 통한 전송도 결국엔 모두 stream을 통해 이루어지죠)조금 다른 메카니즘을 거칩니다. 데이빗 크로넨버그의 영화 'the Fly'에 나오는 물체전송기를 생각하시면 되겠습니다. 제대로 안하니까 전송된 원숭이가 떡이 돼버리죠?
String을 비롯한 Java core API class는 대부분 Serializable 합니다. 이때문에 별 신경 안쓰고도 argument로 자유롭게 주고 받을 수 있는 것이죠.
writeObject나 readObject mtd.는 Serializable한 object를 stream에 읽고 쓸 때 VM이 기본적으로 제공하는 방식이 아닌 다른 방식을 사용할 때 implement하면 됩니다. 아주 특별한 경우가 아니면 사용하실 필요가 없습니다.