윈도우즈프로그래밍#9
LeeMir, 15 April 2021
파생클래스와 인터페이스
파생 클래스
- 상속
- 베이스 클래스의 모든 멤버들이 파생 클래스로 전달되는 기능
- 클래스의 재사용성 증가
- 상속의 종류
- 단일 상속
- 베이스 클래스 1개
- 다중 상속
- 베이스 클래스 1개 이상
- 단일 상속
- C#에서는 단일 상속만 지원
- 파생 클래스의 필드
- 클래스의 필드 선언 방법과 동일
- 베이스 클래스의 필드명과 다른 경우 - 상속됨
- 베이스 클래스의 필드명과 동일한 경우 - 베이스 클래스의 필드는 숨겨짐
base
지정어를 통해 베이스 클래스의 멤버 접근 가능
- 파생 클래스의 생성자
- 형태와 의미는 클래스의 생성자와 동일
- 명시적으로 호출하지 않으면, 기본 생성자가 컴파일러에 의해 자동적으로 호출
base()
- 베이스 클래스의 생성자를 명시적으로 호출
- 실행과정
- 필드의 초기화 부분 실행
- 베이스 클래스의 생성자 실행
- 파생 클래스의 생성자 실행
- 메소드 재정의 및 하이딩
- 베이스 클래스에서 구현된 메소드를 파생 클래스에서 구현된 메소드로 대체
- 메소드의 signature(매개변수)가 동일한 경우 - 메소드 재정의 및 하이딩(Hiding)
- 메소드의 signature가 다른 경우 - 메소드 중복(overloading)
가상 메소드
- 지정어
virtual
로 선언된 인스턴스 메소드 - 파생 클래스에서 재정의해서 사용할 것임을 알려주는 역할
new
: 객체 형에 따라 호출override
: 객체 참조가 가리키는 객체에 따라 호출
봉인 메소드
- 수정자가
sealed
로 선언된 메소드 - 파생 클래스에서 재정의를 허용하지 않음
- 봉인 클래스 - 모든 메소드는 묵시적으로 봉인 메소드
추상 클래스
- 추상 메소드를 갖는 클래스
- 실질적인 구현을 갖지 않고 메소드 선언만 있는 경우
- 구현되지 않고, 단지 외형만을 제공
- 추상 클래스는 객체를 가질 수 없음
- 다른 외부 클래스에서 메소드를 일관성있게 다루기 위한 방법 제공
- 다른 클래스에 의해 상속 후 사용 가능
abstract
수정자는virtual
수정자의 의미 포함- 추상 클래스를 파생 클래스에서 구현
- override 수정자를 사용하여 추상 메소드를 재정의
- 접근 수정자 항상 일치
- 추상 클래스를 파생 클래스에서 구현
메소드 설계
- 메소드를 파생 클래스에서 재정의하여 사용
- C# 플로그래밍에 유용한 기능
- 베이스 클래스에 있는 메소드에 작업을 추가하여 새로운 기능을 갖는 메소드 정의 - base 지정어 사용
다형성
- 적용하는 객체에 따라 메소드의 의미가 달라지는 것
- C# 프로그래밍 -
virtual
과override
의 조합으로 메소드 선언