C# 프로퍼티: 초보자를 위한 종합 가이드

안녕하세요, 미래의 코딩 슈퍼스타! 오늘 우리는 C# 프로퍼티의 세계로 흥미로운 여정을 떠납니다. 코드를 한 줄도 작성해 본 적이 없다면 걱정하지 마세요 - 저는 당신의 친절한 안내자가 되겠습니다. 우리는 이 주제를 단계별로 공략하겠습니다. 이 튜토리얼의 끝을 맺을 때, 당신은 프로퍼티의 달인이 될 것입니다!

C# - Properties

프로퍼티는 무엇인가요?

먼저, 우리는 지갑을 상상해 봅시다. 돈을 넣고 돈을 꺼낼 수는 있지만, 지갑의 내부에 직접 접근할 수는 없습니다. C#의 프로퍼티는 이와 유사하게 작동합니다 - 프로퍼티는 클래스의 비밀 필드의 값을 접근하고 수정하는 방법을 제공하면서도, 그 접근 방식에 대한 제어를 유지합니다.

프로퍼티를 사용하는 이유는 무엇인가요?

  1. 캡슐화: 클래스의 내부 동작을 숨기는 데 도움이 됩니다.
  2. 유연성: 데이터가 저장되는 방법을 변경할 수 있지만, 접근 방법은 변경하지 않습니다.
  3. 검증: 데이터가 설정되기 전에 데이터가 유효한지 확인할 수 있습니다.

이제 코드로 손을 더러워보겠습니다!

기본 프로퍼티 문법

다음은 가장 간단한 형태의 프로퍼티입니다:

public class Person
{
private string name;

public string Name
{
get { return name; }
set { name = value; }
}
}

이 예제에서 Name은 우리의 프로퍼티입니다. 이는 비밀 필드 name과 연결되어 있습니다. getset 부분은 접근자입니다.

접근자

프로퍼티는 두 가지 주요 접근자를 가집니다:

  1. get: 프로퍼티의 값을 가져옵니다.
  2. set: 프로퍼티에 새로운 값을 할당합니다.

우리의 Name 프로퍼티를 분해해 보겠습니다:

public string Name
{
get { return name; } // 이는 접근자입니다.
set { name = value; } // 이는 설정자입니다.
}

프로퍼티에 접근할 때 (예: person.Name), 접근자가 호출됩니다. 값을 할당할 때 (예: person.Name = "John"), 설정자가 호출됩니다.

자동 구현된 프로퍼티

C#에는 특별한 논리가 필요하지 않은 간단한 프로퍼티에 대한 줄임형이 있습니다:

public class Person
{
public string Name { get; set; }
}

이는 C#이 관리하는 숨겨진 백업 필드를 만드는 Name 프로퍼티를 생성합니다. 마법 같은 것입니다!

논리가 포함된 프로퍼티

이제 우리의 프로퍼티에 약간의 매력을 더해보겠습니다:

public class BankAccount
{
private decimal balance;

public decimal Balance
{
get { return balance; }
set
{
if (value < 0)
{
throw new ArgumentException("Balance cannot be negative");
}
balance = value;
}
}
}

여기서 우리는 잔액이 절대로 음수가 되지 않도록 보장합니다. 누군가가 음수 잔액을 설정하려고 시도하면 우리는 예외를 발생시킵니다. 지갑의 보디가드 같은 것입니다!

읽기 전용과 쓰기 전용 프로퍼티

occasionally, you might want to restrict access to your properties:

public class SecretAgent
{
private string codeName = "007";

// 읽기 전용 프로퍼티
public string CodeName
{
get { return codeName; }
}

// 쓰기 전용 프로퍼티
public string Mission
{
set { Console.WriteLine($"New mission: {value}"); }
}
}

제임스 본드는 이 정도의 비밀을 좋아할 것입니다!

표현식 본 프로퍼티

간단한 프로퍼티에 대해 C# 6.0에서는 더 간결한 문법을 도입했습니다:

public class Circle
{
public double Radius { get; set; }

// 표현식 본 프로퍼티
public double Area => Math.PI * Radius * Radius;
}

=> 문법은 "이 프로퍼티는 다음 표현식으로 정의된다"고 말하는 것과 같습니다. 짧고 sweat며 수학적입니다!

추상 프로퍼티

추상 클래스에서는 추상 프로퍼티를 정의할 수 있으며, 파생 클래스는 이를 구현해야 합니다:

public abstract class Shape
{
public abstract double Area { get; }
}

public class Square : Shape
{
public double Side { get; set; }

public override double Area => Side * Side;
}

이는 프로퍼티의 블루프린트를 만들고, "자식" 클래스가 이를 채워넣도록 하는 것입니다.

프로퍼티 메서드 표

다음은 프로퍼티 관련 메서드의 편리한 표입니다:

메서드 설명 예제
get 프로퍼티 값을 가져옵니다 get { return name; }
set 프로퍼티 값에 할당합니다 set { name = value; }
init 객체 초기화 중에만 프로퍼티 값을 설정합니다 public string Name { get; init; }
value 설정자에서 할당된 값을 나타냅니다 set { if (value != null) name = value; }

결론

축하합니다! 당신은 C# 프로퍼티의 세계로的第一步을 뗐습니다. 프로퍼티는 클래스의 비밀 필드의 접근을 관리하고, 규칙을 강제하고, 것을 깨끗하게 유지하는 마음씨가 좋은 베이스입니다.

코딩 여정을 계속하면서 어디서나 프로퍼티를 볼 수 있을 것입니다. 그들은 깨끗하고 유지보수 가능한 C# 코드를 작성하는 데 필수적입니다. 계속 연습하고, 당신의 프로퍼티가 항상 올바르게 보호되기를 바랍니다! ??‍??‍?

Credits: Image by storyset