본문 바로가기

.NET C#/문법

public, private, protected, internal 접근 한정자

1. public

 

해당 키워드로 한정된 경우,

어디서는 접근 가능합니다.

외부에서의 모든 접근을 허용하여 상속, 매서드 확장 등 유연한 개발을 가능하도록 합니다.

 

예시>

public class MyClass
{
    public string name;
}

2. private

 

해당 키워드로 한정된 경우,

선언된 곳에서만 접근 가능합니다.

내부에서 접근만을 허용하여 외부에 보여주고 싶지 않거나 보여주면 안되는 항목을 숨깁니다.

불필요한 항목을 외부에 숨겨, 개발간 혼란을 방지할 수 있습니다.

 

예시>

public class MyClass
{
    public sting name;
    private int age; // 클래스 외부에서 접근할 수 없음
}

 

3. protected

 

해당 키워드로 한정된 경우,

선언된 곳과 상속받는 곳에서 접근 가능합니다.

상속받는 곳에서의 접근을 허용함으로써, 개발 커스터마이징 또는 기능 보완을 가능하게 합니다.

 

예시>

pulbic class MyParentClass
{
    public string name;
    protected int age; // 상속받는 클래스에서 접근 가능함
}

 

public class MyChildClass : MyParentClass // MyParentClass 상속받음
{
    public void ChangeAge(int val)
    {
        age = val; // 부모인 MyParentClass의 age 변수에 접근 가능함
    }
}

 

4. interal

 

해당 키워드로 한정된 경우,

같은 어셈블리에 있는 코드에 대해서 접근 가능합니다.

같은 어셈블리에 있다는 표현은 말은 쉽게 풀어서 같은 프로젝트 안에 있다라고 표현할 수 있습니다.

같은 어셈블리 안에서는 public, 다른 어셈블리에게는 private 으로 처리할 수 있도록 합니다.

 

예시>

// Assembly : MyProject
namespace MyProject
{
    internal class MyClass
    {
        public string name;
    }
}

 

// Assembly : MyProject
namespace MyProject
{
    public class MyNewClass
    {
        MyClass c1 = new MyClass(); // 같은 어셈블리에서 접근 가능
        c1.name = "SynK"; 
    }
}

 

// Assembly : YourProject
namespace YourProject
{
    public class YourClass
    {
        MyClass c1 = new MyClass(); // 다른 어셈블리에서 인터널 클래스 접근 불가 
    }
}

5. 요약

접근 한정자

설명

public

클래스 내부/외부 모든 곳에서 접근 가능.

private

클래스 내부에서만 접근 가능. 파생 클래스에서는 접근 불가.

protected

클래스 외부에서는 접근할 수 없음. 파생 클래스에서는 접근 가능.

internal

같은 어셈블리에서는 접근 가능. 다른 어셈블리에서는 접근 불가.

 

'.NET C# > 문법' 카테고리의 다른 글

interface, abstract 키워드  (0) 2020.02.15