-
[TIL]C#문법3TIL 2024. 4. 24. 21:23
다중 상속을 사용하지 않는이유
- 다이아몬드문제(Diamond Problem)
한 클래스가 두 개 이상의 부모로부터 동일한 멤버를 상속받을 수 있고 같은 이름일 경우 모호해진다.
- 설계의 복잡성 증가
클래스 간의 관계가 복잡해진다.
어떤 클래스로부터 어떤 멤버를 상속받을지 결정해야 하고 이로 인해 클래스 간의 상속 관계를 파악하기 어려워지고 유지보수성이 저하된다.
- 이름 충돌과 충돌 해결의 어려움
여러 부모 클래스로부터 상속받은 멤버들이 이름이 충돌하여 명시적으로 부모 클래스를 지정해야 하거나 멤버를 재정의 해야함. 코드의 복잡성 증가
- 설계의 일관성과 단순성 유지
C#은 단일 상속을 통해 설계의 일관성과 단순성을 유지하려 한다.
단일 상속을 해야 클래스 간의 관계를 명확하게 하고 코드의 가독성과 이해도를 높일 수 있다.
인터페이스를 사용하는 이유
1. 코드의 재사용성
2. 다중 상속 제공
3. 유연한 설계
인터페이스
특징
클래스가 구현해야 하는 멤버들 정의
클래스가 아님, 클래스에 대한 제약조건을 명시
클래스가 인터페이스를 구현할 경우 모든 인터페이스 멤버를 구현해야함
구현방법
interface {인터페이스 이름}//이름은 대문자I로 시작하는 것을 권장 { //함수 void Test1(); int Test2(int num); }
class {클래스 명}:{상속받을 인터페이스 명} { //인터페이스에서 상속 받은 함수 Public void Test1() { //구현 } public int Test2(int num) { //구현 } }
인터페이스 vs 추상클래스
인터페이스
인터페이스는 추상적인 동작만 정의하고 구현을 갖지 않는다.
인터페이스는 다중 상속이 가능하다.
인터페이스는 구현하는 클래스가 모든 동작을 구현해야한다.
추상클래스
일부 동작의 구현을 가지며 추상 메서드를 포함할 수 있다.
단일 상속만 가능하다.
하위 클래스에 재정의 하지 않아도 될 경우 유용하다
다중상속이 불가능하고 상속을 통해 밀접하게 결합된 클래스들을 형성하므로 유연성이 제한된다.
열거형
사용하는 이유
가독성
일련의 연관된 상수를 명명할 수 있어서 코드의 가독성이 향상
자기문서화
의미있는 이름을 사용하여 상수를 명명할 수 있어서 가독성 향상
스위치문과 호환성
열거형을 사용하면 스위치 문에서 다양한 상수값에 대한 분기를 쉽게 작성 가능
특징
서로 관련된 상수들의 집합을 정의
상수는 정수값으로 지정
enum {열거형 이름} { Value1, Value2, Valye3 //마지막 값은 , 제거 }
예외 처리
예외란?
프로그램 실행중 발생하는 예기치 않은 상황 (ex. 오류)
예외 처리는 예외상황에 대비하여 프로그램을 안정적으로 유지하는 데 도움을 준다
예외 처리를 통해 오류 상황을 적절히 처리하고 프로그램의 실행을 계속할 수 있다.
안정서을 높이고 디버깅을 용이하게 한다.
C#은 try-catch를 사용하여 예외처리를 수행한다
try { //예외가 발생할 수 있는 코드 } catch(ExceptionType1 ex) { //ExceptionType1에 해당하는 예외처리 } finally { //예외 발생 여부와 상관없이 항상 실행 }
위에서부터 순서대로 실행
상속 관계에 있는 경우 상위 예외 타입의 catch 블록이 먼저 실행된다.
finally 블록은 생략할 수도 있다.
finally는 예외 처리가 발생하면 과정을 거친후 실행되고, 만약 예외가 발생하지 않더라도 실행된다.
사용자 정의 예외
자신만의 예외 클래스를 작성할 수 있다.
사용자 정의 예외 클래스는 Excption 클래스를 상속받아 작성
'TIL' 카테고리의 다른 글
[TIL]C# 문법 4 (0) 2024.04.26 [TIL]C# 강의 과제 정리 (2) 2024.04.25 [TIL]C#문법 2 (0) 2024.04.23 [TIL]C#문법1주차(수정중) (0) 2024.04.23 [TIL] 2024-04-18 협업툴 사용 (0) 2024.04.18