[Java] public String toString

JTI·2022년 10월 12일
1

☕️  Java

목록 보기
20/59
post-thumbnail

💡참조형 변수

class MyObj {
	
}

public class UseMyObj {
	public static void main(String[] args) {
		MyObj o = new MyObj();
		System.out.println(o);
	}
}
[결과값]
MyObj@75a1cd57

위의 코드는 단순하게 객체를 하나 만들고 해당 객체를 toString 메서드로 출력하는 코드로 위와 같은 결과를 얻을 수 있다.

참조형 변수는 객체의 주소를 가지기 때문에 타입의 역할이 객체의 주소를 담는다.
객체의 주소는 모두 똑같지만 그 안에 갖고 있는 값은 다르다.
따라서, 직접적인게 아닌 간접적으로 주소를 통해서 나타낸다.

참조형 변수: 메모리 주소값을 받아옴.

❓ 그럼 문자열로 바꾸면 주소값은 어떻게 될까?

class MyObj {
	
}

public class UseMyObj {
	public static void main(String[] args) {
		MyObj o = new MyObj();
		System.out.println(o);
		System.out.println(o.toString()); // 추가
	}
}
[결과값]
MyObj@5fcfe4b2
MyObj@5fcfe4b2

보이는 것과 같이 'o'든 'o.toString'이든 그 결과가 같다.
그 이유는 'o'만 작성해도 자바는 내부적으로 toString을 호출하도록 약속이 되어 있기 때문이다.

즉, 'o'만 작성해도 암시적으로 'o.toString'이 호출된다.

💡 toString() 메서드란

toString 메서드
: 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메서드

Object 클래스가 가진 메서드 중 toString 메서드가 있다.

물론 Object 클래스의 모든 메소드는 모든 클래스가 사용이 가능하다.

✏️ 응용하기

DeskLamp 클래스 작성하고 객체 생성.

class MyLamp {
	private boolean isOn;
	
	public void turnOn() {
		isOn = true;
	}
	public void turnOff() {
		isOn = false;
	}
	public String toString() {
		return "현재 상태는 " + (isOn == true ? "켜짐" : "꺼짐");
	}
}

public class DeskLamp {
	public static void main(String[] args) {
		
		MyLamp dl = new MyLamp();
		
		dl.turnOn();
		System.out.println(dl);
		dl.turnOff();
		System.out.println(dl);
	}
}
[결과값]
현재 상태는 켜짐
현재 상태는 꺼짐

직사각형을 나타내는 클래스 Rectangle를 작성하고 객체를 생성하여 표현.

class Rectangle {
	int wight;
	int length;
	double area() {
		return(double) wight * length;
	}
	double perimeter() {
		return(double) (wight + length) * 2;
	}
	public String toString(){
		String info = "<이 직사각형의 넓이와 둘레는: > \n ";
		info += "넓이: " + area() + "\n 둘레: " + perimeter();
		
		return info;
	}
	
}

public class UseRectangle {
	public static void main(String[] args) {
		Rectangle re = new Rectangle();
		re.length = 20;
		re.wight = 30;
		System.out.println(re);
		
	}
}
[결과값]
<이 직사각형의 넓이와 둘레는: > 
 넓이: 600.0
 둘레: 100.0
profile
Fill in my own colorful colors🎨

0개의 댓글