
클래스는 생성자와 소멸자라는 특별한 종류의 메서드를 가질 수 있습니다. 생성자는 클래스의 인스턴스를 생성할 때 호출되는 메서드이며, 소멸자는 클래스의 인스턴스가 메모리에서 해제될 때 호출되는 메서드입니다.
-
생성자 (Constructor)
- 생성자란?
- 생성자는 객체가 생성될 때 호출되는 특별한 메서드입니다.
- 클래스의 인스턴스(객체)를 초기화하고, 필요한 초기값을 설정하는 역할을 수행합니다.
- 생성자는 클래스와 동일한 이름을 가지며, 반환 타입이 없습니다.
- 객체를 생성할 때 new 키워드와 함께 호출됩니다.
- 생성자의 특징
- 객체를 초기화하는 과정에서 필요한 작업을 수행할 수 있습니다.
- 생성자는 여러 개 정의할 수 있으며, 매개변수의 개수와 타입에 따라 다른 생성자를 호출할 수 있습니다. 이를 생성자 오버로딩이라고 합니다.
- 기본적으로 매개변수가 없는 디폴트 생성자가 클래스에 자동으로 생성되지만, 사용자가 직접 정의한 생성자가 있는 경우 디폴트 생성자가 자동으로 생성되지 않습니다.
-
소멸자 (Destructor)
-
소멸자란?
- 소멸자는 객체가 소멸되는 시점에서 자동으로 호출되는 특별한 메서드입니다.
- 객체의 사용이 종료되고 메모리에서 해제될 때 자동으로 호출되어 필요한 정리 작업을 수행합니다.
- 클래스와 동일한 이름을 가지며, 이름 앞에 ~ 기호를 붙여 표현합니다.
- 소멸자는 반환 타입이 없고 매개변수를 가질 수 없습니다.
- 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)
- 동일한 메서드 이름을 가지고 있지만, 매개변수의 개수, 타입 또는 순서가 다른 여러 개의 메서드를 정의하는 것을 의미합니다.
- 오버로딩을 통해 동일한 이름을 가진 메서드를 다양한 매개변수 조합으로 호출할 수 있습니다.