상속이란 특정 기능(데이터와 동작)을 제공하는 기본 클래스를 정의하고 해당 기능을 다시 선언하지 않고 받아 사용하거나 재정의 할 수 있게 파생 클래스를 정의하는 기능이다.
객체 지향 프로그래밍 언어의 주요 특징 중 하나다. (추상화, 상속, 다형성, 캡슐화)
쉽게 말해, 공통되는 함수나 변수를 가지고 있으면 이를 상속받아 비슷하게 사용하고, 확장하거나 수정하는 기능이다.
부모 클래스의 동작을 다시 사용하거나 확장 / 수정하기 위해 자식 클래스를 정의한다.
상속되는 클래스를 기본 클래스 ( 부모 클래스 ) / 상속하는 클래스를 파생 클래스 ( 자식 클래스 ) 라고 한다.
*하지만
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은 해당 클래스 안에서만 사용 가능 (변수든 메소드든 오버라이드도 안됨)
'공부 > C#' 카테고리의 다른 글
[C#] 상속과 virtual, abstract, interface / 오버로딩, 오버라이딩 코드 (0) | 2023.03.23 |
---|---|
[C#] class 추가와 public / private 속성(프로퍼티)의 get set 초기화식 (0) | 2023.03.22 |
[C#] string과 string의 내장 메소드에 대해 알아보자 (format, split, substring, compareTo, replace, length) (0) | 2023.03.21 |
[C#] 이차원 배열과 구조체, static과 트럼프 카드 출력 코드 (0) | 2023.03.20 |
[C#] 배열, foreach, 셔플 코드와 이를 이용한 예제 및 로또 생성기 (0) | 2023.03.17 |