컴퓨터 언어/디자인패턴

코드 네이밍 RawBitmap Data

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
반응형