객체 생성에 대한 제안 인터페이스를 기초로 한 코딩 가장 중요한 변경은 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 키워드의 코드 스멜 인터페이스는 어떤 일을 수행할 수 있는지를 서술하며, 클래스는 어떻게 특정 작업을 수행할 것인지를 서술 한다. 실제 구현에 대한 상세 내용은 오직 클래스만이 알고 있다. 즉, 인터페이스는 해당 작업이 어떻게 수행되..
모든 소프트웨어는 의존성(dependency) 를 가지고 있다. 1. 같은 기반코드를 이용하는 코드에 대한 First-Party 의존성. 2. 외부 어셈블리에 대한 Third-Party 의존성. 3. 닷넷 프레임워크에 대한 보편적인 의존성 일 수 있으며, 웬만한 프로젝트라면 이 세가지 의존성을 모두 찾아볼수 있다. 의존성은 호출자 코드로부터 기능을 추상화 한다. 모든 의존성에 대한 관리만큼은 정확히 해야 한다. 의존성 체인을 제대로 관리하지 못하면, 개발자들은 존재할 필요가 없는 의존성 때문에 불필요한 어셈블리 참조로 복잡하게 꼬인 코드를 관리해야 한다. 계층화 (Layering)는 가장 일반적인 아키텍처 패턴 중 하나이다. 의존성의 정의 의존성( Dependency )은 별개의 두 엔티티(entity)..