728x90
반응형
자바의 2차원 배열(arr[y][x]
)은 수학에서 말하는 ‘행·열 행렬’과 똑같이 생겼는데,
우리가 화면 좌표나 (x, y) 점으로 생각하기 시작하면 순서가 뒤집혀 보이는 것뿐이에요.
왜 이런 일이 벌어지는지 흐름만 싹 정리해 볼게요.
1️⃣ “행(row) → 열(col)”이 기본
행렬·2차원 배열 | 행(row) 번호 | 열(column) 번호 | arr[row][col] |
평면 좌표 | x (가로) | y (세로) | (x, y) |
- 수학 책에서도 i(행) 먼저, j(열) 나중이죠.
- 자바 배열은 “행 배열을 통째로 담은 배열”이므로 행이 첫 번째가 자연스럽습니다.
2️⃣ 그런데 그래픽스·좌표계 함수는 (x, y) 순서를 관례로 사용
g.drawLine(x, y, x, y); // Graphics2D, JavaFX, Android 공통
- 전통적인 GUI·게임 API들은 **“가로-세로”**를
(x, y)
로 받는 걸 철칙처럼 유지해 왔어요. - 그래서 이미지나 타일맵 데이터를 2차원 배열에 넣어 두고 화면에 찍을 때는처럼 인덱스 순서를 거꾸로 넣게 됩니다.
int row = y; // y == 행
int col = x; // x == 열
Color c = pixels[row][col];
g.drawLine(x, y, x, y);
3️⃣ “그럼 자바가 x·y를 거꾸로 쓴다”는 느낌이 드는 이유
- 표기 방식이 섞일 때
arr[y][x]
(행, 열)drawSomething(x, y)
(x, y)
두 줄을 나란히 보면 “앞뒤가 뒤집힌다”는 착시가 생깁니다.
- y 축 부호까지 반대
- 그래픽스 좌표는
(0,0)
이 화면 왼쪽-위이고, y가 아래로 커져요. - 수학 좌표는 y가 위로 커지죠.
→ “순서도 다르고 부호도 다르니까 완전 헷갈린다”는 감각이 생김
- 그래픽스 좌표는
즉, 자바가 일부러 x·y를 바꾼 게 아니라 “행·열 ↔ x·y”라는 두 세계가 겹칠 때만 뒤집히는 것처럼 보이는 거예요.
4️⃣ 실무에서 안 헷갈리는 3가지 습관
변수명을 row, col로 | 코드 읽을 때 “아, 이건 배열 인덱스구나” 즉시 구분 |
arr[row][col] 주석 달기 | 선언부 옆에 // (y, x) 처럼 메모 |
필요하면 변환 함수 하나 만들기 | toScreen(x, y) → (col, row) / toMath(row, col) 등 |
🔑 한 줄 요약
- 배열:
arr[row][col]
→ 수학 행렬 그대로 - 좌표:
(x, y)
→ 전통적 그래픽스 관례 - 두 표현을 동시에 쓸 때만 “앞뒤가 바뀐다”고 느껴질 뿐, 자바 자체가 x·y를 거꾸로 정의한 건 아니다! 😉
📷 이미지로 직관적인 이해
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준] 2606 - 바이러스 (python3) (0) | 2024.05.10 |
---|---|
[프로그래머스] 정수를 나선형으로 배치하기 (python3) (0) | 2024.05.09 |
[프로그래머스] 옹알이(1) (0) | 2024.03.25 |
[프로그래머스] 타겟넘버 (0) | 2024.01.05 |
[파이썬] 괄호 짝 확인하기 (0) | 2023.12.15 |