2024. 9. 11. 03:21ㆍc#
C#의 접근 제어자: public, private, protected
C#에서 접근 제어자(Access Modifiers)는 클래스, 필드, 속성, 메서드 등 클래스 멤버에 대한 접근 범위를 설정하는 데 사용됩니다. 이 포스팅에서는 public, private, protected 접근 제어자의 정의와 사용법을 설명하겠습니다.
1. 접근 제어자의 개요
접근 제어자란?
접근 제어자(Access Modifiers)는 클래스나 클래스 멤버에 대한 접근 권한을 지정하는 키워드입니다.
이를 통해 데이터의 보호 수준을 설정하고, 코드의 캡슐화와 보안을 강화할 수 있습니다.
C#에서 사용되는 주요 접근 제어자에는 public, private, protected 등이 있습니다.
2. public 접근 제어자
public의 의미
public 접근 제어자는 가장 개방적인 접근 수준을 부여합니다.
public으로 선언된 클래스나 클래스 멤버는 프로젝트 내외의 모든 코드에서 접근이 가능합니다.
public 사용 예제
public class Person
{
public string Name; // public 필드
public int Age; // public 필드
public void Introduce() // public 메서드
{
Console.WriteLine($"안녕하세요, 저는 {Name}이고, 나이는 {Age}살입니다.");
}
}
위 예제에서 Name, Age 필드와 Introduce 메서드는 모두 public으로 선언되어,
클래스 외부에서 자유롭게 접근할 수 있습니다.
public의 특징
- 외부 접근 가능: public 멤버는 클래스 외부에서 직접 접근이 가능합니다.
- 보호 수준 없음: 데이터를 보호하거나 캡슐화하는 목적에는 부적합합니다.
3. private 접근 제어자
private의 의미
private 접근 제어자는 가장 제한적인 접근 수준을 부여합니다. private으로 선언된 멤버는 해당 클래스 내부에서만 접근이 가능하며, 클래스 외부에서는 접근할 수 없습니다.
private 사용 예제
public class Person
{
private string Name; // private 필드
private int Age; // private 필드
public void SetName(string name) // public 메서드
{
Name = name;
}
public void SetAge(int age) // public 메서드
{
Age = age;
}
public void Introduce() // public 메서드
{
Console.WriteLine($"안녕하세요, 저는 {Name}이고, 나이는 {Age}살입니다.");
}
}
위 예제에서 Name과 Age 필드는 private으로 선언되어 클래스 외부에서 직접 접근할 수 없습니다.
대신, SetName과 SetAge 메서드를 통해 값을 설정할 수 있습니다.
private의 특징
- 캡슐화: private 멤버는 외부로부터 데이터를 보호하고, 클래스 내부의 구현 세부 사항을 감출 수 있습니다.
- 보안 강화: 중요한 데이터나 내부 로직을 보호하는 데 유용합니다.
4. protected 접근 제어자
protected의 의미
protected 접근 제어자는 상속 관계에서 사용되는 접근 제어자입니다.
protected로 선언된 멤버는 해당 클래스와 이를 상속받은 파생 클래스에서만 접근할 수 있습니다.
그러나 클래스 외부에서는 접근할 수 없습니다.
protected 사용 예제
public class Person
{
protected string Name; // protected 필드
protected int Age; // protected 필드
public void Introduce() // public 메서드
{
Console.WriteLine($"안녕하세요, 저는 {Name}이고, 나이는 {Age}살입니다.");
}
}
public class Employee : Person
{
public int EmployeeId;
public void DisplayEmployeeInfo()
{
Console.WriteLine($"직원 ID: {EmployeeId}, 이름: {Name}, 나이: {Age}");
}
}
위 예제에서 Name과 Age 필드는 protected로 선언되어 Person 클래스와 이를 상속받은 Employee 클래스에서 접근할 수 있습니다. 그러나 Person 클래스 외부에서는 접근할 수 없습니다.
protected의 특징
- 상속 지원: 파생 클래스에서 부모 클래스의 멤버에 접근할 수 있도록 하면서도, 외부에서는 접근을 제한합니다.
- 캡슐화와 상속의 균형: 데이터 보호와 상속의 유연성을 동시에 제공합니다.
5. 접근 제어자 비교
접근 제어자접근 가능 범위
public | 모든 클래스, 네임스페이스, 어셈블리에서 접근 가능 |
private | 해당 클래스 내부에서만 접근 가능 |
protected | 해당 클래스와 파생 클래스에서만 접근 가능 |
사용 시나리오
- public: 외부에서 자유롭게 접근이 필요한 경우, 예를 들어 API 또는 라이브러리에서 사용할 멤버.
- private: 외부에 노출되지 않아야 하는 중요한 데이터나 로직을 보호할 때.
- protected: 파생 클래스에서 부모 클래스의 멤버를 사용해야 하지만, 외부에는 노출하고 싶지 않을 때.
C#에서 접근 제어자는 코드의 보안과 구조를 관리하는 중요한 도구입니다.
public, private, protected 접근 제어자를 적절히 사용함으로써 데이터 보호, 캡슐화, 상속의 유연성을 극대화할 수 있습니다. 이를 잘 이해하고 활용하면 더 안전하고 유지보수하기 쉬운 코드를 작성할 수 있습니다.
'c#' 카테고리의 다른 글
c# 다형성(polymorphism)의 이해와 구현 (0) | 2024.09.13 |
---|---|
c# 상속 (0) | 2024.09.13 |
C# 필드와 속성, 메서드 정의 (0) | 2024.09.11 |
c# 클래스 선언 및 객체 생성 (0) | 2024.09.11 |
c# 클래스와 객체의 개념 (0) | 2024.09.10 |