상세 컨텐츠

본문 제목

코드 네이밍 RawBitmap Data

컴퓨터 언어/디자인패턴

by cepiloth 2021. 5. 7. 17:05

본문

728x90
반응형

 

최근 업무를 진행하다가 아래 코드에서 혼선이 생겼다.

xxBitmap::getRawBitmapSize() {
	return m_RawBitmap->getRawBitmapLength();
}

 

" 뉴비 : getRawBitmapSize()의 반환값은 비트맵의 사이즈인가요?
고인물 :
아니 실제 파일 사이즈야

뉴비 : getRawBitmapSize() 이면 비트맵을 뜻하는 거 아닌가요?
고인물 :
예전부터 이렇게 썼고 실제 파일 사이즈야

뉴비 : 아 네..
고인물 :
있는 거 그냥 써~ 뭘 생각하고 그래~ "

 

여기서 말하는 비트맵은 무엇일까? 픽셀(색상)을 갖고 있는 지도(MAP)에 의미를 하는 것일까? 비트맵의 사전적인 의미를 찾아보면 아래와 같다.

 

비트맵

 BMP라는 불리는 파일은 비트맵 파일 헤더(FileHeader) 와 비트맵인 포해서(InfoHeader) 두개로 구성된다. BITMAPFILEHEADER의 bfSize 실제 물리적인 크기를 갖고 있고 BITMAPINFOHEADER의 biSizeImage는 widthstep(stride, scanline) * 세로 사이즈의 실제 픽셀 데이터의 크기의 정보를 갖고 있다.

* 4바이트 Align 기준으로 계산한다고 가정

픽셀당 바이트 수 = 3
가로 = 640
세로 = 480

패딩 영역 = 가로 + (가로 % 4 ? 4 - 가로 % 4 : 0)
Widthstep = 가로 * 픽셀당 바이트 수 + 패딩 영역
biSizeImage  = widthstep * 세로
typedef struct tagBITMAPFILEHEADER {
  WORD  bfType;
  DWORD bfSize;
  WORD  bfReserved1;
  WORD  bfReserved2;
  DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER {
  DWORD biSize;
  LONG  biWidth;
  LONG  biHeight;
  WORD  biPlanes;
  WORD  biBitCount;
  DWORD biCompression;
  DWORD biSizeImage;
  LONG  biXPelsPerMeter;
  LONG  biYPelsPerMeter;
  DWORD biClrUsed;
  DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER

왜 이렇게 계산하는지에 대해서는 다음 포스팅에 해야겠다. 컨벤션 관련 포스팅이었는데 갑자기 비트맵 이야기를 하니 계속 쓰게 되네... 아무튼 다시 컨벤션 이야기로 돌아간다.

 

대략적인 class xxRawBitmap 과 xxBitmap 코드가 이렇게 생겼다.

class xxRawBitmap {
...
public:
	int getRawBitmapLength() {
		return length;
	};
	
private:
	int length; // 파일의 크기
...
};

//blah blah
class xxBitmap {
	...
public:
	int getRawBitmapSize() const {
		return m_RawBitmap->getRawBitmapLength();
	}
	
private:
	
	xxRawBitmap* m_RawBitmap;
	...
}

최초 설계 의도는 RawBitmapData = 원시 비트맵 데이터라는 의미로 파일이란 의미로 추측했다. 실무에서 업무를 진행하면서 내가 만든 코드 보다 이미 설계되어 있는 코드를 그대로 사용하는 경우가 많아서 그냥 관례적으로 이해하고 넘어갔다. ​ 하지만 많은 사람들이 물어보는 질문 중 하나였다.

 

" 요망한 뉴비 : 로우 데이터 사이즈가 이상해~
고인물 : 뭐가? 파일 사이즈 반환하는 건데 뭐가 이상해?

요망한 뉴비 : 로우데이터면 비트맵에 크기 아니야?
고인물 : 아아~ 네이밍을 바꿔야겠어~(주석에 파일 사이즈라고 쓰여있잖아 이 자식아!!)

요망한 뉴비 : 하아~
몰래 듯던 뉴비 : (혼자 생각 네이밍이 이상해~) "

 

 많은 질문과 문의가 있다면 그건 분명 문제가 있다고 판단하여 나는 네이밍을 변경하였다. 실제 파일을 비트맵으로 변환하기 전 JPEG, PNG, TIFF, GIF 등의 경우 원시 데이터이므로 해당 class 이름을 Bitmap 이란 단어를 제거하여 xxRawBitmapData -> xxRawData로 변경하였다.

 

데이터를 선택한 이유

 데이터 자료(資料, data, 데이터, 문화어: 데타)는 문자, 숫자, 소리, 그림, 영상, 단어 등의 형태로 된 의미 단위이다. 보통 연구나 조사 등의 바탕이 되는 재료를 말하며, 자료를 의미 있게 정리하면 정보가 된다.

 

자료 = 원시데이터, 정보 = 자료를 가공한 의미

 자료(Data) : 현실 세계에서 관찰이나 측정을 통해 수집한 단순한 사실이나 결괏값으로 가공되지 않은 상태를 말한다. 정보(Information) : 의사 결정에 도움을 줄 수 있는 유용한 형태로, 자료를 가공(처리) 해서 얻을 수 있는 결과이다.

 자료와 정보의 차이를 기반으로 RawBitmap 과 Bitmap에 대해서 네이밍을 수정하였다. 자료(RawData)를 화면에 표시할 수 있도록 가공한 정보(Bitmap)로 의미를 부여했다. 모든 사람들이 같은 의견이라고 생각하지는 않는다.

아아~여전히 네이밍 정하는 것은 너무 어렵다.

 인터넷이랑 책에 있는 비트맵 구조를 그대로 인용했는데... 일반적이라는 말이 모호하다. 나중에 기회 되면 BMP Version1부터 5까지 BMP의 역사를 포스팅해야겠다.

728x90
반응형

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

RAII idiom  (0) 2021.05.07
핌플 이디엄 Pimpl idiom  (0) 2021.05.07
싱글턴 패턴 SingleTon pattern  (0) 2021.05.07
빌더 패턴 사용 이유  (0) 2021.05.07
빌더 패턴 Build pattern  (0) 2021.05.07

관련글 더보기

댓글 영역