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를 거꾸로 쓴다”는 느낌이 드는 이유

  1. 표기 방식이 섞일 때
    • arr[y][x] (행, 열)
    • drawSomething(x, y) (x, y)
      두 줄을 나란히 보면 “앞뒤가 뒤집힌다”는 착시가 생깁니다.
  2. 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
반응형

+ Recent posts