자바 백터를 배열로 전환에서 소스 해석좀 해주세여..

자바 백터를 배열로 전환에서 소스 해석좀 해주세여..

작성일 2005.11.04댓글 2건
    게시물 수정 , 삭제는 로그인 필요

자바로 자료구조를 공부하고 있는 자바초보인대요..소스가 너무 어려워서 이렇게 올려여..

우선 소스는..

 

import java.util.*;
public class TestVector extends Vector
{
 public TestVector() {
  super(1,1);
 }

 public void display() {
  Object obj;   //1) 
  int length = size();
  System.out.println("Vector length : "+length);
  
  for (int j=0; j<length; j++)
  {
   obj = elementAt(j);
   if(obj instanceof char[])
    System.out.println(String.copyValueOf((char[])obj));  //2)
   else
    System.out.println(obj.toString());  //3)
  }
 }

 

public static void main(String args[]) {
  TestVector v = new TestVector();
  int digit=12345;
  String s = new String("Roh, hiyoung");
  v.addElement(new Integer(digit));
  v.addElement(s);  //4)
  v.display();
 }
}

 

실행결과

Vector length : 2

12345

Roh,  hiyoung

 

 

빨간색으로 체크한부분이 소스분석이 안되는 부분인데요...

1)은 Object obj;라고 선언했는데..여기서 Object는 무엇이고..또 왜 이렇게 선언했는지..

전혀 모르겠구요..

 

2)은 String.copyValueOf((char[] obj)가 패키지라는걸..String클래스의 메소드라는것은 알겠는데..어떻게 쓰이는지 잘 모르겠습니다...이거 많이 찾아밨는데..도저히 몬찾아서..ㅡㅡㅋ

 

3)은 obj.toString();에서 toString()앞에 왜 obj가 붙었는지 너무 난해하고 또한 궁금합니다.

 

4)은 v.addElement(s);에서요...갑자기 어디서 s가 티어 나왔네여..-_-;; 이 s가 무엇인지..왜..s

가 쓰였는지좀 갈쳐주세욤..

 

자바 고수님들...소스점 분석해주세여..부탁드림니다..



profile_image 익명 작성일 -

1)Object obj;

 

자바는 모든 클래스의 최상위 클래스가 Object입니다.

Object로 변수를 생성하면 결국 모든 클래스를 저장할수 있다는 얘기가 되죠.

단, PrimitivType인 int, double, boolean...등등은 저장할수 없습니다.(이것이 자바가 완벽한 OOP가 되지 못하는점도 되죠. 사설은 이것만...)

특별하게 여기에서 Object로 변수를 선언한 이유는 바로 벡터에 있습니다.

API문서를 보시면, 벡터의 메소드 elementAt(int index) 의 반환형이 Object로 되어있습니다. (Object보다 상위의 형(클래스)가 있다면 반환치를 저장할수 있을지도 모르지만, 최상위 클래스 이므로 이것 이상은 없습니다.) 결론은 Object가 아니면 저장할수 없다는 것이죠.

벡터에서 j번째의 요소(Element)를 꺼내어 저장하기 위한 변수 라고 보시면 됩니다.

 

 

2)String.copyValueOf((char[])obj) 

 

먼저 위의 if문에서 취득한 오브젝트의 형을 비교합니다. (instanceof) 그후 캐릭터 배열일 경우에만 처리를 해주도록 해준 부분이로군요.

기본적으로 거의 모든 클래스는 toString()메소드를 가지고 있습니다.

그래서 그냥 출력(System.out.println(Object))을 하게되면 실지로는 이 toString()메소드를 호출해서 그 반환값을 출력하게 되죠.

그러나 이 프로그램의 경우 벡터에서 취득한 오브젝트가 캐릭터배열일 경우에 그 내용을 문자열 하나로 모아 출력하려 하는듯 보입니다.

그것을 위해서 다음의 몇가지 절차를 거치는군요.

 

  1. obj를 캐스팅 합니다.

  2. String클래스의 copyValueOf(char[]) 메소드를 이용 문자열을 얻어냅니다.

  3. 얻어낸 문자열을 출력합니다.

 

3) obj.toString()

 

위의 2)번에도 잠깐 설명이 있지만,

문자열을 출력하기 위해 얻어낸 오브젝트의 toString()메소드를 호출하는 것 입니다.

특별히 명시적으로 써주지 않을경우에도 toString()메소드가 호출됩니다.

궁금하시면 obj.toString()을 obj로 바꾸어 실행해 보셔도 같은 결과가 나오게 될겁니다.

 

4) v.addElement(s)

 

단순하게 벡터에 문자열(String)을 저장하는 부분입니다.

윗줄에 String s = new String("Roh, hiyoung");이 있군요.

자칫 String은 클래스가 아닌 기본형(Primitive Type)으로 오해를 하기 쉽지만, 엄연히 클래스 입니다.

사용상의 편의를 위해 생성시에

 

String s = "TestString";

 

도 가능하지만 엄밀히 말하자면

 

String s = new String("TestString");

 

쪽이 더 엄격한(?) 코딩이 되겠죠.(실지로 내부적으로는 바이트코드컴파일러가 변환해주고 있습니다.) 

 

실지로 이 부분 보다는 위의   v.addElement(new Integer(digit)); 가 더 이해하기 어려운 부분이라고 개인적으로 생각되는데....

노파심에 적자면, 위의 1) 에서 말했듯이 기본형(PrimitiveType)은 오브젝트가 아닙니다. 그런이유에서 벡터에 저장을 할수가 없게 되는것이죠. 그래서 랩퍼클래스(Wrapper Class)를 이용해서 기본형 digit 변수를 감싸듯 처리해서 오브젝트로 만든것이죠.

당연히 Integer 클래스의 toString()함수는 내부에 저장되어 있는 int 의 값을 스트링으로 변환해서 반환해줍니다. 그래서 출력할때에 다른 처리가 필요없게 되죠.

 

 

....덧붙임.....

예제프로그램이긴 하지만,  솔직히 Main함수에서 넣는 값은 예로써 별로 좋진 못한듯 합니다.

내부적으로 캐릭터 배열에 대한 처리가 있다면 그부분을 테스트 할수있게 캐릭터 배열을 만들어서 실행을 해보시는것이 좋을듯 합니다.

그리고 Java는 API에 모든 답이 있습니다. 클래스의 관계를 자세히 보면서 살펴보세요.

profile_image 익명 작성일 -

1) Object obj;

 

- 여기서 Object 는 모든 객체타입을 의미 합니다.

 

  저 ' obj ' 라는 변수는 모든 객체타입이 될수 있습니다. 여기서는 string 타입으로 쓰였죠?

 

 때문에 여기서는 저 변수를 String obj; 

 

 

2) String.copyValueOf((char[])obj)

 

  String 이라는 객체안에 copyValueOf(char[] data)

 

 다.  저위의 소스에서 이것은 ' String 타입의 세트로 obj라는 변수를 연속으로 뿌려줘라 '

 

 워 이런 뜻이겠네요.. 아.. 말빨이 딸리는대 이해하시지요?

 

 

3) obj.toString()

 

 obj 라는 변수를 스트링 타입으로 뿌려줘라  이런뜻입니다. 여기서 toString() 메소드는

 

 String타입 으로 변환해줄때 정말 많이쓰이는 메소드이므로 외워주는 센스 

 

4)  v.addElement(s);

 

 v라는 변수 (여기서 v는 Vector 이라고 할수 있습니다.) 이 벡터안에는  addElement(E obj)  이라는 메소드가 존재합니다. 이것은 한마디로 쉽게말해서 벡터안에다가 담는다는 의미라고 생각하시면 됩니다. 여기서 s 라는 변수는 String s = new String("Roh, hiyoung"); 이것입니다. 굳이 객체생성을 하지 말고 String s = "Roh, hiyoung"; 이것과 같은 의미지요.

 

 

잘 이해되셧나 모르겟네요.. 이정도는 java.sun.com 에 가시면 1분이면 모두알수 있는 내용입니다 ^^  즐프 하세영~!


자바 소스 해석좀 해주세요..

... 그러는데요, 자바 소스 코드하고 답이... 소스 해석좀 해주세요. 문제 : 다음... 더 궁금 하시면 쪽지로 연락 주세염..... 채택...

자바소스 해석해주세요 !! [내공검]

자바소스 해석좀 해주세요 !! 부탁입니다 ㅜㅜ 좀더 설명을 하자면 처음 문자열 하나를 읽고 pos값이 1씩 증가하면서 0.1초마다 글자수를 하나씩 늘려가면서...

자바스크립소스 해석좀 해주세요!

... split("/") var urlt = String(s2[3]) } 일단 소스중에 " 표시는 " 이기... 변수에 배열로 저장 var s = String(url).split('/'); // 배열의 6번째 값을 urlt...

자바 배열 코드 관련 해석좀..

... 제가 이번에 자바 공부를 하면서 다중배열과 for문에 이해를... 소스 설명을 해보면, package hard; public class ArrayTest{ public static void main(String...