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#에서 캡슐화는 액세스 지정자에 의해 결정됩니다.
위의 예제코드는 캡슐화를 구현하기 위해 멤버 변수 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 |