상세 컨텐츠

본문 제목

핌플 이디엄 Pimpl idiom

컴퓨터 언어/디자인패턴

by cepiloth 2021. 5. 7. 12:02

본문

728x90
반응형

 

Pimple은 Pointer to Implementation의 약자이다.

즉, 구현부를 포인터로 참조하는 관례를 뜻한다. 기술적인 측면에서 Pimpl  관례가 무슨 역할을 하는지 알아보자.

Cat class의 헤더이다.

// Cat.h
#pragma once

// forward-declare
class CatImpl;

class Cat
{
public:
	Cat();
	virtual ~Cat();

	void setAge(int age);
	void setColor(int color);

	int getAge() const;
	int getColor() const;

private:
	
	CatImpl *impl;
};

 

class Cat의 cpp 파일이다. 인터페이스와 구현 부가 분리된 것을 알 수 있다.

#include "Cat.h"

class CatImpl
{
public:
	CatImpl()
		:age(0)
		,color(0) {
	}
	~CatImpl() {
		;
	}

	void setAge(int age) {
		this->age = age;
	}
	void setColor(int color) {
		this->color = color;
	}
	int getAge() const {
		return age;
	}
	int getColor() const {
		return color;
	}

private:
	int age;
	int color;
};

Cat::Cat()
	: impl(new CatImpl()) {

}

Cat::~Cat() {
	delete impl;
}

void Cat::setAge(int age) {
	impl->setAge(age);
}
void Cat::setColor(int color) {
	impl->setColor(color);
}

int Cat::getAge() const {
	return impl->getAge();
}

int Cat::getColor() const {
	return impl->getColor();
}
​

 

Pimpl 장점

사용자에게 private 변수 및 함수를 숨길 수 있다.
API 인터페이스와 구현이 분리된다.
전방 선언을 사용하여 코드 간의 의존성을 낮추어 컴파일 소모 시간을 줄일 수 있다.

 

Pimpl 단점

유지 보수 노력 증가 - 세부 구현 사항 구현 및 수정 모두 수정해야 한다.
동적 할당으로 메모리 사용량이 증가된다.
성능 손실(내용을 인라인 하지 못할 수 있다고 합니다)

 Pimpl idiom 은 자주 변경되는 코드에는 부적합하다고 생각이 든다. 실제 사용 시에는 코드 수정이 적은 쪽에서 사용하는 것이 좋다고 본다. 필자는 오픈소스 라이브러리(Third-party OpenSource)를 사용할 때 주로 사용한다.

 

728x90
반응형

'컴퓨터 언어 > 디자인패턴' 카테고리의 다른 글

코드 네이밍 RawBitmap Data  (0) 2021.05.07
RAII idiom  (0) 2021.05.07
싱글턴 패턴 SingleTon pattern  (0) 2021.05.07
빌더 패턴 사용 이유  (0) 2021.05.07
빌더 패턴 Build pattern  (0) 2021.05.07

관련글 더보기