1. 객체 지향 프로그래밍 (OOP)

  • 정의: 코드 내의 모든 것을 객체로 표현하는 프로그래밍 패러다임.
  • 객체(Object): 세상의 모든 것을 지칭하며, 속성과 기능으로 이루어집니다.
    • 속성: 데이터를 통해 표현 (예: 다리, 귀).
    • 기능: 메소드를 통해 표현 (예: 뛰기, 듣기).

2. 클래스(Class)

  • 정의: 객체를 생성하기 위한 청사진(모형).
  • 예시:
class Cat
{
    public string Color; // 데이터: 속성
    public void Meow()   // 메소드: 기능
    {
        Console.WriteLine($"{Color} 고양이: 야옹");
    }
}

Cat kitty = new Cat();  // Cat 클래스의 객체 생성

3. 클래스와 객체의 관계

  • 클래스는 복합 데이터 형식의 참조 형식입니다.
  • **객체(Object)**는 클래스의 인스턴스(실체)입니다.
    Cat kitty = new Cat();
    • new: 생성자를 호출해 객체를 힙(Heap)에 생성.
    • kitty: 생성된 객체의 참조를 저장.

4. 생성자(Constructor)와 종료자(Destructor)

a. 생성자

  • 클래스와 같은 이름을 가지며 객체 생성 시 호출됩니다.
  • 객체를 초기화하기 위한 용도로 사용됩니다.
  • 예시:
class Cat
{
    public string Color;

    // 생성자
    public Cat(string color)
    {
        Color = color;
    }

    public void Meow()
    {
        Console.WriteLine($"{Color} 고양이: 야옹");
    }
}

Cat kitty = new Cat("검은색"); // 생성자 호출

b. 종료자

  • 객체가 소멸될 때 호출되는 특별한 메소드.
  • 매개변수나 한정자가 없으며 오버로딩 불가능.
  • CLR의 가비지 컬렉터가 객체의 소멸 시점을 판단해 호출.
  • 예시:
class Cat
{
    ~Cat()
    {
        Console.WriteLine("Cat 객체가 소멸되었습니다.");
    }
}

5. 정적 필드와 메소드 (Static)

  • static 한정자를 사용해 클래스 자체에 소속되는 필드와 메소드.
  • 특징:
    • 클래스의 모든 인스턴스가 공유.
    • 객체를 생성하지 않고 호출 가능.
  • 예시:
class Counter
{
    public static int Count = 0;

    public static void Increment()
    {
        Count++;
    }
}

Counter.Increment(); // 객체 없이 호출
Console.WriteLine(Counter.Count); // 출력: 1

6. 클래스의 기본 구조

class ClassName
{
    // 필드 (Field): 데이터 저장
    public string FieldName;

    // 생성자 (Constructor): 객체 초기화
    public ClassName(string value)
    {
        FieldName = value;
    }

    // 메소드 (Method): 동작 정의
    public void MethodName()
    {
        Console.WriteLine($"Field: {FieldName}");
    }

    // 정적 메소드 (Static Method)
    public static void StaticMethod()
    {
        Console.WriteLine("This is a static method.");
    }
}

정리

  • 클래스는 객체를 생성하기 위한 청사진으로, 속성(필드)과 기능(메소드)을 포함.
  • 객체는 클래스의 인스턴스로, new 키워드를 통해 생성.
  • 생성자는 객체를 초기화하고, 종료자는 객체 소멸 시 호출.
  • 정적 필드/메소드는 클래스 자체에 속하며, 모든 인스턴스가 공유 가능.

+ Recent posts