전체 글

전체 글

    DIP 원칙의 한계

    들어가기에 앞서... 지난 글에서는 DIP 원칙이란 무엇인지, 또 DIP의 장점과 적용하는 방법에 대해서 설명했다. 해당 원칙대로 작성한 코드는 순환 참조 문제에 빠질 일이 없고 객체지향적으로써 바람직한 코드가 될 것이다. DIP 원칙 그 자체로써는 단점이 거의 없다.(아주 없지는 않다. 코드의 길이가 살짝 늘어난다. 물론 이러한 단점은 장점에 비하면 매우 사소하다.) 이 글의 제목이 '단점'이 아닌 '한계'라는 사실에 주목하라. 그렇다면 이 글에서 설명하고자 하는 한계는 무엇인가? 바로 DIP 원칙을 적용할 수 없는 경우이다. 상위 폴더에 인터페이스를 두기만 하면 DIP 원칙이 적용된다고 생각할 수 있고 또 어느 정도는 사실이지만, 이것이 불가능한 경우가 존재한다. 이 글에서는 DIP 원칙을 적용할 수..

    [서평] Go 프로그래밍 개발 환경에서 의존성 주입 실습

    정보 제목 : Go 프로그래밍 개발 환경에서 의존성 주입 실습 (원제 : Hands-On Dependency Injection in Go) 저자 : 코리 스캇 (역자 : 이준) 출판사 : 에이콘 요약 Go언어를 객체지향적으로 설계하는 방법에 대한 책이다. 해당 책은 단순히 객체지향의 원칙과 객체지향적 설계 기법을 기계적으로 나열하지 않고 예제를 통해 어떻게 쓰고 왜 필요한지 와닿게 설명한다. 또한 이 책은 각 기법을 소개할 때 부작용을 같이 소개한다. 즉, 각 기법의 장단점을 모두 설명하여 독자가 기법을 적용해야 할 때를 판단하는 것을 돕는다. 유의점 해당 책은 기본적으로 Go언어를 이용해 객체지향적으로 프로그래밍 하는 방법을 설명하는 책이다. 즉, Go언어를 사용하지 않으면 해당 책에 있는 기술을 사용..

    Go 언어에서의 DIP

    들어가기에 앞서... 해당 글은 독자가 Go 언어(혹은 C언어 계열)의 문법에 대한 기본 지식이 있다고 가정하고 설명하겠다. 객체지향적 설계에 관해 집중적으로 공부한 적이 있다면 'SOLID 원칙'이라는 용어는 들어봤을 것이다. SOLID 원칙은 로버트 마틴이 그의 저서 '클린 소프트웨어'에서 제창한 용어로 다섯 가지 객체지향 소프트웨어 디자인 원칙의 약자를 모은 것이다. 이번 글에서는 이 다섯 가지 원칙 중 마지막 원칙인 DIP(의존성 역전 원칙)에 대해 설명할 것이다. 해당 원칙은 이해하기가 어려운 대신, 이해만 한다면 (특히 Go언어에서)바로 적용하기 쉬운 유익한 원칙이다. 정의 상위 모듈은 하위 모듈에 의존해서는 안 된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다. 추상화는 세부 사항에..

    [Go with TDD] 테이블 주도 테스트

    개요 이전에 '깔끔하게 go test의 테스트케이스를 짜는 법'이라는 글을 쓴 적이 있다. 오늘 설명할 테이블 주도 테스트는 해당 글의 내용을 정형화한 기법이다. 테이블 주도 테스트 테이블 주도 테스트(table-driven test)는 메소드에 대한 여러 개의 테스트 케이스를 하나의 테이블로 구성하는 테스트 기법이다. 테스트할 메소드 하나에는 여러 개의 테스트 케이스가 존재한다. 일반적으로 테스트를 작성하면 하나의 테스트 함수는 하나의 테스트 케이스를 실행한다. 이렇게 작성하는 것이 잘못된 것은 아니지만 호출할 메소드가 같기 때문에 코드의 중복이 생긴다. 테이블 주도 테스트는 하나의 테스트 함수에 테스트할 메소드의 테스트 케이스를 묶어 테이블로 만든 후 해당 테이블을 순회하며 테스트를 진행하는 구조이다..

    [Things of Go] Go언어에서의 함수 객체 활용 방안 - 기본편

    Go언어에서는 함수는 1급 객체이다. 즉, 함수 객체는 숫자나 문자열 같은 변수처럼 쓸 수 있다. 다만 이러한 성질이 있다는 것은 알아도 활용하는 것은 다른 문제이다. 커뮤니티에서도 Go언어로 함수형 프로그래밍을 하는 것을 적극적으로 추천하지는 않는다. 하지만 함수 객체는 특정한 상황에서는 뛰어난 해결책이 될 수 있다. 해당 글에서는 함수 객체를 실제로 이용하기에 앞서 Go언어에서의 함수 객체의 정의와 기본적인 문법에 대해 설명하도록 하겠다. 함수의 기본 Go언어의 함수는 다음과 같은 형태이다. func 함수명(매개변수) 반환값 { 구현부 } 함수를 변수처럼 쓰기 위해서는 그에 맞는 자료형으로 선언해야 한다. 그렇다면 함수의 자료형은 어떤 모습일까? 함수의 형태 모든 함수가 같은 자료형은 아니다. 함수는..