포스트

[C#] protected 키워

[C#] protected 키워

protected 키워드 정리

protectedC++, C#, Java객체지향 프로그래밍(OOP) 언어에서
접근 제어자로 사용됩니다.
주로 상속 관계에서 멤버 변수나 메서드의 접근 범위를 제어하는 데 사용됩니다.


protected의 특징

  1. 클래스 내부와 상속받은 자식 클래스에서 접근 가능
  2. 다른 외부 클래스나 객체에서는 접근 불가능
  3. 상속 관계를 염두에 둔 접근 제어
  4. 함수와 클래스에 사용할 수 있음

protected 멤버 변수 사용 예시

C++에서의 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>

class Base {
protected:
    int protectedValue;

public:
    Base() : protectedValue(100) {}
};

class Derived : public Base {
public:
    void ShowValue() {
        std::cout << "Protected Value: " << protectedValue << std::endl;
    }
};

int main() {
    Derived d;
    d.ShowValue();
    return 0;
}

출력:

1
Protected Value: 100

C#에서의 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;

class Base
{
    protected int protectedValue = 42;
}

class Derived : Base
{
    public void DisplayValue()
    {
        Console.WriteLine("Protected Value: " + protectedValue);
    }
}

class Program
{
    static void Main()
    {
        Derived d = new Derived();
        d.DisplayValue();
    }
}

출력:

1
Protected Value: 42

protected 함수 사용 예시

C++에서의 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>

class Animal {
protected:
    void Speak() {
        std::cout << "Animal sound" << std::endl;
    }
};

class Dog : public Animal {
public:
    void Bark() {
        Speak();
    }
};

int main() {
    Dog dog;
    dog.Bark();
    return 0;
}

출력:

1
Animal sound

C#에서의 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;

class Animal
{
    protected void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

class Dog : Animal
{
    public void Bark()
    {
        Speak();
    }
}

class Program
{
    static void Main()
    {
        Dog dog = new Dog();
        dog.Bark();
    }
}

출력:

1
Animal sound

protected 생성자 사용 예시

C++에서의 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>

class Base {
protected:
    Base() {
        std::cout << "Base constructor" << std::endl;
    }
};

class Derived : public Base {
public:
    Derived() {
        std::cout << "Derived constructor" << std::endl;
    }
};

int main() {
    Derived d;
    return 0;
}

출력:

1
2
Base constructor
Derived constructor

protected 클래스 사용 예시

C++에서의 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>

class Outer {
protected:
    class Inner {
    public:
        void Greet() {
            std::cout << "Hello from Inner" << std::endl;
        }
    };
};

class Derived : public Outer {
public:
    void CallInner() {
        Inner inner;
        inner.Greet();
    }
};

int main() {
    Derived d;
    d.CallInner();
    return 0;
}

출력:

1
Hello from Inner

protected와 다른 접근 제어자 비교

접근 제어자동일 클래스 내부상속받은 클래스 내부외부 클래스
publicOOO
protectedOOX
privateOXX
internal (C#)OXO (같은 어셈블리)
private protected (C#)OO (같은 어셈블리)X

정리

  1. protected클래스 내부상속받은 자식 클래스에서만 접근할 수 있는 접근 제어자입니다.
  2. 함수, 생성자, 중첩 클래스 등에 사용하여 상속 구조에서 접근 범위를 제한할 수 있습니다.
  3. 외부 접근이 불가능하므로 상속 구조를 명확히 관리할 때 유용합니다.
  4. publicprivate의 중간 단계로, 상속과 캡슐화를 동시에 고려할 때 적절한 선택입니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.