의존성 관리하기 의존성으로 인해 발생할 수 있는 문제점들은 실제로 문제점들이 드러난 후에는 되돌릴기가 어려울 수도 있다. 시작단계에서 의존성을 관리하고, 지속적으로 관심을 두어 문제가 발생하지 않도록 해야 한다. 구현과 인터페이스의 비교 인터페이스를 기반으로 하는 프로그래밍에 익숙하지 않은 개발자는 인터페이스의 이면을 이해하는데 어려움을 격는다. 컴파일 시에는 인터페이스의 클라이언트는 해당 인터페이스에 대한 어떤 구현체가 사용되고 있는지에 대해 전혀 알 필요가 없다. new 키워드의 코드 스멜 인터페이스는 어떤 일을 수행할 수 있는지를 서술하며, 클래스는 어떻게 특정 작업을 수행할 것인지를 서술 한다. 실제 구현에 대한 상세 내용은 오직 클래스만이 알고 있다. 즉, 인터페이스는 해당 작업이 어떻게 수행되..
모든 소프트웨어는 의존성(dependency) 를 가지고 있다. 1. 같은 기반코드를 이용하는 코드에 대한 First-Party 의존성. 2. 외부 어셈블리에 대한 Third-Party 의존성. 3. 닷넷 프레임워크에 대한 보편적인 의존성 일 수 있으며, 웬만한 프로젝트라면 이 세가지 의존성을 모두 찾아볼수 있다. 의존성은 호출자 코드로부터 기능을 추상화 한다. 모든 의존성에 대한 관리만큼은 정확히 해야 한다. 의존성 체인을 제대로 관리하지 못하면, 개발자들은 존재할 필요가 없는 의존성 때문에 불필요한 어셈블리 참조로 복잡하게 꼬인 코드를 관리해야 한다. 계층화 (Layering)는 가장 일반적인 아키텍처 패턴 중 하나이다. 의존성의 정의 의존성( Dependency )은 별개의 두 엔티티(entity)..
실무에서 interface 를 기반으로 설계하기란, 여간 번거로운게 아니다. DI Pattern 으로 인해 개인적으로 interface에 대한 관심이 높아져서, 몇차례에 걸쳐서 정리해보려고 한다. 인터페이스 정의하기 인터페이스는 메서드 원형들의 집합에 이름을 붙인 것입니다. 공용 런타임과 이를 기반으로 하는 모든 관리 프로그래밍 언어들은 다중 상속을 지원하지 않습니다. CLR은 인터페이스를 이용해서 축소된 형태의 다중상속을 지원합니다. 일반적으로 interface라는 용어는 "상이한 시스템간의 계약 정보를 표현하는 것" 이라고 정의할 수 있습니다. C#의 예약어이면서, OOP의 기본개념으로 자리잡고 있는 Interface는 형태상으로 몇가지 특징이 있습니다. 1. 선언(Declaration)은 있고, 정..