C# 접근 수정자(Access Modifiers) 완벽 이해: 실전 예제와 함께
C#에서 접근 수정자란?
접근 수정자(Access Modifiers)는 타입과 타입 멤버의 가시성을 제어하는 키워드로, C# 캡슐화의 초석입니다. 어떤 코드가 클래스, 속성, 메서드를 참조할 수 있는지 결정하여 의도한 프로그램 부분만 내부 구현 세부사항과 상호작용할 수 있게 합니다.
C#에는 여섯 가지 접근 수정자가 있습니다:
- Private
- Public
- Protected
- Internal
- Protected Internal
- Private Protected
이 튜토리얼에서 배울 내용:
- 접근 수정자의 정의와 중요성
- Private, Public, Protected, Internal 수정자 심층 분석
- 생성자가 클래스 필드를 초기화하는 방법
Private 접근 수정자
멤버를 private으로 표시하면 해당 클래스 내부에서만 사용이 제한됩니다. 동일한 어셈블리 내의 다른 클래스를 포함한 외부 코드는 private 멤버를 참조할 수 없습니다.
Private 접근 수정자 예제
Tutorial.cs의 SetTutorial을 수정하여 이 규칙을 설명해 보겠습니다. public 키워드를 private로 변경합니다:

이제 Program.cs로 전환합니다. 컴파일러가 SetTutorial 호출에 빨간 물결선을 표시하며 이 위치에서 메서드에 접근할 수 없음을 알립니다.

Public 접근 수정자
Public 멤버는 포함 타입을 참조할 수 있는 모든 코드에서 볼 수 있습니다. 접근 수정자를 지정하지 않은 멤버의 기본값입니다.
Public 접근 수정자 예제

SetTutorial이 public으로 선언되어 Program.cs에서 컴파일 오류 없이 호출할 수 있습니다.
Protected 접근 수정자
protected 멤버는 자신의 클래스와 파생 클래스에서만 접근 가능합니다. 이 접근 수준은 재사용 가능한 기본 클래스를 만들면서 내부 구현을 보호하기에 이상적입니다.
Internal 접근 수정자
Internal 멤버는 동일한 어셈블리 내의 모든 코드에서 볼 수 있지만 다른 어셈블리의 코드에서는 볼 수 없습니다. 라이브러리 소비자에게만 노출되어야 하는 라이브러리 구성 요소에 유용합니다.
C# 생성자(Constructors)
생성자는 클래스의 새 인스턴스를 초기화합니다. 클래스와 이름이 같고 반환 타입이 없으며 new 사용 시 자동으로 호출됩니다.
- 생성자의 기본 접근은 달리 지정하지 않는 한
public입니다.
- 생성자는 반환 타입을 선언할 수 없습니다.
C# 생성자 예제
Tutorial 객체 생성 시 TutorialID와 TutorialName에 기본값을 설정하는 생성자를 시연합니다.
1단계) Tutorial.cs에 생성자 추가:

코드 설명
Tutorial이라는 이름의 메서드는 생성자로 취급되어 인스턴스 생성 시 자동 실행됩니다.
- 생성자는
TutorialID에 0, TutorialName에 "Default"를 할당하여 일관된 초기 상태를 보장합니다.
Program.cs에서 SetTutorial 호출을 제거하여 생성자 동작에 집중합니다:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication {
class Tutorial {
public int TutorialID;
public string TutorialName;
public Tutorial() {
TutorialID = 0;
TutorialName = "Default";
}
public void SetTutorial(int pID, string pName) {
TutorialID = pID;
TutorialName = pName;
}
public string GetTutorial() {
return TutorialName;
}
static void Main(string[] args) {
Tutorial pTutor = new Tutorial();
Console.WriteLine(pTutor.GetTutorial());
Console.ReadKey();
}
}
}
코드 설명
new 키워드로 Tutorial 인스턴스 생성
GetTutorial 메서드로 기본 TutorialName 조회 후 Console.WriteLine으로 표시
실행 시 콘솔에 다음이 표시됩니다:
출력:

출력은 생성자가 실행되어 TutorialName을 "Default"로 초기화했음을 확인시켜줍니다.
참고: "Default" 값은 외부 코드가 아닌 생성자에서 온 것입니다.
요약
- 접근 수정자는 클래스 멤버의 가시성을 정의합니다.
private는 모든 외부 코드에서 멤버를 숨깁니다.
public은 참조하는 모든 코드에 멤버를 노출합니다.
protected는 클래스와 그 후손으로 멤버를 제한합니다.
internal은 현재 어셈블리로 가시성을 제한합니다.
- 생성자는 객체 인스턴스화 시 필드를 초기화합니다.