본문 바로가기
개발/JAVA

[JAVA] toString() 오버라이딩으로 원하는 값 출력하기

by 로또 2023. 3. 29.

Java에서 String을 출력하면 그대로 담긴 문자열을 출력한다.

String s01="Java";
String s02=new String("월요일");

System.out.println(s01); //JAVA
System.out.println(s02); //월요일

하지만 기본적으로 객체는 출력하면 주소값이 나오게 된다.

ObjectExam oe1=new ObjectExam();
ObjectExam oe2=new ObjectExam("안녕");

System.out.println(oe1); // 주소값
System.out.println(oe2); // 주소값

왜 String은 주소값이 안 나오는걸까?

사실 s01, s02, oe1, oe2 전부 주소값이다.

println(Object obj) 메소드는 인수로 객체가 전달되면 obj.toString() 자동으로 호출하기 때문에 toString이 리턴하는 값을 출력한다.

Object
toString() : 객체의 주소를 하나의 String으로 만들어서 리턴
getClass().getName() + ‘@’ + Integer.toHexString(HashCode())

String은 toString 메소드를 오버라이딩해서 String 자신을 반환했기 때문에 주소가 아닌 문자열이 출력된 것이다.

 

따라서 다른 객체도 toString을 오버라이딩하면 주소가 아닌 다른 값을 바로 출력할 수 있다.

public ObjectExam {
	String s;

	public ObjectExam(){}
	public ObjectExam(String s){
		this.s = s;
	}
	
	@Override
	public String toString(){
		return s;
	}
}

이렇게 toString을 오버라이딩해준다면 ObjectExam은 출력했을 때 바로 s를 출력한다.

ObjectExam oe1 = new ObjectExam("안녕");
ObjectExam oe2 = new ObjectExam("안녕하세요");

System.out.println(oe1); // 안녕
System.out.println(oe2); // 안녕하세요

댓글