분류 전체보기

분류 전체보기

    [Design Go] 좋은 코드와 디자인 패턴

    좋은 코드? 농부는 좋은 작물을 얻기 위해 노력한다. 책 저자는 좋은 책을 쓰기 위해 노력한다. 프로그래머는 좋은 코드를 짜기 위해 노력한다. 그렇다면 '좋은 코드'라는 것은 대체 무엇일까? 좋은 코드란? 다양한 의견이 있을 수 있다. 일단 성능이 좋을 수록 좋은 코드이다. 블로그 이름처럼 단순하고 깔끔한 코드는 대부분 좋은 코드이다. 이런 맥락으로 가독성이 높은 코드는 좋은 코드이다. 하지만, 혼자서든 여러 사람과 함께든 작업을 이어가다 보면, 유지보수하기 쉬운 코드는 좋은 코드의 필요 조건이라는 것을 알게 된다. 왜 유지보수하기 쉬운 코드인가? 프로젝트를 진행하다 보면 당연히 처음에는 새로운 기능을 추가하는 데에 시간을 많이 쓰게된다. 그렇게 그 프로젝트의 기본적인 요구 기능들이 완성되고 배포까지 완..

    [Things of Go] 개인적으로 생각하는 Go언어의 단점

    Go언어를 소개하는 글에서는 보통 Go언어의 장점을 강조한다. 여러 언어를 비교하는 글에서는 Go언어의 장점과 단점을 모두 설명하지만 집중적으로 다루지는 않는다. 물론 모든 글이 그렇다는 것이 아니라 대개 그렇다는 것이다. 그저 선택과 집중의 문제일 뿐이다. 필자는 Go언어를 좋아한다. 하지만 코드를 작성하다 보면 불편할 때가 있다. 이 글에서는 필자가 코드를 직접 작성하면서, 혹은 생각해본 Go언어의 단점에 대해 끄적여보겠다. 이번 글은 필자의 주관이 잔뜩 들어가 있기에 비판적으로 봐주기를 바란다. 마지막으로 필자는 프로그래밍 언어 중에서는 Go언어를 가장 좋아한다.😉 1. 타 언어들과의 객체지향에 대한 관점의 차이 Go언어는 객체지향 언어이다. 그리고 프로그래밍 언어들 중에 흔하디 흔한 것이 객체지향..

    [Things of Go] Go언어의 객체지향 모델 - 응용편

    지난 글에서는 객체지향 프로그래밍을 하기 위한 기본적인 요소들에 대해 알아보았다. 이번 글에서는 이 요소들을 이용해 어떻게 객체지향 프로그래밍을 할 수 있는지 알아보겠다. 그 전에... 패키지 내의 함수 및 변수 호출은 인스턴스의 그것들을 호출하는 것과 유사하다. 그리고 이전 글에서 잠깐 언급했지만 Go언어의 접근제한은 패키지 단위로 이루어진다. 즉, Go언어에서의 패키지는 하나의 객체로 볼 수 있다. 그리고 캡슐화(은닉성)의 관점에서 패키지를 객체로 취급하는 것이 바람직하다 콘솔에서 패키지를 받아보자. go get github.com/simp7/pracOOPFromGo 받은 파일은 이전 글의 객체들(Dog, Cat, Animal)을 패키지로 묶은 것이다. 이후 예제에서 사용될 예쩡이다. Go언어에서의 ..

    [Things of Go] Go언어의 객체지향 모델 - 기초편

    이 글은 독자가 객체지향과 포인터에 관한 기본적인 지식이 있다는 가정 하에 작성되었다. Go언어와 객체지향 현재 인기있는 대부분의 프로그래밍 언어가 그렇듯이 Go언어는 객체지향 언어이다. 다만, 보통 객체지향에 입문하는 데에 쓰는 파이썬, 자바, 혹은 C++하고는 모습이 조금 다르다. Go언어의 설계 목표가 직관성, 단순성, 명료성, 효율성이다. 이런 목표를 달성하기 위해 다른 언어들에 비해 키워드가 적고 문법이 살짝 다르다. 클래스 정의 Go언어에는 class 키워드가 없다. Go언어는 struct, 즉 구조체를 이용해서 클래스를 정의한다. 구조체는 다음과 같이 선언한다. type Dog struct { name string } 'string형 변수 name을 가지는 구조체를 Dog라 칭한다' 정도로 ..

    [Go with TDD] 깔끔하게 go test의 테스트케이스를 짜는 법

    주의 : 이번 글은 필자가 테이블 주도 테스트라는 개념을 배우기 전에 작성된 글이다. 이 글의 내용이 정형화된 개념인 테이블 주도 테스트에 관해 알고 싶다면 해당 글을 참조하자. 들어가기에 앞서... 이전 글의 방식으로 테스트 케이스를 작성해도 TDD를 적용하는 데에는 크게 문제가 없다. 하지만 기능이 단순한 함수임에도 테스트 코드가 길고 반복되는 부분이 많다. 이번에는 이 테스트 함수를 다듬어보도록 하겠다. 1. 반복문 같은 함수를 반복적으로 호출하면 먼저 반복문을 생각해봐야 한다. 반복문을 작성하는 법은 간단하다. 반복되는 부분은 반복문에 그대로 넣고 반복되지 않는 부분은 변수로 집어넣으면 된다. 이전 글에서 짠 코드를 보자. func TestAdd(t *testing.T) { if Add(1, 3)..

    [Go with TDD] TDD를 위한 go test 기초

    [Go with TDD] TDD란? 소프트웨어 공학, 개발 방법론 등에 관해 조금이라도 알고 있다면 TDD(Test-driven development, 테스트 주도 개발)라는 용어를 들어봤을 것이다. 잘 아는 사람도 많겠지만 모르는 사람들을 위해서 우선 simplear.tistory.com 이번 글에서는 Go언어에 TDD를 적용할 때 사용하는 테스트 프레임워크 go test에 대해 설명하겠다. go test란? go test는 Go언어에 자체적으로 내장된 테스트 프레임워크이다. 테스트 케이스를 형식에 맞춰서 작성하고 go test를 실행하면 자동적으로 테스트가 이루어진다. 절차 go test를 이용해 TDD를 적용하는 방법을 간단한 예시를 통해 설명하겠다. 0. 테스트할 간단한 프로그램 만들기 테스트하기..

    [Go with TDD] TDD란?

    소프트웨어 공학, 개발 방법론 등에 관해 조금이라도 알고 있다면 TDD(Test-driven development, 테스트 주도 개발)라는 용어를 들어봤을 것이다. 잘 아는 사람도 많겠지만 모르는 사람들을 위해서 우선 용어부터 정리해보자. TDD 단어 그대로 테스트를 통해서 개발하는 방식이다. 즉, 테스트 케이스를 작성한 후 그 테스트를 통과하기 위한 코드를 짜는 방식을 TDD라고 부른다. 회귀 테스트 회귀 테스트는 이전에 동작 했던 기능 및 함수가 다른 부분의 코드 수정 후에도 일관성 있게 동작하는 것을 검증하는 테스트이다. 회귀 테스트는 일단 작성되면 새로운 기능을 테스트할 때마다 실행된다. 회귀 테스트의 핵심은 기존의 코드가 새로운 기능에 의해 문제를 일으키지 않는다는 것을 검증하고 보증하는 것에 ..