[Java] object (1) (feat. toString)

SeongEon Kim·2022년 6월 8일
0

JAVA

목록 보기
38/52
  1. 소개
package org.opentutorials.javatutorials.progenitor;
 
class O {}

위의 코드는 아래 코드와 같은 코드다.

package org.opentutorials.javatutorials.progenitor;
 
class O extends Object {}

어떤 클래스를 정의했는데, 그 클래스가 아무런 클래스도 상속하고 있지 않다면
Java는 암시적으로 extends Ojbect()를 정의한다.
Object는 모든 클래스의 조상이라고 할 수 있는데, 이는 모든 클래스가 공통으로 포함하고 있어야 하는 기능을 제공하기 위해서다.

  1. toString
    toString 은 객체를 문자로 표현하는 메소드다.
public class CalculatorDemo {
      
    public static void main(String[] args) {
          
        Calculator c1 = new Calculator();
        c1.setOprands(10, 20);
        System.out.println(c1);
    }
  
}

위 코드에서 Calculator의 인스턴스 c1을 화면에 출력하면,

org.opentutorials.javatutorials.progenitor.Calculator@11be650f

가 출력된다.

이것은 인스턴스 c1이 클래스 Calculator의 인스턴스라는 의미다. @ 뒤의 내용은 인스턴스에 대한 고유한 식별 값이라고 생각하면 된다.

위의 코드를 아래와 같이 바꾸면

public class CalculatorDemo {
     
   public static void main(String[] args) {
         
       Calculator c1 = new Calculator();
       c1.setOprands(10, 20);
       System.out.println(c1,toString);
   }
 
}

위의 코드도 똑같이 출력된다.

c1이라는 메소드를 출력하든, toString을 출력하든
println을 통해 출력하면 Java는 자동적으로 toString이라는 메소드를 호출하도록 약속이 되어 있다.

toString을 재정의(overiding) 해보면,

package org.opentutorials.javatutorials.progenitor;
 
class Calculator{
    int left, right;
      
    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }
    public void sum(){
        System.out.println(this.left+this.right);
    }
      
    public void avg(){
        System.out.println((this.left+this.right)/2);
    }
     
    public String toString(){
        return "left : " + this.left + ", right : "+ this.right;
    }
}

위의 코드의 실행결과는
left : 10, right : 20
left : 10, right : 20
이처럼 나온다.

인스턴스를 System.out.println의 인자로 전달하니까 toString을 명시적으로 호출하지 않았음에도 동일한 효과가 나고 있다. toString 메소드는 자바에서 특별히 취급하는 메소드다. toString을 직접 호출하지 않아도 어떤 객체를 System.out.print로 호출하면 자동으로 toString이 호출되도록 약속되어 있다.

profile
꿈을 이루는 사람

0개의 댓글