객체 생성에 대한 제안 인터페이스를 기초로 한 코딩 가장 중요한 변경은 SecurityService 클래스의 실제 구현을 인터페이스 뒤로 숨기는 것이다. 이렇게 하면, AccountController 클래스가 SecurityService 클래스의 실제 구현체가 아닌 인터페이스에만 의존하게 만들 수 있다. ▶ 인터페이스 추출 public interface ISecurityService { void ChangeUsersPassword(string userID, string newPassword); } // ... public class SecurityService : ISecurityService { public void ChangeUsersPassword(string userID, string newPas..
인터페이스와 다형성 인터페이스에 속한 메서드는 모두 가상 메서드에 속한다. C# 컴파일러가 인터페이스의 메서드를 가상 메서드로 간주하기 때문에 virtual 예약어를 일부러 지정하지 못하게 막고 있다. 인터페이스를 상속받은 자식 클래스에서도 해당 메서드에 override 예약어를 지정하지 못하게 막는다. virtual/override 예약어를 막는다기보다는 굳이 그럴 필요가 없으니 표시하지 못하게 한다는 표현이 더 어울린다. 인터페이스의 메서드는 가상 메서드이기 때문에 다형성의 특징이 그대로 적용된다. 인터페이스를 이용한 콜백 인터페이스에 포함된 메서드는 상속된 클래스에서 반드시 구현한다는 보장이 있다. 이런점을 이용해서 콜백 구현이 가능하다. 간단한 예제 간단한 예제를 하나 생성해서, Log를 찍기위해..
의존성 관리하기 의존성으로 인해 발생할 수 있는 문제점들은 실제로 문제점들이 드러난 후에는 되돌릴기가 어려울 수도 있다. 시작단계에서 의존성을 관리하고, 지속적으로 관심을 두어 문제가 발생하지 않도록 해야 한다. 구현과 인터페이스의 비교 인터페이스를 기반으로 하는 프로그래밍에 익숙하지 않은 개발자는 인터페이스의 이면을 이해하는데 어려움을 격는다. 컴파일 시에는 인터페이스의 클라이언트는 해당 인터페이스에 대한 어떤 구현체가 사용되고 있는지에 대해 전혀 알 필요가 없다. new 키워드의 코드 스멜 인터페이스는 어떤 일을 수행할 수 있는지를 서술하며, 클래스는 어떻게 특정 작업을 수행할 것인지를 서술 한다. 실제 구현에 대한 상세 내용은 오직 클래스만이 알고 있다. 즉, 인터페이스는 해당 작업이 어떻게 수행되..
C# 인터페이스와 추상클래스의 차이점 Interface Abstract Class 접근 지정자 - 함수에 대한 접근 지정자를 가질수 없습니다. - 기본적으로 public 입니다. - 함수에 대한 접근 지정자를 가질 수 있습니다. 구현 - 구현이 아닌 서명만 가질 수 있습니다. - 구현을 제공할 수 있습니다. 속도 - 인터페이스가 상대적으로 느립니다. - 추상 클래스가 빠릅니다. 인스턴스화 - 인터페이스는 추상적이며 인스턴스화 할 수 없습니다. - 추상클래스는 인스턴스화 할 수 없습니다. 필드 - 인터페이스는 필드를 가질 수 없습니다. - 추상클래스는 필드와 상수를 정의 할 수 있습니다. 메소드 - 인터페이스에는 추상메소드만 있습니다. - 추상클래스에는 비추상메소드가 있을 수 있습니다. C#에서 클래스는 ..
실무에서 interface 를 기반으로 설계하기란, 여간 번거로운게 아니다. DI Pattern 으로 인해 개인적으로 interface에 대한 관심이 높아져서, 몇차례에 걸쳐서 정리해보려고 한다. 인터페이스 정의하기 인터페이스는 메서드 원형들의 집합에 이름을 붙인 것입니다. 공용 런타임과 이를 기반으로 하는 모든 관리 프로그래밍 언어들은 다중 상속을 지원하지 않습니다. CLR은 인터페이스를 이용해서 축소된 형태의 다중상속을 지원합니다. 일반적으로 interface라는 용어는 "상이한 시스템간의 계약 정보를 표현하는 것" 이라고 정의할 수 있습니다. C#의 예약어이면서, OOP의 기본개념으로 자리잡고 있는 Interface는 형태상으로 몇가지 특징이 있습니다. 1. 선언(Declaration)은 있고, 정..