47.4 캡슐화를 사용하여 좀 더 세련된 프로그램 만들기
캡슐화를 사용하여 좀 더 세련된 프로그램을 만들 수 있습니다. 앞에서 필드는 private으로 해당 클래스 내에서 꽁꽁 숨겨야 한다고 몇 번이나 강조했습니다. 필드는 자동차 부품 역할을 하기에, 외부에서 보이는 것보다는 내부에서만 사용하도록 명시하는 것이 가장 좋기 때문입니다. 이를 프로그램 코드에도 적용하면 프로그램을 좀 더 세련되게 표현할 수 있습니다. 이 예제에서는 필드를 만들고 외부에 공개할 때 public한 메서드 또는 public한 속성 등으로 공개하는 식으로 캡슐화를 구현하는 예제를 만들 것입니다. 다음 내용을 입력한 후 실행해 보세요.
캡슐화 사용: EncapsulationNote.cs
using System; namespace EncapsulationNote { public class Person { //① 필드 private string name; //② 메서드: public 메서드 또는 속성으로 외부에 공개 public void setName(string n) => name = n; public string GetName() => this.name; } class EncapsulationNote { static void Main() { //ⓐ person 개체 생성 Person person = new Person(); //ⓑ Set 메서드로 필드 설정 person.SetName("C#"); //ⓒ Get 메서드로 필드 공개 Console.WriteLine(person.GetName()); } } }
실행 결과
C#
Person 클래스의 인스턴스를 생성한 후 name 필드에 접근하려고 시도하면 private으로 설정했기에 다음 오류가 발생합니다.
> Person person = new Person(); > person.name = "Error"; (1,8): error CS0122: 보호 수준 때문에 'Person.name'에 액세스할 수 없습니다.
외부에서 필드에 접근하지 못하고 필드 값에 접근할 때는 public 메서드 또는 속성으로만 접근하게 하여 클래스 내 필드 값을 보호할 수 있습니다.