모든 소프트웨어는 의존성(dependency) 를 가지고 있다. 1. 같은 기반코드를 이용하는 코드에 대한 First-Party 의존성. 2. 외부 어셈블리에 대한 Third-Party 의존성. 3. 닷넷 프레임워크에 대한 보편적인 의존성 일 수 있으며, 웬만한 프로젝트라면 이 세가지 의존성을 모두 찾아볼수 있다. 의존성은 호출자 코드로부터 기능을 추상화 한다. 모든 의존성에 대한 관리만큼은 정확히 해야 한다. 의존성 체인을 제대로 관리하지 못하면, 개발자들은 존재할 필요가 없는 의존성 때문에 불필요한 어셈블리 참조로 복잡하게 꼬인 코드를 관리해야 한다. 계층화 (Layering)는 가장 일반적인 아키텍처 패턴 중 하나이다. 의존성의 정의 의존성( Dependency )은 별개의 두 엔티티(entity)..
C# 인터페이스와 추상클래스의 차이점 Interface Abstract Class 접근 지정자 - 함수에 대한 접근 지정자를 가질수 없습니다. - 기본적으로 public 입니다. - 함수에 대한 접근 지정자를 가질 수 있습니다. 구현 - 구현이 아닌 서명만 가질 수 있습니다. - 구현을 제공할 수 있습니다. 속도 - 인터페이스가 상대적으로 느립니다. - 추상 클래스가 빠릅니다. 인스턴스화 - 인터페이스는 추상적이며 인스턴스화 할 수 없습니다. - 추상클래스는 인스턴스화 할 수 없습니다. 필드 - 인터페이스는 필드를 가질 수 없습니다. - 추상클래스는 필드와 상수를 정의 할 수 있습니다. 메소드 - 인터페이스에는 추상메소드만 있습니다. - 추상클래스에는 비추상메소드가 있을 수 있습니다. C#에서 클래스는 ..
실무에서 interface 를 기반으로 설계하기란, 여간 번거로운게 아니다. DI Pattern 으로 인해 개인적으로 interface에 대한 관심이 높아져서, 몇차례에 걸쳐서 정리해보려고 한다. 인터페이스 정의하기 인터페이스는 메서드 원형들의 집합에 이름을 붙인 것입니다. 공용 런타임과 이를 기반으로 하는 모든 관리 프로그래밍 언어들은 다중 상속을 지원하지 않습니다. CLR은 인터페이스를 이용해서 축소된 형태의 다중상속을 지원합니다. 일반적으로 interface라는 용어는 "상이한 시스템간의 계약 정보를 표현하는 것" 이라고 정의할 수 있습니다. C#의 예약어이면서, OOP의 기본개념으로 자리잡고 있는 Interface는 형태상으로 몇가지 특징이 있습니다. 1. 선언(Declaration)은 있고, 정..
현재 저는 UnitTest를 이용해서, 제작중인 프로젝트의 테스트를 진행하고 있습니다. 프로젝트를 이용해서 단위테스트를 제작하다가 보면, 테스트 환경에서는 실질적인 DB가 갖춰져 있는 않은 상태가 많이 있습니다. 이럴경우 Data 단의 로직은 항상 실패상황이 발생하게 됩니다. 이럴경우 Mock 라이브러리를 이용하면, 실제 DB에 접속해서 데이터를 가져오는 것 처럼 흉내낼 수 있습니다. 저희도 Mock 라이브러리를 이용해서 UnitTest를 구성중에 있어서 한번 정리해봤습니다. Mock 라이브러리 Mock 라이브러리는 .NET 에서 주목 받고 있는 모의 라이브러리 입니다. Moq는 간단한 API를 가지고 있고, Visual Studio의 Intelisence 기능을 활용할 수 있어 손쉽게 사용이 가능합니다..
시나리오 테스트? 게임 서버를 개발 중에 있어, 현재의 고민은 최대한 문제 없이 서버를 오픈하기 위한 여러가지 방법을 도입하고, 팀원들과 연구하고 있습니다. 그 중 한가지가 개발중인 컨텐츠와 기존에 개발되었던 시스템간에 문제가 없는지를 상시적으로 테스트 할 수 있는 방법론들을 찾아서 도입하고 있는데요. 그래서 생각해 낸 방법이, 여러 상황에 대한 시나리오를 작성하고, 정해진 시나리오 대로 서버 패킷 들을 테스트 하는 방법이 좋겠다라는 생각에 도달하였습니다. 이 외적으로 단위 테스트도 도입하였는데요. 해당 이야기는 다음에 정리하겠습니다. 시나리오를 정해서 테스트 한다라는 개념은, 어느정도 많이 알려진 개념이였지만 BDD라는 개발 방법론으로 정리가 되어있었다는 것은 이번에 알게 되어 같이 정리해보려고 합니다..