2. 접근 제한자

이번 강의는 "접근 제한자" 에 대해서 알아보는 시간을 가져보겠습니다.

 

이에 앞서, 지난 강의의 소스를 일단 봅시다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hello_World
{
    class smartphone
    {
        public string phonename; //폰 이름 필드
        public int version; // 폰의 버전을 나타내는 필드
        public string ownername; // 폰 주인을 나타내는 필드

        public void whosephone()
        {
            Console.WriteLine(" {0} : 꺼임 ", ownername);

        }
    }
        class Program
    {
        static void Main(string[] args)
        {
            smartphone smart = new smartphone();
            smart.ownername = "JOHNSON";
            smart.version = 6;
            smart.phonename = "iPhone";
            smart.whosephone();

            Console.WriteLine("{0} 님의 폰 이름은 {1} 이구 그 버전은 {2} 임", smart.ownername, smart.phonename, smart.version);
            
        }
    }
}

 

 

smartphone 클래스 내부의 필드(변수) 를 보시면, 앞에 "public" 이라는 단어가 붙어있습니다.

 

이러한 public 같은 것을 접근 제한자 라고 하는데요, 다음과 같은 종류가 있습니다.

 

1. private

2. public

3. protected

4. internal

5. protected internal

 

첫 번째로, private 는 클래스 내부에서만 사용 가능하며, 그 외부 클래스에서 불러올때는 오류가 납니다.

또한, 아무 제한자 없이 int a; 등으로 그냥 선언을 했을시에는 앞에 자동으로 private 형이 붙습니다.

예를 들어 보겠습니다.

 

class water
{
   int value;
}
class Program
{
  static void Main(string[] args)
        {
            
         water wat = new water();
         wat.value = 1000;
            
        }
}

 

이런식으로 코드를 짜면, 위 water class 내부에서는 int value 가 private int value; 가 되면서 외부 클래스에서는 사용을 못 하게 됩니다. 그래서 이런 오류가 발생하죠

 

 

그렇다면 어떤 식으로 짜야할까요? 답은 간단합니다. 두 번째로 적힌 public 제한자를 앞에 붙혀두면 됩니다.

 

public 은 "모든 곳" 에서 그 변수에 접근 가능합니다.

 

class water
{
  public int value;
}
class Program
{
  static void Main(string[] args)
        {
            
         water wat = new water();
         wat.value = 1000;
            
        }
}

 

이런 식으로 소스를 짜면 오류는 더이상 안나게 됩니다.

 

그래서 1강 소스 (맨 위의 소스코드) 에서 smartphone 내부의 필드를 public 으로 선언해준 것 입니다.

 

internal 은 동일한 프로젝트 내에서 사용 가능한 것 입니다. 즉, 동일한 프로그램(namespace) 내에서라면 public 과 동일한 역할을 합니다.

 

protected 는 "상속된 클래스 에서" 만 사용 가능한 한정자 입니다. 이 부분은 상속을 다루며 언급 하겠습니다.