Java 관련 질문입니다.

mayaabba의 이미지

A 라는 클래스르 생성하고 String 으로 변환하여 저장했습니다.

그럼 이렇게 저장된 String을 다시 A로 복원할 수 있는 방법이 있나요?

예를 들어

A a = new A();

Map map = new HashMap();

map.put("1", a.toString());

==========================================

String s = (String)map.get("1");

여기서의 s를 다시 A 클래스의 객체로 만들수 있는 방법이 있을까요?

도움 부탁드립니다.

cleansugar의 이미지

A의 생성자나 푸터를 알아야 대입해서 인스턴스가 생기죠.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

mayaabba의 이미지

A의 생성자나 푸터를 알아야 대입해서 인스턴스가 생기죠 <-- 이게 무슨 뜻인지 코드로 조금 자세하게 말씀해 주시면 감사하겠습니다.

cleansugar의 이미지

그냥 객체에 string 입력받아서 쓰듯이 한다는 뜻입니다.

클래스는 생성자에서 스트링을 입력받거나 a.put(string) 이렇게 하죠.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

mayaabba의 이미지

질문을 잘못 이해하신거 같습니다.

toString()을 통해 나오는 객체에 대한 해쉬코드를 이용해서

원래의 객체를 복원할수 있는지에 대한 질문이었습니다.

이에 대한 답변 부탁드립니다.

ageldama의 이미지

객체직렬화
- http://darkmirr.egloos.com/1169746
- http://en.wikipedia.org/wiki/Serialization
- http://en.wikipedia.org/wiki/Serialization#Java
- http://xstream.codehaus.org/
- http://code.google.com/p/kryo/

결론부터 말씀드리자면, 단순히 #toString()한 다음 그걸 바로 객체로 만들 방법은 없는데요, Serializable와 형제들을 찾아보시면 감 잡으실듯.

그리고 추가적으로 자바는 아니지만 이런 아이디어들을 잘 구현한것들을 몇가지 소개해드리자면
- http://docs.python.org/library/pickle.html
- http://www.haskell.org/tutorial/stdclasses.html :: Read, Show 타입클래스 참고

----
The future is here. It's just not widely distributed yet.
- William Gibson

chan77xx의 이미지

그렇게 쓰실려는 이유를 잘 모르겠습니다. (컴파일 에러 나니 그렇게 쓰실려고 하시는듯. )
혹 가능하더라도 그렇게 사용하시면 않될거 같네요.

// put
A a = new A();
HashMap < String, A > map = new HashMap < String, A > ();
map.put("a", a);

// get
A a = map.get("a");

혹 객체를 파일로 저장이나 네트워크로 원격지에 전송하기 위한 내용이시면 객체직렬화나 RMI 통신관련해서 찾아보심 될듯.

emptynote의 이미지

결론 안됩니다.

생각을 다른쪽으로 바꾸셨으면 하네요.

Hashtable key,value 인데 value 자체가 String인데

뜬금없는 String에
서 기존에 만들어 놓은 Object 로 연결은 불가합니다.

다만 string 값이 XML String이고 class A와 class 내부 변수값에 대한 정보를 담고 있고,

그 정보를 설정할수만 있다면 xml 만들 당시의 A클래스 인스턴스와 동일하게 값을 가지는 인스턴스 변수를 만들수는 있겠죠.

아 이런 식으로 하면 되기는 합니다.

(1) A 클래스가 시리얼 상속 받아야 하구요.
(2) A 클래스를 Binary 로 바꾼후 Hex string으로 만듭니다.
(3) Hashtable("1", (2) 에서 만든 hex string)
(4) hex string -> binary 로 만든후 A 클래스 인스턴스를 만들면 됩니다.

참고 : java.io.Serializable, java.io.ObjectInputStream, java.io.ObjectOutputStream
주의점) ObjectOutputStream 로 쓴 binary 를 통해 ObjectInputStream 로 얻은 인스턴스 변수가 원하시는 복원인가에 대한 판단이 필요합니다.

개인적으로 묻고 싶은것이 자바 배우시는 중이시나가요?
자바 배우시는 중이시라면 자바하다가 자빠지지 않도록
여기 kldp에 컴파일, OS 만드시고 계시는분들의 이야기에도 귀를 기울이시는 멋쟁이가 되시기 바랍니다.
또한 나빌레라 님의 블러그 http://kldp.org/blog/2942 에 귀한 이야기도 읽어 보시기 바랍니다.

mayaabba의 이미지

문제는 직렬화로 해결 했습니다.

cleansugar님 ageldama님, chan77xx님, k9200544 님 모두 감사드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.