toString()메서드가 뭔지 알고싶으면, 그 전에 모든 클래스의 가장 최상위 클래스인 "Object" 클래스에 대해서 먼저 알아야한다. toString()메서드는 Object 클래스 안에 정의되어있기 때문이다.
JAVA에 제공하는 모든 클래스들의 계충 구조로 되어있고, 그 최상위로 올라가면 "Object"이라는 클래스가 존재한다.
우리가 일반적으로 생성하는 클래스도 "extends"로 직접 상속하지는 않지만
자바 컴파일러는 일반 클래스를 "Object"하위 클래스로 자동 설정하게 되어 있다.
즉, 자바 라이브러리나 유저가 만든 모든 클래스는
"Object" 클래스를 부모클래스로 상속 받아서 사용 하게 된다.
(출처): https://backback.tistory.com/m/68
이제, toString()메서드에 대해 알아보자.
toString()메서드는 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메서드이다.
하지만 toString()메서드를 바로 출력하면 결과값이 신기하게 나온다.
아래는 그에 대한 예시 코드이다.
package class02;
//class 주민
//String 타입; // 무조건 있음
//String 이름; // 주민을 생성할때, 이름을 반드시 설정하면서 만들어야함
//hello()
// 행복함 / 무난함 / 슬픔 / 화남
// 중에서 1개 랜덤으로 출력함
// ,야옹 / ,개굴
//action(String 도구)
// 잠자리채 >> 곤충채집
// 낚시대 >> 생선낚시
// 삽 >> 땅파기
//
//class 고양이 extends 주민
//
//class 개구리 extends 주민
//
//main()
//주민[] datas = new 주민[3];
//datas[i] = new 고양이("히죽");
// new 고양이("1호");
// new 개구리("레이니");
// new 개구리("아이다");
//
//클래스(타입,자료형) : 주민, 고양이, 개구리
//객체(변수,값,실제 메서드 수행 주체) : 히죽,1호,레이니,아이다,...
//
//
class Citizen{
String type; // 무조건 있음
String name;// 주민을 생성할때, 이름을 반드시 설정하면서 만들어야함
Citizen(String type, String name){
this.type = type;
this.name = name;
}
void hello(){
// 행복함 / 무난함 / 슬픔 / 화남
// 중에서 1개 랜덤으로 출력함
// ,야옹 / ,개굴
String [] emotion = {"행복함","무난함","슬픔","화남"};
System.out.println(emotion[(int)(Math.random()*4)]);
}
void action(String equipment) {
// 잠자리채 >> 곤충채집
// 낚시대 >> 생선낚시
// 삽 >> 땅파기
if(equipment.equals("잠자리채")) {
System.out.println("곤충채집");
}
else if(equipment.equals("낚시대")) {
System.out.println("생선낚시");
}
else if(equipment.equals("삽")) {
System.out.println("땅파기");
}
else {
System.out.println("잘못 입력했습니다.");
}
}
// @Override
// public String toString() {
// return "( " +this.name + ", "+this.type + " )";
// }
}
class Cat extends Citizen{
Cat(String name){
super("고양이",name);
}
@Override
void hello() {
hello();
System.out.println("야옹");
}
}
class Frog extends Citizen{
Frog(String name){
super("개구리", name);
}
@Override
void hello() {
hello();
System.out.println("개굴");
}
}
public class Test01 {
public static void main(String[] args) {
//main()
//주민[] datas = new 주민[3];
//datas[i] = new 고양이("히죽");
// new 고양이("1호");
// new 개구리("레이니");
// new 개구리("아이다");
//
//클래스(타입,자료형) : 주민, 고양이, 개구리
//객체(변수,값,실제 메서드 수행 주체) : 히죽,1호,레이니,아이다,...
Citizen [] datas = new Citizen[4];
datas[0] = new Cat("히죽");
datas[1] = new Cat("1호");
datas[2] = new Frog("레이니");
datas[3] = new Frog("아이다");
System.out.println(datas[3]);
}
}
일단 toString()메서드를 오버라이딩해서 재정의한 부분은 주석처리해놓았다.
위 코드를 동작시키면, 결과값은 아래와 같다.
class02.Frog@53bd815b
하지만 toString()메서드 오버라이딩 부분의 주석처리를 풀면, 또 다른 값이 출력된다.
( 아이다, 개구리 )
toString() 메서드는 Object 클래스에서 toString()이 이미 정의되어있지만, 위처럼 재정의해서 주로 사용한다.
'JAVA' 카테고리의 다른 글
두번째 (소규모) 프로젝트 - 포켓몬 게임 (0) | 2024.07.07 |
---|---|
JAVA 동적바인딩, toString() 예제 - 동물의 숲 (0) | 2024.07.04 |
JAVA 오버라이딩 + 예제 (2) | 2024.07.03 |
JAVA 상속, super() + 예제 (0) | 2024.07.03 |
학생부 프로그램 만들기 (이어서) (1) | 2024.07.03 |