ABOUT ME

작디집(작은 디테일에 집착하는) 개발자, 김한슬 입니다.

Today
Yesterday
Total
  • [Java] toString() (Feat. 매번 헷갈려..)
    IT Study/컴퓨터 기초 2023. 4. 15. 18:10
    728x90

     

    안녕하세요. 다들 편안한 주말 보내고 계신가요.. :)

    이번 글에서는 toString() 메서드가 어떤 친구인지 정확하게 정의 내리고, 사용하는 방법까지 알아보도록 하겠습니다.

     

    1. toString()이란?

    toString 메서드는 자바의 모든 클래스에서 사용할 수 있는 메서드 중 하나입니다.

    toString은 객체를 대표하는 문자열을 반환합니다. (← 이 개념으로 인해 toString의 사용법이 헷갈리게 되곤 합니다.)

    아래의 1-1, 1-2 목차를 통해 정확하게 내용을 파악해보도록 하겠습니다.

     

    1-1. String 클래스의 toString()

    String 클래스의 toString은 해당 String 객체의 문자열 값을 반환합니다.

    toString() 메서드를 호출하면, 해당 String 객체에 저장된 문자열 값이 반환되어 출력됩니다.

    이때 반환되는 값는 새로운 String 객체가 아닌 호출한 String 객체, 그 자체입니다.

     

    1-2. Object 클래스의 toString()

    Object 클래스의 toString은 객체의 정보를 문자열로 반환하는 것이 목적입니다.

    이때 반환되는 문자열은 해당 객체를 고유하게 식별할 수 있는 정보를 담고 있습니다.

    이러한 Object 클래스의 toString()은 오버라이딩하지 않으면, Object 클래스의 toString() 메서드 그 자체가 사용됩니다.

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    클래스 이름@해시 코드

     

     

    위는 Object 클래스의 toString() 메서드의 기본 구현입니다. 이를 오버라이딩하지 않고 사용할 경우,

    위와 같이 객체가 속한 클래스명@, 객체의 해시코드를 16진수 문자열로 반환 값을 돌려줍니다.

     

    2. toString의 오버라이딩

    앞서 언급했던 내용과 같이 기본적으로 제공하는 toString은 객체의 클래스 이름과 해시코드 만을 반환합니다.

    따라서, 객체가 가진 정보와 같이 당신이 원하는 형태의 문자열을 반환하기 위해서는 toString을 오버라이딩해야 합니다.

     

    2-1. toString의 오버라이딩 예시

    public class Person {
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Name : " + name + ", Age : " + age;
        }
    }

     

    위 예시에서는 (사용자가 만든) Person 클래스의 toStirng 메서드를 오버라이딩하여

    Person 객체의 정보(이름, 나이)를 문자열로 반환하도록 만들었습니다.

     

    3. toString 사용 방법

    3-1. 객체를 문자열로 출력하는 방법

    객체를 문자열로 출력하기 위해서는 해당 객체의 toStirng() 메서드를 호출하면 됩니다.

    Person person = new Person("Three", 25);
    System.out.println(person.toString()); // <출력> Name : Three, Age : 25

     

    혹은 toString 메서드를 호출하는 대신, 객체를 출력하는 메서드(println, printf, print)로 직접 호출할 수 있습니다.

    이 경우, 자바는 자동으로 객체의 toString 메서드를 호출합니다.

    Person person = new Person("Three", 25);
    System.out.println(person); // <출력> Name : Three, Age : 25

     

    3-2. 문자열을 객체로 변환하는 방법

    문자열을 이용하여 객체를 생성하기 위해서는, 해당 클래스가 문자열을 인자로 받는 생성자를 가지고 있어야 합니다.

    생성자를 통해 객체를 생성하고, 생성된 객체를 반환할 수 있습니다.

     

    2-1 예시에서 만들었던 Person 클래스에서는 아래와 같은 생성자를 만들었습니다.

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

     

    다음은 문자열을 이용하여 Person 객체를 생성하는 예시입니다.

    String str = "Name : Three, Age : 25";
    String[] sArr = str.split(", ");
    String name = sArr[0].split(" : ")[1];
    int age = Integer.parseInt(sArr[1].split(" : ")[1]);
    
    Person person = new Person(name, age);
    System.out.println(person); // <출력> Name : Three, Age : 25

     

    먼저 문자열 변수 str을 선언하여 문자열 값을 할당합니다.

    split 메서드는 문자열을 인자로 받아 ", " (쉼표와 공백)으로 구분된 문자열을 분리하여 String 배열인 sArr에 할당합니다.

    sArr[0] sArr[0].split(" : ")[0] sArr[0].split(" : ")[1]
    Name : Three Name Three
    sArr[1] sArr[1].split(" : ")[0] sArr[1].split(" : ")[1]
    Age : 25 Age 25

     

    위 표와 같이 필요한 값을 데려와 문자열 변수 name에 Three

    정수형 변수 age는 Integer.parseInt() 메서드를 사용하여 문자열을 정수로 변환시키고 그 값인 25를 저장합니다.

     

    4. 자바의 내장 객체에서의 toString 활용

    4-1. String, StringBuffer, StringBuilder

    String str = "Hello, World!";
    String strToString = str.toString(); // "Hello, World!"
    
    StringBuffer sbf = new StringBuffer("Hello");
    sbf.append(", World!");
    String sbfToString = sbf.toString(); // "Hello, World!"
    
    StringBuilder sbd = new StringBuilder("Hello");
    sbd.append(", World!");
    String sbdToString = sbd.toString(); // "Hello, World!"

     

    4-2. Date

    Date date = new Date();
    System.out.println(date.toString()); // Sat Apr 15 17:54:03 KST 2023

     

    4-3. Integer

    Integer num = new Integer(123);
    String str = num.toString();
    System.out.println(str); // 123

     

    🌝 마무리

    항상 헷갈려하던 toSring 메서드에 대해 알아보았습니다.

    저는 사용할 때마다 헷갈려하던 메서드라, 이 글을 정리하고나니 정말 마음이 편안해지는데요.

    다른 분들도 이 글을 통해 toString 메서드를 이해하는데에 도움이 되었기를 바라며... 긴 글 읽어주셔서 감사합니다 🌝

    'IT Study > 컴퓨터 기초' 카테고리의 다른 글

Designed by Tistory.