사실 toString()을 OOP 카테고리에 분류하는것이 맞을까 싶지만 객체를 다루고 있고
이것이 이해하는데 도움이 될 것이라 여겨 함께 분류하는 것이 좋다는 생각이 들어 같이 설명합니다.
toString 이해
객체를 문자로 표현하는 메서드인 toString에 대해 알아봅시다.
Object.toString() 의 형태로 있는 이 클래스는 문자열로써 출력되어야 할 때 저절로 호출하는 메서드입니다.
Object는 모든 타입의 부모이기 때문에 모든 클래스에 toString()이 포함되어 있습니다.
toString 은 오버라이드를 해주는 특징이 있고, 이 메서드는 사용하지 않으면
기본적으로 메모리상의 주소값을 문자열로 반환합니다.
Pig 라는 클래스를 만들어 보았습니다.
toString 오버라이드 하기 전
Pig 객체를 만들고 참조변수 meat 의 값을 넣어서 그냥 바로 출력해보겠습니다.
사실 어떻게 출력하고자 하는 서식이 필요한데 정해둔 서식도 없고,
String으로 출력하고자 하지도 않았기 때문에 그냥 객체의 메모리주소만 찍힌것입니다.
일반적으로 int형 자료형이나 double, char 이런 것들을 쓸 때에는
변수 부분에 '값'의 형태로 저장한다는 것을 잘 알고 계실겁니다.
하지만 그 외 자료형인 참조형 자료형은 변수에 값의 형태로 저장하는 것이 아니라,
메모리 주소를 가져와 저장하기 때문에 이 변수를 다시 사용하고자 하면 메모리 주소가 반환이 되는 것입니다.
@뒤에 있는 값은 Pig 클래스의 인스턴스 meat 에 대한 고유한 식별값이라고 생각하면 될 것 같습니다.
toString을 오버라이드한 후
String.format() 메서드를 통해 문자열 서식을 만들어주고 이것을 toString() 으로 오버라이드 했습니다.
다시 출력을 하고자 한다면
메인에서 이렇게 작성해주면 됩니다.
그럼 출력하고자 하는 서식 대로 잘 출력이 되는 것을 볼 수 있습니다.
그런데요, toString을 오버라이드 해주고나면 print 메서드의 기능 때문에
meat 참조변수만 작성해줘도 콘솔창에서 알아서 잘 출력합니다.
문자열로써 출력되어야 할 때 저절로 호출되는 메서드라는 말이 어떤 의미인지 와닿으시나요?
toString 메서드의 숨겨진 기능에는 객체를 system.out.print 과 같이 출력하는 메서드로 호출하면
toString을 직접 호출하지 않아도 자동으로 호출하도록 설정되어 있습니다.
여기까지 toString() 에 대해서 간단히 알아보았습니다.
'Java (국비지원 당시 공부했던 글) > OOP (Java)' 카테고리의 다른 글
[자바] OOP - 7. 접근 제어자 (public/protected/default/private) (0) | 2022.06.06 |
---|---|
[자바] OOP - 5. 상속 (객체의 다형성과 캐스팅) (0) | 2022.05.30 |
[자바] OOP - 4. 상속 (상속 개념과 super, 오버라이드) (0) | 2022.05.27 |
[자바] OOP - 3. static과 변수 선언위치, 생성시기 (0) | 2022.05.16 |
[자바] OOP - 2. 클래스의 생성자와 오버로딩 (0) | 2022.05.16 |