공부/C#

[C#] 상속(Inheritance) / 오버로딩 + 오버라이딩

굴러다니다니 2023. 3. 22. 16:41
728x90

상속이란 특정 기능(데이터와 동작)을 제공하는 기본 클래스를 정의하고 해당 기능을 다시 선언하지 않고 받아 사용하거나 재정의 할 수 있게 파생 클래스를 정의하는 기능이다.

객체 지향 프로그래밍 언어의 주요 특징 중 하나다. (추상화, 상속, 다형성, 캡슐화)

 

쉽게 말해, 공통되는 함수나 변수를 가지고 있으면 이를 상속받아 비슷하게 사용하고, 확장하거나 수정하는 기능이다.

 

부모 클래스의 동작을 다시 사용하거나 확장 / 수정하기 위해 자식 클래스를 정의한다.

상속되는 클래스를 기본 클래스 ( 부모 클래스 ) / 상속하는 클래스를 파생 클래스 ( 자식 클래스 ) 라고 한다.

 

*하지만

static (정적 생성자: 클래스의 정적 데이터 초기화),

생성자(클래스의 이름과 같은 메소드, 클래스의 새 인스턴스 만들 때 호출),

종료자(클래스의 인스턴스 삭제)들은 상속할 수 없다.

 

protected: 상속 받는 자식 클래스에서만 사용가능

private: 클래스의 외부에서 접근 불가, 부모 클래스에 중첩된 자식 클래스에서만 접근 가능

public: 파생 클래스에서 표시되고 호출 가능, 클래스의 외부에서도 접근 가능

정의하지 않는다면 기본값은 private

상속된 멤버를 재정의하기 위해서는 기본 클래스의 멤버가 virtual 키워드여야한다.

 

상속을 위해서는 부모클래스를 상속받는 자식클래스의 의미로

자식클래스 : 부모클래스로 클래스를 정의한다.

class 부모_클래스
{
    //멤버 변수
}

class 자식_클래스 : 부모_클래스
{
    //private으로 선언된 멤버 제외 물려받기 가능
}

추가로 헷갈릴 수 있는 용어들

1) 하이딩

자식의 멤버와 부모의 멤버간의 서로의 method를 가리키는 것 - new

2) 오버라이딩

부모클래스에서 정의된 멤버 method를 자식 클래스에서 재정의하는 것 - virtual / override

C#에서 오버라이딩을 하고 싶다면 public override void 식으로 키워드를 명시해야 한다

 

* - 오버로딩 (오버라이딩과 구분)

이름은 같지만 매개변수가 다른 (type이 다르거나 parameter 개수가 다르면 다르다) method 생성 (상속만의 얘기가 아니다)

 

overloading: 새로 담는다, 과적하다
하나의 메소드로 여러 기능들을 구현

overriding: 최우선시
재정의가 필수가 되어야한다.

private은 해당 클래스 안에서만 사용 가능 (변수든 메소드든 오버라이드도 안됨)

728x90