본문 바로가기

전체 글

(19)
[Design Go] 단일체 패턴(동시성 프로그래밍을 중심으로) 들어가기에 앞서... 드디어 마지막 생성 패턴이다. 예제는 지난 글과 동일하다. 이번 글은 동시성 프로그래밍의 내용을 포함하고 있기 때문에 해당 내용에 관해 알고 있으면 좋다. 패턴 단일체 패턴은 객체(Singleton)를 단 하나만 생성하도록 하는 패턴이다. 프로그램 내에서 Singleton 객체는 오직 하나이며 프로그램 실행 중 처음 접근할 때만 초기화가 이루어진다. 프로그램 어느 곳에서든지 Singleton 객체에 접근 가능하며 어느 곳에서 접근해도 같은 객체를 가리킨다. 즉, 전역 변수와 같은 기능을 한다. 장점 전역 변수의 상위 호환이다. 전역변수를 쓸 때에는 여러가지 부작용을 감수해야 한다. 단일체 패턴은 이런 전역변수의 부작용을 최소화한다. 이에 관해서는 아래의 장점들에 자세히 풀어놓았다. ..
[Design Go] 원형 패턴 들어가기에 앞서... 예제는 전과 마찬가지로 지난 글의 예제를 이용했다. 원형 패턴 원형 패턴은 미리 만들어진 객체(prototype)의 복사를 통해 새로운 객체를 생성하는 패턴이다. prototype 객체는 보통 팩토리 객체(factory) 내부의 인스턴스로 존재하며, factory 객체는 요청한 prototype 객체의 복사본을 반환한다. prototype 객체를 복사할 때에는 깊은 복사를 이용해야 한다. 장점 런타임 단계에서 새로운 객체의 생성자를 만들 수 있다. 이는 컴파일 단계에서 생성할 객체의 클래스를 정해야 하는 다른 생성 패턴에 비해 유연성이 보장된다. 클래스의 개수가 줄어든다. 다른 생성 패턴은 인터페이스를 만족하는 다양한 클래스들을 생성해야 하지만 원형 패턴은 하나의 클래스에 내부의 p..
[Things of Go] 얕은 복사와 깊은 복사 해당 글은 독자가 Go언어의 기본적인 문법과 포인터 혹은 참조 자료형의 개념에 대해 알고 있다고 가정한다. 변수 복사 프로그래밍 언어를 어느 정도 다룰 줄 알게 되면 항상 유의해야 하는 부분이 있다. 바로 변수의 복사이다. 변수의 복사라고 거창하게 말했지만 한 변수값을 다른 변수값에 할당하는 것이다. var a int = 3 var b int = a //복제 위에 예시로 든 int형같이 기본 자료형은 위와 같이 할당문으로 복사해도 별 문제가 되지 않는다. 그러나 자료형이 참조형일 때는 이야기가 다르다. 예시를 들기 위해 다음의 클래스를 준비했다. package main import ( "bytes" "encoding/gob" "fmt" ) type Pos interface { Print() Copy() ..
[회고] Good bye 2020, Hello 2021 Good bye 2020, Hello 2021 2020년이 유독 다사다난한 해였다는 것에 이의를 가지는 사람은 적을 것이다. 필자는 힘든 시기일 수록 과거를 성찰하고 미래의 목표를 설정하여 나아가는 것이 중요하다고 생각한다. 그래서 정기적으로 간행하는 글과 별개로 해당 글을 작성하게 되었다. 이 글은 2020년을 뒤돌아보고 2021년에 어떻게 할 것인가에 대한 글이다. 회고 공부 리눅스 마스터 1급 필기 시험을 한 번에 합격했다. 실기 시험은 병역 문제 때문에 아직 보지 못했다. 한편 디자인 패턴에 관해서 마스터하고 싶었기 때문에 'GoF의 디자인 패턴' 1회독 완료했다. 하지만 아직 부족한 느낌이 들어 Udemy 강좌를 구입해 실습과 병행하면서 2회독 중에 있다. 공부한 내용 역시 블로그에 'Desig..
[Design Go] 팩토리 메소드 패턴 들어가기에 앞서... 이번 패턴의 설명 역시 지난 패턴의 예제를 이용했다. 팩토리 메소드 패턴 팩토리 메소드 패턴은 함수에게 다른 객체(product)의 생성을 맡기는 디자인 패턴이다. creator 함수는 product 객체의 일종의 생성자 역할을 한다고 볼 수 있다. 장점 객체의 생성과 구현을 분리해낸다. 이전의 생성 패턴들과 같다. 코드의 가독성이 높아진다. 빌더 패턴과 비슷한 이유이다. 빌더 패턴이 거대한 객체의 생성을 목적으로 한다면 팩토리 메소드는 작은 객체의 생성을 목적으로 한다. 다른 패턴과 쉽게 연동된다. 기존의 클래스에 해당 메소드만 추가하면 되는 만큼 다른 패턴에 적용하기 쉽다. 추상 팩토리 패턴은 여러 팩토리 메소드를 묶어 객체화한 패턴이다. 단점 코드가 난잡해질 수 있다. 팩토리 ..