C# 클래스(접근 한정자, 생성자, 소멸자)

728x90
  •  클래스 개념

 - 클래스는 사용자가 직접 만든 틀

 - 변수(필드)와 함수(메소드)를 하나의 단위로 결합

 - 상속, 다형성, 파생 클래스 등 클래스의 특수화 메커니즘을 가짐

  • 접근 한정자

 - 클래스의 멤버에 액세스(접근)할 수 있는 수준

public 액세스가 제한되지 않음
protected 이 클래스 또는 이 클래스에서 파생된 클래스로만 액세스가 제한됨
internal 현재 어셈블리(.exe, .dll 등)로만 액세스가 제한됨
protected internal 포함하는 클래스, 포함하는 클래스에서 파생된 클래스 또는 동일한 어셈블리 내의 클래스로만 액세스가 제한됨
private 이 클래스로만 액세스가 제한됨
private protected 포함하는 클래스 또는 동일한 어셈블리 내의 포함하는 유형으로부터 파생된 클래스로만 액세스가 제한됨
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _077_Class
{
    class AA
    {
        //멤버 변수
        int num1; //기본적으로 private 속성
        public int num2, num3;

        //멤버 함수
        public void Print()
        {
            Console.WriteLine("aa : {0}, bb : {1}, cc : {2}", num1, num2, num3);
        }
        private void PrintPrivate()  //priavte 접근 한정자 : 외부 접근 불가
        {
            Console.WriteLine("aa : {0}, bb : {1}, cc : {2}", num1, num2, num3);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            AA aa = new AA(); //int aa;
            //aa.num1 = 10;  //오류(private 속성이기 때문에)
            aa.num2 = 100;  //public 속성은 접근 가능
            aa.num3 = 1000;

            aa.Print();
            // aa.PrintPrivate();  //오류 
        }
    }
}
  • new키워드

 - 클래스의 객체 생성

 - 클래스명 객체명 = new 생성자

   AA aa = new AA();

 

  • 생성자 소멸자

 - 생성자 : 객체 생성할 때 호출(new)

 - 소멸자 : 객체가 소멸될 때 호출(GC)

생성자 소멸자
- 클래스 명 동일
- 리턴형 X
- 접근 한정자 public
- 멤버 변수 초기화
- 객체 생성 시 자동으로 처리하는 것들
- 클래스 명 동일
- 리턴형 X
- 접근 한정자 X
- '~'키워드로 구성
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _078_Constructor
{
    class AA
    {
        int a;
        float f;

        public AA()
        {
            a = 0;
            f = 0f;
            Console.WriteLine("  Call Constructor  ");
            Console.WriteLine("  a : {0}", a);
            Console.WriteLine("  f : {0}", f);
        }
        public AA(int _a)
        {
            a = _a;

            Console.WriteLine("  Call Constructor  ");
            Console.WriteLine("  a : {0}", a);
            Console.WriteLine("  f : {0}", f);
        }
        public AA(int _a, float _f)
        {
            a = _a;
            f = _f;

            Console.WriteLine("  Call Constructor  ");
            Console.WriteLine("  a : {0}", a);
            Console.WriteLine("  f : {0}", f);
        }
        ~AA()
        {
            Console.WriteLine("  Call Destructor  ");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //생성자 함수 오버로딩
            AA aa = new AA();  
            AA aaa = new AA(10);
            AA aaaa = new AA(100, 0.5f);
        }
    }
}

 

728x90

'게임 프로그래밍 > C#' 카테고리의 다른 글

C# 클래스 상속, is/as 키워드  (0) 2021.12.16
C# 클래스 static & this  (0) 2021.12.15
C# 메서드 오버로딩(Method Overloading)  (0) 2021.12.14
C# Call by Value/Call by Reference 차이  (0) 2021.12.14
C# 숫자 달리기  (0) 2021.12.13