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
반응형
'백엔드개발 > 헷갈리는기초개념' 카테고리의 다른 글
| [Java 기초] int ↔ String 형변환 (0) | 2025.07.07 |
|---|---|
| [Java 기초] int와 Integer 무슨 차이인지 정확히 이해하기 (2) | 2025.07.07 |
| [Java] java.lang.ArithmeticException: / by zero 에러나는 이유 및 해결 방법 (1) | 2025.04.25 |
| [java] 추상클래스와 일반 클래스의 차이(abstract / class) (0) | 2024.04.30 |
| Pass By Value와 Pass By Reference : Python, Java, C 차이 (2) | 2024.02.07 |