'object' 기본 클래스
Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 23번째.
C#에서, 여러분이 만드는 모든 클래스는 object라고 불리는 특별한 클래스로부터 자동으로 상속받습니다. 기본 클래스를 명시적으로 지정하지 않더라도, 여러분의 클래스는 여전히 object를 최종 조상으로 가집니다. 이것은 C#의 모든 타입이 공통된 메서드 집합을 공유한다는 것을 의미합니다.
object 클래스는 사용자의 클래스에서 오버라이드할 수 있는 여러 가상 메서드를 제공합니다:
public class Person
{
public string Name { get; set; }
// object에서 오버라이드
public override string ToString()
{
return $"Person: {Name}";
}
public override bool Equals(object obj)
{
if (obj is Person other)
return Name == other.Name;
return false;
}
public override int GetHashCode()
{
return Name?.GetHashCode() ?? 0;
}
}가장 흔히 오버라이드되는 세 가지 메서드는 문자열 표현을 위한 ToString(), 객체 비교를 위한 Equals(), 그리고 해시 기반 컬렉션을 위한 GetHashCode()입니다. 기본적으로 ToString()은 타입 이름을 반환하며, Equals()는 참조 동일성을 확인합니다.
모든 것이 object에서 상속되기 때문에, 어떤 타입이든 object 변수에 저장할 수 있습니다:
object item1 = new Person { Name = "Alice" };
object item2 = 42;
object item3 = "Hello";
Console.WriteLine(item1.ToString()); // Person: Alice이 범용 기본 클래스는 다양한 형식을 포함하는 컬렉션과 같은 기능을 가능하게 하는 요소이며, C#의 모든 객체가 ToString() 및 GetType()과 같은 메서드에 액세스할 수 있는 이유이기도 합니다.
챌린지
쉬움object 기본 클래스의 메서드를 오버라이딩하여 사용자 정의 타입에 문자열 표현 및 동등성 검사를 위한 의미 있는 동작을 부여하는 방법을 보여주는 도서 비교 시스템을 구축해 보겠습니다.
코드를 구성하기 위해 두 개의 파일을 생성합니다:
Book.cs:Library네임스페이스에Book클래스를 정의합니다. 도서는Title(string) 및Author(string) 속성을 가져야 하며, 두 값을 모두 설정하는 생성자가 있어야 합니다.object에서 상속된 세 가지 핵심 메서드를 오버라이드하세요:ToString()은"{Title} by {Author}"를 반환해야 합니다.Equals(object obj)는 다른 객체가 동일한Title과Author를 가진Book인 경우true를 반환해야 합니다.GetHashCode()는 두 속성의 해시 코드를 결합해야 합니다.
Program.cs: 메인 파일에서 입력 값을 사용하여 두 권의 도서를 생성합니다.ToString()을 사용하여 각 도서를 표시한 다음, 두 도서가 같은지 확인하고 결과를 출력합니다. 마지막으로,Book을object변수에 저장하고ToString()을 호출할 때 여전히 의미 있는 출력을 얻을 수 있음을 보여줍니다.
네 개의 입력을 받게 됩니다:
- 첫 번째 도서의 제목
- 첫 번째 도서의 저자
- 두 번째 도서의 제목
- 두 번째 도서의 저자
출력은 다음 형식으로 인쇄하십시오:
Book 1: {ToString result}
Book 2: {ToString result}
Are they equal? {True/False}
Stored as object: {ToString result of first book stored in object variable}예를 들어, 입력이 1984, George Orwell, 1984, George Orwell인 경우 출력은 다음과 같아야 합니다:
Book 1: 1984 by George Orwell
Book 2: 1984 by George Orwell
Are they equal? True
Stored as object: 1984 by George Orwell입력이 1984, George Orwell, Brave New World, Aldous Huxley인 경우 출력은 다음과 같아야 합니다:
Book 1: 1984 by George Orwell
Book 2: Brave New World by Aldous Huxley
Are they equal? False
Stored as object: 1984 by George Orwell오버라이드된 메서드가 Book 객체에 어떻게 의미 있는 동작을 부여하는지 확인해 보세요. 객체들이 문자열로 멋지게 표시되고, 단순한 메모리 참조가 아닌 내용에 의해 비교될 수 있습니다!
치트 시트
C#에서 모든 클래스는 자동으로 object 클래스를 상속받으며, 이 클래스는 재정의(override)할 수 있는 여러 가상 메서드를 제공합니다:
재정의할 수 있는 공통 Object 메서드
ToString()- 객체의 문자열 표현을 반환합니다 (기본값은 형식 이름을 반환함)Equals(object obj)- 객체의 동등성을 비교합니다 (기본값은 참조 동등성을 확인함)GetHashCode()- 해시 기반 컬렉션에서 사용할 해시 코드를 반환합니다
Object 메서드 재정의하기
public class Person
{
public string Name { get; set; }
// 사용자 지정 문자열 표현을 위해 ToString 재정의
public override string ToString()
{
return $"Person: {Name}";
}
// 내용 기반 비교를 위해 Equals 재정의
public override bool Equals(object obj)
{
if (obj is Person other)
return Name == other.Name;
return false;
}
// 해시 기반 컬렉션을 위해 GetHashCode 재정의
public override int GetHashCode()
{
return Name?.GetHashCode() ?? 0;
}
}범용 기본 클래스
모든 형식은 object 변수에 저장될 수 있습니다:
object item1 = new Person { Name = "Alice" };
object item2 = 42;
object item3 = "Hello";
Console.WriteLine(item1.ToString()); // Person: Alice이러한 보편적 상속은 혼합된 형식을 담는 컬렉션을 가능하게 하며, 모든 객체가 ToString() 및 GetType()과 같은 메서드에 접근할 수 있도록 보장합니다.
직접 해보기
using System;
using Library;
class Program
{
public static void Main(string[] args)
{
// 두 권의 책에 대한 입력을 읽습니다
string title1 = Console.ReadLine();
string author1 = Console.ReadLine();
string title2 = Console.ReadLine();
string author2 = Console.ReadLine();
// TODO: 입력값을 사용하여 두 개의 Book 객체를 생성하세요
// TODO: ToString()을 사용하여 Book 1을 출력하세요
// 형식: "Book 1: {ToString result}"
// TODO: ToString()을 사용하여 Book 2를 출력하세요
// 형식: "Book 2: {ToString result}"
// TODO: 두 책이 동일한지 확인하고 결과를 출력하세요
// 형식: "Are they equal? {True/False}"
// TODO: 첫 번째 책을 object 변수에 저장하고 출력하세요
// 형식: "Stored as object: {ToString result}"
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.