Java - Array를 출력하기.

1 분 소요

Java - Array를 어떻게 출력할 수 있나?

  • 사실 아래 코드와 같이, 배열의 원소를 하나씩 출력하는 것은 어렵지 않습니다.
  • 값을 하나씩 하나씩 출력하면 되죠.
int[] intArr = {1, 2, 3, 4};

for (int i=0; i<intArr.length; i++) {
    System.out.println(intArr[i]);
}
  • 그런데, 이 아이를 한번에 출력하면 어떻게 될까요?
  • {1, 2, 3, 4}가 나와야 할 거라고 생각했지만, 사실은 [I@f6f4d33라는 이상한 값이 나옵니다. 이 값은 intArr.toString()과 동일하죠.
  • 구조를 보면, [I는 “Array of int”를 의미하는 것으로 보이고, @를 기준점으로 뒤쪽은 memorey address에 대한 HashCod로 보이네요(왜 메모리를 그냥 보여주지 않고, hascode를 보여주지? 싶지만, 메모리 주소를 알게 되면 리스키한 부분이 생기니까 일부러 가려서 보여주는 것이 아닐까, 싶습니다 홍홍).
  • java는 “객체 지향 언어(object oriented language)”입니다. 따라서, intArr 또한 객체이고, 얘를 출력하게 되면 알아서 내부의 .toString()를 출력하게 되죠. 그리고 이 메소드는 기본적으로는 위에서 보여준 것과 같이, “메모리 주소값을 출력하는 것이 default”인 것이죠. 혹은 이 객체의 parentClass의 메소드가 그렇게 정의되어 있는 것이죠.
  • 그리고 이 때, toString()의 default는 다음과 같이 3 부분으로 정의됩니다.
    • intArr.getClass().getName(): 해당 객체의 클래스 이름
    • @: 구분점
    • Integer.toHexString(intArr.hashCode()): 해당 객체의 주소값에 대한 hasCode를 HexString으로 변환한 값
int[] intArr = {1, 2, 3, 4};

System.out.println(intArr); // [I@f6f4d33
System.out.println(intArr.toString()); // [I@f6f4d33
System.out.println(intArr.getClass().getName() + "@" + Integer.toHexString(intArr.hashCode())); // [I@f6f4d33

.toString()을 Overriding해주면 되는 것 아냐?

  • 앞서 말한 바와 같이, 결국 .toString()를 재정의해주면, 즉 Over-ridding해주면 끝나는 문제이기는 합니다.
  • 하지만, 음, 이걸 어떻게 적용할 수 있을지 모르겠네요.
  • 혹시 아시는 분 있으면 알려주세요.

Arrays.toString() 을 사용하자

  • java.utils.Arrays 클래스에는 java의 Array 활용시 유용하게 사용할 수 있는 다양한 static method들이 있습니다. static method이기 때문에, 객체를 생성하지 않아도 바로 사용할 수 있죠.
  • Arrays.toString()를 사용하면 제 의도대로 결과를 출력할 수 있죠.
import java.utils.Arrays; 

int[] intArr = {1, 2, 3, 4};
System.out.println(Arrays.toString(intArr)); // [1, 2, 3, 4]

python의 경우

  • python은 그냥 출력하면 됩니다. 알아서 잘 출력해줘요.
lst = [1, 2, 3]
print(lst)

reference

댓글남기기