Home C# Class 01
Post
Cancel

C# Class 01

매개변수

C# 메소드는 클래스 내부에서 C/C++의 함수와 같은 개념으로 Pass By Value와 Pass By Reference로 나뉜다.

Pass By Value는 외부에서 변수를 그대로 전달하며, 값만 전달하는 것으로 외부의 변수와 별개의 메모리 공간을 사용하여 데이터를 복사한다.

Pass By Reference는 외부 변수의 메모리 공간을 가르키게 되어 메소드 내부에서 외부의 변수를 직접 접근할 수 있다.

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
    using System;

    namespace PassByRef
    {
        class MainApp
        {
            static void Swap(ref int a, ref int b)
            {
                int temp = b;
                b = a;
                a = temp;
            }

            static void Main(string[] args)
            {
                int x = 3;
                int y = 4;

                Console.WriteLine($"x:{x}, y:{y}"); // x:3, y:4

                Swap(ref x, ref y);

                Console.WriteLine($"X:{x}, y:{y}"); // x:4, y:3
            }
        }
    }

클래스

클래스는 추상화를 말한다. 클래스 내에 선언되는 요소들을 멤버라고 하며, 멤버는 크게 필드와 메소드로 나누어 진다. 필드는 데이터를 말하고 메소드는 함수를 말한다. 클래스는 선언을 통해서 인스턴스(객체)가 된다. 인스턴스화를 통해서 실체가 생기고 사용할 수 있다.

객체는 생성될 때 생성자가 호출되고 소멸될 때 소멸자가 생성된다.

생성자는 클래스와 동일한 이름을 가지는 메소드로 별도로 명시하지 않을 경우 객체가 생성될 때 컴파일러에서 자동으로 만들어 주며, 이를 Default Constructor라 한다. 생성자를 사용하는 이유는 주로 클래스의 필드값을 초기화하기 위해서 사용한다.

소멸자는 생성자 앞에 ‘~’ 기호가 붙은 이름이며, 사용하는 것이 지양된다. 그 이유는 C#에서 소멸자는 CLR의 가비지 컬렉터가 객체의 소멸 시점을 판단해서 호출하기 때문이다. 소멸자를 명시적으로 사용할 경우 클래스는 상속받은 Finalize() 메소드를 호출하며, 이 경우 프로그램의 성능 저하를 초래할 수 있기 때문에 가급적 사용하지 않는다.

정적 필드와 정적 메소드

“static은 메소드나 필드가 클래스의 인스턴스가 아닌 클래스 자체에 소속되도록 지정하는 한정자”

static 한정자가 붙은 멤버는 클래스 자체에 소속되어 인스턴스가 아니라도 호출하여 접근할 수 있다. 또한 클래스 자체에 소속되기 때문에 프로그램 전체에서 유일하게 존재한다.

    class Cat 
    {
        public static string species = "mammalia";   // 정적 필드

        public string name;             // 필드
        public string age;              // 필드

        public Cat() {                  // 생성자
            name = "Roy";
            age = 0;    
        }

        public void Sleep() {           // 메소드
            Console.WriteLine($"{name}: zzzzz....");
        }
    }
This post is licensed under CC BY 4.0 by the author.