Search

이것이 C#이다: 9장 - 프로퍼티 (1/2)

서론

C# 학습을 시작한 지 얼마 되지 않았을 때, 프로퍼티(Property)라는 개념을 접하고 그 강력함에 놀랐습니다. 프로퍼티는 C#에서 객체 지향 프로그래밍의 핵심 원칙인 캡슐화를 우아하게 구현할 수 있게 해주는 도구입니다. 이번 포스트에서는 프로퍼티의 기본 개념부터 C# 9.0에서 도입된 새로운 기능까지 살펴보며, 왜 프로퍼티가 C# 프로그래밍에서 중요한지 이해해보겠습니다.

본론

1. public 필드의 문제점과 프로퍼티의 필요성

처음 객체 지향 프로그래밍을 배울 때, 필드를 public으로 선언하고 직접 접근하는 방식을 사용했습니다. 하지만 이 방식에는 심각한 문제가 있습니다.
public class Person { public string Name;// public 필드 } // 사용 Person p = new Person(); p.Name = "Invalid!!!";// 아무런 제약 없이 직접 접근 가능
C#
복사
이렇게 하면 데이터의 무결성을 보장할 수 없고, 나중에 로직을 변경하기 어려워집니다. 프로퍼티를 사용하면 이런 문제를 해결할 수 있습니다.

2. 프로퍼티의 기본 구조와 사용법

프로퍼티는 getter와 setter 메서드를 좀 더 편리하게 사용할 수 있게 해줍니다.
public class Person { private string name;// private 필드 public string Name// 프로퍼티 { get { return name; } set { name = value; } } } // 사용 Person p = new Person(); p.Name = "John";// 내부적으로 setter 호출 Console.WriteLine(p.Name);// 내부적으로 getter 호출
C#
복사
이렇게 하면 필드에 직접 접근하는 것처럼 보이지만, 실제로는 getter와 setter 메서드를 통해 접근하게 됩니다. 이를 통해 데이터 검증이나 부가적인 로직을 쉽게 추가할 수 있습니다.

3. 자동 구현 프로퍼티와 그 장점

C# 3.0부터는 자동 구현 프로퍼티(Auto-implemented Property)라는 개념이 도입되었습니다. 이는 간단한 프로퍼티를 더욱 간결하게 작성할 수 있게 해줍니다.
public class Person { public string Name { get; set; }// 자동 구현 프로퍼티 }
C#
복사
이 코드는 내부적으로 private 필드를 생성하고 getter와 setter를 자동으로 구현합니다. 코드가 훨씬 간결해졌죠!
C# 7.0부터는 자동 구현 프로퍼티의 초기화도 가능해졌습니다:
public class Person { public string Name { get; set; } = "Unknown";// 초기값 설정 }
C#
복사

4. 프로퍼티와 생성자의 관계

프로퍼티는 객체 초기화 시에도 유용하게 사용됩니다. 특히 객체 초기화자(Object Initializer)와 함께 사용하면 매우 편리합니다.
Person p = new Person { Name = "Alice", Age = 30 };
C#
복사
이런 방식은 생성자를 오버로딩하는 것보다 더 유연하고 가독성이 좋습니다.

5. 초기화 전용 자동 구현 프로퍼티

C# 9.0에서는 init 접근자가 도입되었습니다. 이를 통해 객체 생성 시에만 값을 설정할 수 있는 프로퍼티를 만들 수 있습니다.
public class Person { public string Name { get; init; } } // 사용 var p = new Person { Name = "Bob" };// OK// p.Name = "Charlie"; // 컴파일 에러! 초기화 후에는 변경 불가
C#
복사
이 기능은 불변 객체(Immutable Object)를 쉽게 만들 수 있게 해줍니다. 데이터의 안정성을 높이고 싶을 때 매우 유용합니다.

참고 자료

박상현, "이것이 C#이다", 한빛미디어, 2023