절대좌표계의 원점 변경을 제공하는 개발 환경들

원점을 항상 왼쪽 위로 지정하면 쉽게 할 수 있는 경우가 많다. 상대적인 기준거리 계산도 쉬운 편이고, 기본 위치를 틀릴 일이 없어지게 된다.

그러나, 객체를 만드는 데 있어서 굳이 원점이 왼쪽 위여야만 하는 경우가 아닌 상황도 상당히 많이 생기게 된다. 특히 상태 표시창이라던가 알림 메세지나 특정 애니메이션들..

쉽게 설명하면, 그냥 화면 가운데에 쉽게 만들어서 쉽게 쓰는 녀석들 등의 경우에 굳이 왼쪽 상단의 원점에서 일일이 계산하는 것보다 원점이 정가운데 있으면 개발자 입장에서는 훨씬 단순하게 써먹을 수 있게 된다. 또한 게임 개발에 익숙해져 있거나 해서 왼쪽 아래가 편한 사람들의 경우에는 왼쪽 아래로 원점을 변경하여 개발하여도 된다.

원점 변경뿐만 아니라 각각의 오브젝트마다 좌표계의 원점 구분을 바꿔서 할 수도 있게 해준다. 기본 윈도우 환경은 원점인데 내부 폼 중 하나가 원점이 가운데 구분일 수도 있고, 어떤 폼 안에서는 특정 오브젝트가 그냥 가운데 원점으로 두고 작업하면 더 쉽게 할 수 있으므로 가운데 원점으로 만들어서 하는 경우도 있다.

제공하는 GUI 개발 환경마다 다르기 때문에 반드시 확인하고 작업에 진행해야 한다. 뭔지 모르는 옵션인데 건드려 보니 정렬이나 원점 변경이거나 하면 여러모로 화면이 막 깨져서 다시 작업해야 하는 경우도 허다하게 생길 것이다. 게다가 지금 필자가 말하는 것 외에도 개발 환경마다 다양하게 바꿔서 볼 수 있도록 되어 있기 때문에 될 수 있으면 확실하게 확인하여 작업하는 것을 추천한다.

절대좌표계

우리가 일반적으로 특정 점을 기준으로 몇콤마 몇 하면서 맞춰서 사용하는 좌표계가 바로 절대좌표계입니다. 어려운 거 없죠. 절대점인 원점을 기준으로 보고 좌표를 계산하는 방식.

기존의 윈도우 프로그래밍, QT, GTK, 등등에서 많이 쓰고 있고, 아직도 많이 지원되는 방식이기도 합니다.

좌표계의 기본점에 대해서는 그전글에서 대충 어디에 잡힌다는 것을 적어봤습니다. 그러면 그 좌표에 맞춰서 시작 좌표가 어디인지 설정하고, 객체의 사이즈(높이, 너비)를 설정하여 기본적으로 오브젝트를 설정해 주면 그 위치애 만들어서 그려주는 건 알아서 척척 해주죠. ㅇㅂㅇ;

절대좌표계를 쓰다보면 화면의 최대화 등에 의해 화면 조정시 어떻게 처리해야 할지 곤란해 하는 경우가 있습니다. 주로 초보일 시절이죠. ㅇㅅㅇ 그럴 때에는 화면 비율을 계산하는 간단한 사칙연산을 만들어서 그 변수를 가지고 각각의 좌표에 맞춰서 적용하는 것입니다. 예를 들어, 특정 버튼에 대해서 왼쪽은 항상 200px, 오른쪽은 항상 200px를 남겨두고 만들어야 한다면 너비값을 form.width – leftspace – rightspace 와 같은 변수값을 연산하여 입력하게 한다면 항상 원하는 너비를 맞춰서 만들 수 있겠죠.

확실히 화면이 복잡해지면 그에 따른 연산식도 복잡해지고, 각 오브젝트를 생성하거나 제거하는 코드도 확실히 길어집니다. 게다가 더러워지죠. 그렇지만 이런 코드가 더럽다고 해서 불평하진 마세요. 나중에 실력이 좀 늘다보면 어느정도 정리해서 만들어 쓸 수 있기도 하고, 특정 객체들은 계속 쓰인다면 별도로 만들어 쓸 수 있는 클래스로 만들어서 쓰면 됩니다.

*주의: 클래스로 만들어 쓸 때, 상속 개념 제대로 이해 못하고 그냥 상속에 상속으로 물려서 특정 작업하는 화면 오브젝트 클래스를 만들어 쓰게 되면 나중에 그 상속들을 다 깨부숴야 할 정도의 문제가 생깁니다. 여기선 유사하지만 다른 화면 기능대로 돌아야 하는데 상속에 상속을 막 물려서 수정하면 다른 곳까지 죄다 수정되고 하는 그런 상황이 생깁니다. (요구사항 제대로 안보고 디자인 패턴대로 만들기에만 신경쓰면 이꼴납니다.)

연산식이 복잡해 지고 많아지게 되면 상당히 느려질 것으로 보이는데, 그럴 때 사용하는 것이 바로 로딩 화면을 먼저 띄워 애니메이션으로 하고 그 다음 과정에서 화면을 불러오는 작업을 진행하는 것입니다. 그런데 그만큼 느려지려면 대부분은 리소스 IO에서 생기는 부분인지라… 일반적인 응용 프로그램에서는 그럴 일 별로 없으니 열심히 써주세요. 어차피 사칙연산이고, 연산 작업들이라고 해봐야 화면에 배치하기 위한 정수 좌표 구하는 것이기 때문에 그렇게 엄청난 연산들을 하진 않습니다.