상속(Inheritance), 추상클래스(Abstract Class)
2021. 6. 17. 22:03
728x90
[ 상속 ]
상속(Inheritance) : 기존 클래스에 새로운 것을 추가하여 클래스를 재사용하는 것. 즉, class1을 훼손하지 않고도 여기에 다른 특징을 추가하고 싶은 경우, class1을 부모로 두고 상속받아서 다른 기능을 추가한 class2를 생성하는 방식.
- 대상 : 클래스
- 부모 클래스 : 상속을 하는 클래스 (상위 클래스), 나누어주는 입장
- 자식 클래스 : 상속을 받는 클래스 (하위/파생 클래스), 나눔 받는 입장
- 상속관계에서 생성자 호출 == 상위 class 먼저 생성된 후, 하위class가 생성됨
소멸자 호출 == 하위 class가 먼저 소멸된 후, 상위 클래스의 소멸자가 호출됨
"base" : 상위 클래스의 생성자 또는 멤버변수/메서드 호출시 사용되는 키워드
- 사용하는 경우:
- A를 상속받은 B에 대해, B의 멤버변수명이 A의 멤버변수명과 동일한 경우, A의 멤버변수임을 구분짓기 위해 "base"를 명시해줌 (ex: base.name // name이 A의 멤버변수임을 알 수 있음)
- 하위class에서 상위 class를 설정하는 경우
"sealed" : 상속 불가함을 명시해주는 키워드
- private, public을 명시했더라도 "sealed"를 언급한 멤버변수/메서드는 하위class에서 상속받을 수 없음
//방법1
sealed class A{
}
class B : A { //sealed 때문에 classA를 상속받을 수 없음
}
//방법2
class A{
sealed public void Print();
}
class B : A { //class A는 상속 가능하지만 Print()메서드는 상속 불가능
}
[ 추상 클래스 ]
추상 클래스(abstract class) : 구현하려는 메서드의 형태만 존재하는 클래스
- "abstract" == 여러가지 개념/사물에서 공통적인 특성, 속성을 추출하여 파악하는 것.
- 역할 : 추상 클래스는 구현 형태만 제공하고 실제 구현은 하위에서 함
- 제한:
- 추상클래스는 상속으로만 사용 가능
- 추상클래스는 메서드를 구현하지 않기 때문에 다른 클래스 내부에서 "new"를 통해 생성할 수 없음
- "abstract" 키워드가 있는 상위 메서드만 하위에서 전부 구현
abstract class A { public abstract void Print(); //여기서는 Print() 메서드 구현X } class B : A { //A를 재정의하는 형태로 사용 public override void Print(); } //[제한#2 참고] 다른 class 내부에서 A test1 = new A(); 선언 불가능!
인프런에서 강의를 들었을 때, 강사님께서 이해하기 쉽게끔 비유를 해주셨던게 기억에 난다.
어느 게임이 있다면, 추상클래스1 == 박치기, 추상클래스2 == 화살쏘기 라고 할 때 클래스1 == 몬스터1, 클래스2 == 몬스터2, 클래스3 == 몬스터3 정도라고 볼 수 있고, 클래스 1,2,3은 추상클래스1,2에 접근할 수 있는 하위 클래스들이라고 설명해주셨다.
이렇게 보니까 훨씬 이해하기 쉬웠다!
*인프런에서 강의 듣고 복습 겸 정리하는 내용.
728x90
'C# > C# 문법' 카테고리의 다른 글
다형성 (Polymorphism) (0) | 2021.06.17 |
---|---|
오버라이드(Override), 오버로드 (Overload) (0) | 2021.06.17 |
파일 입출력 (0) | 2021.06.15 |
예외 처리문 (0) | 2021.06.15 |
자료형 변환 (0) | 2021.06.15 |