C# 기초다지기 - 클래스




안녕하세요 열코입니다.

이번시간에는 C# 클래스에 대해 알아보겠습니다.

클래스는 구조체와 비슷한 사용자 정의 자료형이지만 메소드(함수)를 가질 수 있습니다.

객체(Object)는 클래스의 인스턴스입니다. 클래스를 구성하는 변수와 메소들르 클래스의 멤버라고 합니다.


클래스 정의하기

클래스 정의는 class 키워드와 클래스의 이름으로 시작합니다.

클래스의 몸체는 중괄호 { }로 둘러싸여있습니다.

다음 예제와 같이 자세히 설명하도록 하겠습니다.

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
using System;
 
namespace SquareApplication {
    class Square {
        private double length;
        public double GetLength() {
            return length;
        }
        public void SetLength(double length_) {
            length = length_;
        }
        public double GetArea() {
            return length * length;
        }
    }
    class mainfunction {
        static void Main(string[] args) {
            Square sq1 = new Square();
            Square sq2 = new Square();
 
            sq1.SetLength(2);
            sq2.SetLength(10);
 
            Console.WriteLine("SQUARE1 AREA : {0}", sq1.GetArea()); // 4 출력
            Console.WriteLine("SQUARE2 AREA : {0}", sq2.GetArea()); // 100 
        }
    }
}
cs


- 액세스 지정자는 멤버에 대한 접근 규칙을 지정합니다.

- public 지정자는 함수 외부에서 직접 접근이 가능합니다.

- private 지정자는 함수 내부에서만 직접 접근이 가능합니다.

- protected 지정자는 상속받은 클래스 내부에서만 직접 접근이 가능합니다.

- 클래스 멤버의 기본 액세스 지정자는 private 입니다.

- 클래스 맴버에 접근하기위해 점(.) 연산자를 사용합니다.


멤버함수 및 캡슐화

클래스의 멤버 함수는 다른 변수와 비슷한 클래스 정의내에 프로토타입을 갖는 함수입니다.

위의 예제에서 SetLength, GetLength, GetArea 함수가 멤버함수를 의미합니다.

C#에서 캡슐화는 액세스 지정자에 의해 결정됩니다.

-> C# 캡슐화 설명보러가기

위의 예제코드는 캡슐화를 구현하기 위해 멤버 변수 length를 private 멤버로 숨기고,

public 메소드를 통해 함수 외부에서 간접적으로 접근하도록 하였습니다.


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
27
28
29
30
31
32
33
using System;
 
namespace SquareApplication {
    class Square {
        private double length;
        
        public Square() {
            Console.WriteLine("생성자가 호출되었습니다.");
        }        
 
        public double GetLength() {
            return length;
        }
        public void SetLength(double length_) {
            length = length_;
        }
        public double GetArea() {
            return length * length;
        }
    }
    class mainfunction {
        static void Main(string[] args) {
            Square sq1 = new Square(); // 생성자 호출
            Square sq2 = new Square(); // 생성자 호출
 
            sq1.SetLength(2);
            sq2.SetLength(10);
 
            Console.WriteLine("SQUARE1 AREA : {0}", sq1.GetArea()); // 4 출력
            Console.WriteLine("SQUARE2 AREA : {0}", sq2.GetArea()); // 100 출력
        }
    }
}
cs



위 코드에서 23, 24번줄에 Square 클래스의 객체를 생성할 때 정의된 생성자가 호출됩니다.

생성자를 따로 지정하지 않아도 기본(default) 생성자가 호출됩니다.

기본 생성자는 아무일도 하지않는 함수입니다.

생성자는 대게 멤버 변수 값을 초기화하는 용도로 사용됩니다.

또한 생성자에 매개변수를 추가하여 오버라이딩하여 사용할 수 있습니다.

다음 예제를 통해 확인하세요.

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
using System;
 
namespace SquareApplication {
    class Square {
        private double length;
        
        public Square(double length_) {
            length = length_;
            Console.WriteLine("생성자가 호출되었습니다.");
        }        
 
        public double GetArea() {
            return length * length;
        }
    }
    class mainfunction {
        static void Main(string[] args) {
            Square sq1 = new Square(4.0); // 생성자 호출
            Square sq2 = new Square(12); // 생성자 호출
 
            Console.WriteLine("SQUARE1 AREA : {0}", sq1.GetArea()); // 16 출력
            Console.WriteLine("SQUARE2 AREA : {0}", sq2.GetArea()); // 144 출력
        }
    }
}
cs

 

18, 19번줄의 객체를 생성하는 과정에서 매개변수 값을 넘겨주어 생성자에서 멤버 변수의 값을 초기화합니다.



C# 소멸자

소멸자는 클래스의 객체가 지정된 범위를 벗어나 할 일을 모두 끝냈을 때 호출되는 특정 멤버 함수입니다.

접두사 물결(~)이 붙어있으며 생성자와 같이 함수 이름은 클래스의 이름과 동일합니다.

사용자가 정의하지 않아도 기본(default) 소멸자가 제공되며, 대게 메모리를 해제하는데 사용됩니다.

다음 예제로 소멸자에 대해 살펴보도록하겠습니다.

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
using System;
 
namespace SquareApplication {
    class Square {
        private double length;
        
        public Square(double length_) {
            length = length_;
            Console.WriteLine("생성자가 호출되었습니다.");
        }        
 
        ~Square() {
            Console.WriteLine("소멸자가 호출되었습니다.");
        }
 
        public double GetArea() {
            return length * length;
        }
    }
    class mainfunction {
        static void Main(string[] args) {
            Square sq1 = new Square(4.0); // 생성자 호출
            Square sq2 = new Square(12); // 생성자 호출
 
            Console.WriteLine("SQUARE1 AREA : {0}", sq1.GetArea()); // 16 출력
            Console.WriteLine("SQUARE2 AREA : {0}", sq2.GetArea()); // 144 출력
        } // 이 시점에서 소멸자가 생성자의 역순으로 출력됩니다.
    }
}
cs


메인함수내의 Square 클래스의 객체 sq1과 sq2가 차례로 생성되고

27번줄에서 Main함수가 끝남과 동시에 객체 sq1과 sq2가 메모리 해제되며 소멸자가 호출됩니다.

소멸자는 생성자의 역순으로 sq2, sq1 순으로 호출됩니다.



이상 'C# 클래스'에 대해 알아보았습니다.

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

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


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

C# 기초다지기 - 상속  (0) 2018.11.09
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# 기초다지기 - 변수  (0) 2018.11.05

to Top