ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [08강] 클래스
    프로그래밍/C# 2022. 5. 31. 01:31

    목차

    클래스 형식과 접근 한정자
    객체 생성과 멤버 접근
    생성자와 소멸자
    정적 멤버 선언과 사용
    클래스 참조
    this

     

    클래스 형식과 접근 한정자

    클래스 개요

    클래스란?

      - 변수와 메서드를 그룹화한 것

      - 주요 개념

        - 그룹화를 위해 class 키워드와 형식 사용

        - new 연산자로 생성하여 사용

        - new를 사용하지 않으면 같은 클래스를 참조할 수 있는 변수가 됨(클래스 참조 변수)

        - 클래스를 new를 통해 생성하면 객체가 됨

     

      인스턴스와 객체의 관계

      - 인스턴스는 본질, 객체는 실물인 형상

    test1과 test2 객체는 같은 A 인스턴스를 가진다.

     

    클래스 형식

      - 클래스 형식과 구조체 형식은 유사하다

        struct struct_name { }

        class Cass_Name { }

        xxx.멤버 변수, xxx.멤버 메서드

     

      - 구조체 선언은 값형, 클래스 선언은 참조형

      - 형식

        class Class_Name

        {

            variable 선언; // 멤버변수

            method 선언; // 멤버함수

        }

    예시 코드

    class Date
    {
    	int year, month, day;
    	void Print()
    	{
    		Console.WriteLine($"{year} {month} {day}");
    	}
    }

     

    접근 한정자(access modifier)

      - 클래스 멤버에 대한 접근 권한 설정

      - 접근 한정자 : private, protected, public, internal, protected internal

      - 클래스 자체에 적용하는 접근 한정자

        public : 명시적

        internal : 암시적

        * 클래스 안의 멤버들에 대한 암시적 접근 한정자는 private이며, namespace 안의 클래스에 대한 암시적 접근 한정자는 internal 이 디폴트이다. 따라서 명시적으로 표시해주는 것이 좋은 코딩 습관이다.

     

      - 형식

        [접근 한정자] class Class_name

        {

            [접근 한정자] variable 선언;

            [접근 한정자] method 선언;

        }

     

      - 클래스 안에서 접근 한정자의 역할

        public

        - 클래스 내외부에서 모두 접근 가능

        - 상속관계에서도 위와 동일하게 접근 가능

        private

        - 클래스 또는 구조체 안에서만 멤버에 접근

        - 클래스 외부에서 사용 안됨

        protected

        - 클래스 안에서는 private와 같은 역할

        - 하위 클래스 안에서는 상위 protected에 접근 가능(private와 동일한 역할)

     

      - 어셈블리 안에서 접근 한정자의 역할

        internal

        - 같은 어셈블리(exe, dll)안에 있을 때만 내외부에서 멤버에 접근 가능

        - 클래스 서두에 접근 한정자 생략은 internal을 생략한 것

        protected internal

        - 같은 어셈블리(exe, dll)안에서는 internal과 동일

        - 서로 다른 어셈블리 안에서 상속관계일 때 하위 클래슨느 상위 클래스의 protected internal 멤버에만 접근할 수 있다

        - 외부에서는 접근할 수 없다

     

    객체 생성과 멤버 접근

      - 객체 생성 키워드 : new

      - 객체 해제는 가비지 컬렉터에게

     

      - 접근 한정자에 따라 접근 제한

      - 객체의 멤버는 ','과 함께 표기

        objectName.variable

        objectName.method

     

    생성자와 소멸자

    개념

      - 생성자(constructor)

        객체를 생성할 때 자동으로 호출되는 메서드

      - 소멸자(destructor)

        객체가 소멸될 때 호출되는 메서드

      - 호출되는 시기?

        생성자 : new

        소멸자 : 가비지컬렉터

     

    생성자의 형식

      - 기본 생성자

        클래스명과 같은 이름을 갖는다

        매개변수를 갖지 않는다

        리턴형은 없음

        접근 한정자는 public

     

      - 생성자(new를 통해서 생성될 때 외부에서 값을 가져갈 수 있도록 한다)

        클래스명과 같은 이름을 갖는다

        매개변수가 있음

        리턴형은 없다

        접근 한정자는 public

     

    소멸자 형식

      - 클래스명과 같음

      - 리턴형 없음

      - 접근 한정자 없음

      - ~로 시작함

     

    예시 코드

    class MyClass
    {
    	~MyClass() { }
    }

     

      소멸자의 특징

      - 소멸자는 클래스에만 있음

      - 소멸자는 오직 한 개임

      - 소멸자는 상속 또는 오버로딩 될 수 없음

      - 소멸자는 임의로 호출 불가

      - 소멸자는 접근 한정자나 매개변수가 없다

     

    정적 멤버 선언과 사용

    언어에 따른 static 역할 비교

      C : 변수 값 유지

      C++ : 객체 안에서 변수 공유

      C# : 객체를 생성하지 않고 멤버 사용

      ex ) Console.WriteLine()

     

    Main() 안에서 같은 멤버를 호출할 때

        public class Practice
        {
             static void Main(string[] args)
             {
                 Print();
             }
    
             private static string message = "Hello World!";
    
             static void Print()
             {
                 Console.WriteLine(message);
             }
        }

     

    클래스 참조

    클래스 형태

      - 선언한 클래스 : 참조형 클래스 변수

        MyClass myRefTest;

      - new로 생성한 클래스 : 객체

        MyClass myTest = new MyClass();

        myRefTest = myTest; // 참조

     

    예시 코드

        public class Practice
        {
             static void Main(string[] args)
             {
                 MyClass myClass = new MyClass();
                 MyClass refClass = myClass;
                 refClass.number = 7;
                 Console.WriteLine(myClass.number);
             }
        }
    
        class MyClass
        {
             public int number;
        
             public MyClass()
             {
                 number = 12;
             }
        }

     

    this

      - this는 객체 자신을 참조하는 키워드

      - 사용 형식 : this.member

      - 메소드의 매개 변수와 멤버 변수명이 같을 때

        this.memberVariable = 매개변수;

     

    예시 코드

        public class Practice
        {
             static void Main(string[] args)
             {
                 MyClass testClass = new MyClass(12);
                 Console.WriteLine(testClass.number);
             }
        }
    
        class MyClass
        {
            public int number;
    
            public MyClass(int number)
            {
                this.number = number;
            }
        }

     

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

    [10강] 배열/객체배열, 속성/인덱서 비교  (0) 2022.06.20
    [09강] 속성과 인덱서  (0) 2022.06.13
    [07강] 프로젝트 실습 - 스마트 밥솥  (0) 2022.05.29
    [06강] 파일 입출력  (0) 2022.05.02
    [05강] 배열  (0) 2022.04.24
Designed by Tistory.