방프리
23.01.30 Chapter2. API 설계 (Item 14) 본문
Item 14 : 상속보다는 인터페이스를 정의하고 구현하는 것이 낫다.
재설계를 고려하면서 데이터 모델을 정의할 때 항상 기로에 놓인다.
추상 베이스 클래스를 작성해야 하나? 아니면 인터페이스를 정의하는게 좋을까?
필자는 인터페이스에 메서드를 정의하게 되면 해당 인터페이스를 사용하는 모든 클래스들에서
구현을 필수로 해주어야 하고(강제성), 서로 연관이 없는 타입이라 하더라도 동일한 인터페이스를 사용한다면
동일하게 사용할 수 있다는 점에서 인터페이스 구현을 좀 더 적극적으로 추천한다.
물론 이 두 방식 중 어떤 걸 진행하느냐는 해당 클래스의 설계 방식에 따라 장, 단점이 나뉘지만
적어도 명확하게 메서드의 동작방식이 정해져야 하는 모델이라면 메서드를 추가하더라도 암묵적으로 허용하는
추상 클래스 대신 컴파일 오류를 발생시키는 인터페이스가 더 적절하지 않을까 싶다.
그렇다면 좀 더 알기 쉽게 추상 베이스 클래스를 사용할지, 인터페이스를 사용할지는 다음을 고려하면 될 것 같다.
1. 모델의 집합이 서로 연관성이 있고 행위에 대해 어느 정도 비슷한 패턴을 가지고 있으나,
특정 모델에 대해서만 예외의 행동이 있을 수 있다. -> 추상 베이스 클래스
2. 모델의 집합이 서로 연관성이 없고 행위에 대해 비슷한 패턴도 없다. (암묵적 허용X)
각각의 모델에 대해서 독립적 행위를 가지고 있다. -> 인터페이스
필자는 추상 베이스 클래스의 특징 때문에 좀 더 자유도가 높고 확장이 간편한 인터페이스를 추천한다고 한다.
'C# > More Effective C#' 카테고리의 다른 글
23.05.20 Chapter2. API 설계 (Item 16) (0) | 2023.06.04 |
---|---|
23.05.20 Chapter2. API 설계 (Item 15) (0) | 2023.05.20 |
23.01.30 Chapter2. API 설계 (Item 13) (0) | 2023.01.30 |
23.01.25 Chapter2. API 설계 (Item 12) (0) | 2023.01.26 |
23.01.24 Chapter2. API 설계 (Item 11) (0) | 2023.01.24 |
Comments