C# 기초다지기 - 캡슐화




안녕하세요 열코입니다.

이번시간에는 캡슐화에 대해 알아볼건데요.

캡슐화는 객체 지향프로그래밍의 중요한 기능중 하나입니다.

캡슐화란 물리적, 논리적 패키지내에 하나이상의 항목을 포함하는 프로세스라고 정의됩니다.

C# 프로그램에서 캡슐화는 액세스 지정자에 의해 구현됩니다.

액세스 지정자는 클래스 멤버의 범위 및 가시성을 제한하며 다음과 같은 액세스 지정자를 지원합니다.


public, private, protected, internal, protected internal


1. public 액세스 지정자

public 액세스 지정자는 클래스 멤버 변수 및 함수를 다른 함수 및 객체에 표시할 수 있도록 합니다.

모든 public 멤버는 class 외부에서 액세스 할 수 있습니다.

다음 예제 코드를 참고하세요.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
 
namespace TestApplication {
    class Semo {
        public int width;
        public int height;
 
        public double GetArea() {
            return (double)width * (double)height / 2.0;
        }
    }
    class Test {
        static void Main(string[] args) {
            Semo s = new Semo();
            s.width = 2;
            s.width = 4;
            Console.WriteLine("Area : {0}", s.GetArea());
        }
    }
}
cs


Semo 클래스의 멤버 변수 width, height와 멤버 함수 GetArea()는 모두 public 지정자로 되어있으므로,

15,16,17번 줄에서 Semo 클래스 객체 s를 통해 멤버 변수와 함수에 직접 접근이 가능한 모습입니다.


2. private 액세스 지정자

private 접근 지정자는 클래스 멤버 변수 및 멤버 함수를 다른 함수 및 객체에서 숨기도록 지정합니다.

동일한 클래스내부에서만 접근 가능하며, 클래스의 객체 또한 private 멤버에 접근할 수 없습니다.

따라서 클래스 외부에서 private 지정자에게 접근하기 위해서는 클래스 내부의 public 함수를 통해 접근할 수 있도록 합니다. 

대표적으로 getter와 setter를 예로들수 있는데요. 다음 예제 코드를 확인해주세요.


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
27
28
29
30
31
32
using System;
 
namespace TestApplication {
    class Semo {
        private int width;
        private int height;
 
        public void SetWidth(int width_) {
            width = width_;
        }
 
        public void SetHeight(int height_) {
            height = height_;
        }
 
        public int GetWidth() {
            return width;
        }
 
        public int GetHeight() {
            return height;
        }
    }
    class Test {
        static void Main(string[] args) {
            Semo s = new Semo();
            s.SetHeight(2):
            s.SetWidth(4);
            Console.WriteLine("Area : {0}", (double)s.GetWidth() * (double)s.GetHeight() / 2.0);
        }
    }
}
cs


8, 12번째 줄을 보시면 Set~() 함수를 통해 인수로 받은 값을 클래스 내 private 멤버 값을 초기화해주는 public 함수가 존재합니다. 이를 보통 setter라고 부릅니다.

16, 20번째 줄을 보시면 Get~() 함수를 통해 클래스 내 private 멤버 값을 반환하는 public 함수가 존재하며 이를 getter라 부릅니다.


3. protected 액세스 지정자

protected 접근 지정자는 하위(상속) 클래스가 상위(기본) 클래스의 멤버 변수 및 함수에 접근할 수 있도록합니다.

이는 C# 상속 장에서 자세히 다루도록 하겠습니다.


4. internal 액세스 지정자

C++ 클래스에서는 존재하지 않던 액세스 지정자입니다.

이 internal 접근 지정자는 클래스 멤버 변수 및 함수를 동일한 어셈블리의 파일 내에서만 접근할 수 있도록 합니다.


5. protected internal 액세스 지정자

이 접근 지정자 역시 상속 구현시 사용되는 접근 지정자며 동일한 어셈블리 파일 내 하위 클래스에서만 접근 가능하도록 합니다.


이상 'C# 캡슐화'에 대해 알아보았습니다.

질문 사항은 모두 커뮤니티에서 받습니다. -> 커뮤니티 바로가기

메인 페이지로 이동하시면 더 많은 자료를 볼 수 있습니다.



'C#' 카테고리의 다른 글

C# 기초다지기 - 구조체  (0) 2018.11.08
C# 기초다지기 - 문자열  (2) 2018.11.07
C# 기초다지기 - 배열  (1) 2018.11.06
C# 기초다지기 - 상수  (0) 2018.11.06
C# 기초다지기 - 프로그램 구조  (0) 2018.11.05
C# 기초다지기 - 변수  (0) 2018.11.05
C# DB연동  (1) 2018.08.29
[C#] 유니코드 한글로 변환하기  (0) 2018.08.22

to Top