인터페이스 ( Interface )
클래스가 구현해야 하는 멤버들을 정의하는 것.
클래스와 비슷하게 메서드, 속성 및 이벤트를 선언하는데 사용되지만, 인터페이스는 실제 구현을 포함하지 않음.
인터페이스를 구현하는 클래스에서 해당 멤버들을 구현해야 함.
C#에서 인터페이스를 정의하는 방법
interface IMyInterface { // 메서드 선언 void MyMethod(); // 속성 선언 int MyProperty { get; set; } // 이벤트 선언 event EventHandler MyEvent; }
인터페이스를 구현하는 클래스
class MyClass : IMyInterface { // 인터페이스에서 선언한 메서드 구현 public void MyMethod() { // 구현 내용 } // 인터페이스에서 선언한 속성 구현 public int MyProperty { get; set; } // 인터페이스에서 선언한 이벤트 구현 public event EventHandler MyEvent; }
인터페이스의 장단점
장점
다중 상속의 제약 극복 : 클래스는 하나의 부모 클래스만 상속할 수 있기 때문에 다중 상속이 제한됨.
인터페이스를 통해 클래스가 여러 개의 인터페이스를 구현할 수 있어 다중 상속과 비슷한 효과를 얻을 수 있음.
유연한 구조 : 인터페이스를 사용하면 클래스의 내부 구현과는 독립적으로 코드를 작성할 수 있음.
다른 클래스와의 결합도가 낮아지며, 코드를 변경하거나 확장할 때 다른 클래스에 영향을 덜 주는 유연한 구조를 만들 수 있음.
표준화된 동작 보장 : 인터페이스를 사용하면 다양한 클래스가 같은 인터페이스를 구현할 수 있으므로, 클래스 간에 일관된 동작을 보장할 수 있음.
모듈화 및 테스트 용이성 : 인터페이스를 사용하면 각 클래스의 역할과 책임이 명확히 나뉘므로, 코드의 모듈화가 쉬워짐.
또한 테스트를 수행할 때 모의 객체(Mocking)를 사용하여 인터페이스의 메서드 동작을 흉내내어 테스트하기 용이.
단점
추가 작업 필요 : 인터페이스를 사용하면 클래스에서 인터페이스의 메서드 및 멤버를 모두 구현해야 함.
복잡성 증가 : 인터페이스를 지나치게 많이 사용하면 클래스와 인터페이스 사이의 관계가 복잡해질 수 있음.
런타임 오버헤드 : 인터페이스는 런타임에 메서드를 호출할 때 해당 메서드의 실제 구현을 찾아야 하는 오버헤드가 발생할 수 있음. 클래스의 직접적인 메서드 호출보다는 약간의 성능 저하를 가져올 수 있음.
다중 상속
한 클래스가 여러 개의 부모 클래스로부터 상속을 받는 것을 의미.
문제점
다이아몬드 문제 (Diamond Problem) : 다중 상속을 허용하면 하나의 클래스가 두 개 이상의 클래스로부터 상속받을 때, 공통 부모 클래스의 메서드나 속성을 어떤 순서로 호출해야 할지 모호성이 발생.
이중 정의 (Multiple Definitions): 다중 상속을 통해 같은 메서드나 속성을 둘 이상의 부모 클래스로부터 상속받을 때, 충돌이 발생하여 어떤 버전의 메서드를 사용해야 할지 결정하기 어려워짐.
의존성 증가: 다중 상속을 사용하면 클래스 간의 복잡한 상속 구조가 형성될 수 있으며, 이로 인해 코드의 유지보수와 디버깅이 어려워질 수 있음.
클래스 설계의 복잡성과 모호성: 다중 상속을 사용하면 클래스 간의 상속 관계가 복잡해지므로 클래스의 설계와 구현이 어려워지며, 어떤 클래스를 기반으로 확장하는 것이 적절한지 모호해질 수 있음.
열거형
C# 프로그래밍 언어에서 사용되는 데이터 형식 중 하나로, 연관된 상수 값을 그룹화하고 이름을 부여하는 데 사용.
정의
enum Days // 기본적으로 첫 번째 멤버는 0으로 시작 { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday = 8 // 명시적으로 할당 }
사용
Days today = Days.Wednesday; if (today == Days.Wednesday) { Console.WriteLine("Today is Wednesday."); }
사용하는 이유
class MyClass : IMyInterface, IOtherInterface { // 구현 }
09:00 ~ 09:30 : 팀원 간 인사 및 하루 계획 작성
09:30 ~ 14:00 : 개인 과제
12시-1시: 점심식사
14:00 ~ 18:00 : 개인 과제
6시-7시: 저녁식사
19:00 ~ 20:00 : 지급 받은 강의 복습
20:00 ~ 20:30 : 6조 회의
20:30 ~ 21:00 : TIL,마무리 회고 진행