Menu
Coddy logo textTech

ToString() 오버라이드

Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 38번째.

C#의 모든 클래스는 object에서 상속되며, 이는 ToString() 메서드를 제공합니다. 기본적으로 이 메서드는 정규화된 타입 이름을 반환하는데, 이는 객체의 실제 데이터를 확인하려는 경우에는 그리 유용하지 않습니다.

객체의 의미 있는 문자열 표현을 반환하도록 ToString()을 재정의할 수 있습니다:

public class Person
{
    public string Name { get; }
    public int Age { get; }
    
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    
    public override string ToString()
    {
        return $"{Name} ({Age} years old)";
    }
}

이제 Person 객체를 출력하거나 연결할 때, 읽기 쉬운 출력을 얻을 수 있습니다:

Person p = new Person("Alice", 30);
Console.WriteLine(p);  // Alice (30세)

override가 없으면, 이것은 MyNamespace.Person과 같은 내용을 출력할 것입니다. object로부터 상속받은 메서드를 대체하는 것이므로 override 키워드가 필요합니다. 이는 객체의 상태를 빠르게 파악해야 하는 디버깅과 로깅 시 특히 유용합니다.

challenge icon

챌린지

쉬움

출력 시 의미 있는 문자열 표현을 제공하는 Book 클래스를 만들어 보겠습니다. 이를 통해 디버깅과 도서 정보 표시가 훨씬 더 직관적이게 됩니다.

코드는 두 개의 파일로 구성됩니다:

  • Book.cs: Library 네임스페이스에 도서의 필수 세부 정보를 나타내는 Book 클래스를 생성합니다. 도서 클래스는 다음을 포함해야 합니다:
    • 세 개의 읽기 전용 속성: Title (string), Author (string), Year (int)
    • 제목, 저자, 연도 순으로 전달받는 생성자
    • 형식화된 문자열을 반환하도록 재정의(override)된 ToString() 메서드: "{Title}" by {Author} ({Year})
    출력 시 제목은 큰따옴표로 감싸져야 함에 유의하세요!
  • Program.cs: 메인 파일에서 입력값을 사용하여 Book 객체를 생성하고 직접 출력합니다. ToString() 재정의 덕분에 Book 객체를 Console.WriteLine()에 전달하면 타입 이름 대신 형식화된 정보가 자동으로 표시됩니다.

세 가지 입력을 받게 됩니다:

  • 도서 제목 (string)
  • 저자 이름 (string)
  • 출판 연도 (integer)

Console.WriteLine()을 사용하여 도서 객체를 직접 출력하세요.

예를 들어, 입력값이 The Great Gatsby, F. Scott Fitzgerald, 1925라면 출력은 다음과 같아야 합니다:

"The Great Gatsby" by F. Scott Fitzgerald (1925)

여기서 핵심은 ToString()을 명시적으로 호출하지 않는다는 것입니다. 객체를 Console.WriteLine()에 전달하면 자동으로 객체의 ToString() 메서드가 호출됩니다. 여러분이 재정의한 메서드 덕분에 단순히 Library.Book이라고 표시되는 대신 유용한 정보가 출력됩니다!

치트 시트

C#의 모든 클래스는 object에서 상속되며, 이는 ToString() 메서드를 제공합니다. 기본적으로, 이 메서드는 정규화된 타입 이름을 반환합니다.

의미 있는 문자열 표현을 반환하도록 ToString()을 오버라이드하세요:

public class Person
{
    public string Name { get; }
    public int Age { get; }
    
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    
    public override string ToString()
    {
        return $"{Name} ({Age} years old)";
    }
}

객체를 출력할 때, ToString()이 자동으로 호출됩니다:

Person p = new Person("Alice", 30);
Console.WriteLine(p);  // Alice (30 years old)

object에서 상속된 메서드를 대체할 때는 override 키워드가 필요합니다.

직접 해보기

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // 입력 읽기
        string title = Console.ReadLine();
        string author = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());

        // TODO: 입력값을 사용하여 Book 객체 생성하기

        // TODO: Console.WriteLine()을 사용하여 book 객체를 직접 출력하기
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨