TIL 25 기초문법

qkrrlcks00·2024년 9월 20일

클래스는 생성자와 소멸자라는 특별한 종류의 메서드를 가질 수 있습니다. 생성자는 클래스의 인스턴스를 생성할 때 호출되는 메서드이며, 소멸자는 클래스의 인스턴스가 메모리에서 해제될 때 호출되는 메서드입니다.

  • 생성자 (Constructor)

    1. 생성자란?
      • 생성자는 객체가 생성될 때 호출되는 특별한 메서드입니다.
      • 클래스의 인스턴스(객체)를 초기화하고, 필요한 초기값을 설정하는 역할을 수행합니다.
      • 생성자는 클래스와 동일한 이름을 가지며, 반환 타입이 없습니다.
      • 객체를 생성할 때 new 키워드와 함께 호출됩니다.
    2. 생성자의 특징
      • 객체를 초기화하는 과정에서 필요한 작업을 수행할 수 있습니다.
      • 생성자는 여러 개 정의할 수 있으며, 매개변수의 개수와 타입에 따라 다른 생성자를 호출할 수 있습니다. 이를 생성자 오버로딩이라고 합니다.
      • 기본적으로 매개변수가 없는 디폴트 생성자가 클래스에 자동으로 생성되지만, 사용자가 직접 정의한 생성자가 있는 경우 디폴트 생성자가 자동으로 생성되지 않습니다.
  • 소멸자 (Destructor)

    1. 소멸자란?

      • 소멸자는 객체가 소멸되는 시점에서 자동으로 호출되는 특별한 메서드입니다.
      • 객체의 사용이 종료되고 메모리에서 해제될 때 자동으로 호출되어 필요한 정리 작업을 수행합니다.
      • 클래스와 동일한 이름을 가지며, 이름 앞에 ~ 기호를 붙여 표현합니다.
      • 소멸자는 반환 타입이 없고 매개변수를 가질 수 없습니다.
      • C#에서는 가비지 컬렉터(Garbage Collector)에 의해 관리되는 메모리 해제를 담당하므로, 명시적으로 소멸자를 호출하는 것은 일반적으로 권장되지 않습니다.

프로퍼티 (Property)

  • 1) 프로퍼티란?

    • 프로퍼티는 클래스 멤버로서, 객체의 필드 값을 읽거나 설정하는데 사용되는 접근자(Accessor) 메서드의 조합입니다.
    • 객체의 필드에 직접 접근하지 않고, 간접적으로 값을 설정하거나 읽을 수 있도록 합니다.
    • 필드에 대한 접근 제어와 데이터 유효성 검사 등을 수행할 수 있습니다.
    • 프로퍼티는 필드와 마찬가지로 객체의 상태를 나타내는 데이터 역할을 하지만, 외부에서 접근할 때 추가적인 로직을 수행할 수 있습니다.
  • 2) 프로퍼티 구문

    • 프로퍼티는 get과 set 접근자를 사용하여 값을 읽고 설정하는 동작을 정의합니다.
    • get 접근자는 프로퍼티의 값을 반환하고, set 접근자는 프로퍼티의 값을 설정합니다.
    • 필요에 따라 get 또는 set 접근자 중 하나를 생략하여 읽기 전용 또는 쓰기 전용 프로퍼티를 정의할 수 있습니다.
    class Person
{
    private string name;
    private int age;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public int Age
    {
        get { return age; }
        set { age = value; }
    }
}

프로퍼티 사용 예시

 public string Name
    {
        get { return name; }
        private set { name = value; }
    }
public int Age
    {
        get { return age; }
        set
        {
            if (value >= 0)
                age = value;
        }
    }

응용법으로 위와같이 프로퍼티 안에 private 를 만들어, get만 public으로 가져갈수 있게 하고 set은 private로 둘수도 있고,

set에 유효성 검사를 할수도 있다.

[접근 제한자] [데이터 타입] 프로퍼티명 { get; set; }

위와 같이 하면 자동 프로퍼티

매개변수 값 할당

매개변수에 지정된 값을 넣어주면 값을 지정해주지 않아도 된다

void SkillCheck (string Keyname, int i = 0)

이러면 i 값은 안넣어줘도 된다

반환형

void가 아닐땐(int 등 반환형이 있을땐) return값을 넣어줘야한다
void는 반환값이 없다

증감 연산

int A = 5
Console.WriteLine(A++) 할때는 A를 출력한후 1을 더해서 5가 출력되는데
Console.WriteLine(++A) 이렇게 ++를 앞에다가 쓰면 더한후 출력이 되서 6이 출력된다

상속

  • 상속은 기존의 클래스(부모 클래스 또는 상위 클래스)를 확장하거나 재사용하여 새로운 클래스(자식 클래스 또는 하위 클래스)를 생성하는 것입니다.
  • 자식 클래스는 부모 클래스의 멤버(필드, 메서드, 프로퍼티 등)를 상속받아 사용할 수 있습니다.
  • 상속을 통해 부모 클래스의 기능을 확장하거나 수정하여 새로운 클래스를 정의할 수 있습니다.

다형성

  • 가상(Virtual) 메서드

    • 자식이 재정의 했을 수 있다
    • 실형태가 다를수 있으니 실형태에 재정의가 되어있는지 확인해라
    • 자식이 override로 재정의 하겟다
  • 추상(Abstract) 클래스와 메서드

    • 추상 클래스는 직접적으로 인스턴스를 생성할 수 없는 클래스
    • 주로 상속을 위한 베이스 클래스로 사용됩니다.
    • 추상 클래스는 abstract 키워드를 사용하여 선언되며, 추상 메서드를 포함할 수 있습니다.
    • 추상 메서드는 구현부가 없는 메서드로, 자식 클래스에서 반드시 구현되어야 합니다.

그렇다면 자식이 재정의 할수도 있고 안할수도 있는 편한 Virtual만 사용하지 Abstract는 왜 사용하냐 하니,
강제적으로 재정의가 필요시될때 Abstract를 사용한다.

주의점 : 오버로딩과 오버라이딩을 헷갈리지 말아라

  • 오버라이딩(Overriding)
    • 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의하는 것을 의미합니다.
    • 이는 상속 관계에 있는 클래스 간에 발생하며, 메서드의 이름, 매개변수 및 반환타입이 동일해야 합니다.
    • 오버라이딩을 통해 자식 클래스는 부모 클래스의 메서드를 재정의하여 자신에게 맞는 동작을 구현할 수 있습니다.
  • 오버로딩(Overloading)
    • 동일한 메서드 이름을 가지고 있지만, 매개변수의 개수, 타입 또는 순서가 다른 여러 개의 메서드를 정의하는 것을 의미합니다.
    • 오버로딩을 통해 동일한 이름을 가진 메서드를 다양한 매개변수 조합으로 호출할 수 있습니다.

0개의 댓글