상속(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" == 여러가지 개념/사물에서 공통적인 특성, 속성을 추출하여 파악하는 것.
  • 역할 : 추상 클래스는 구현 형태만 제공하고 실제 구현은 하위에서 함
  • 제한:
    1. 추상클래스는 상속으로만 사용 가능
    2. 추상클래스는 메서드를 구현하지 않기 때문에 다른 클래스 내부에서 "new"를 통해 생성할 수 없음
    3. "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

BELATED ARTICLES

more