공지를 읽었으나 여전히 미심쩍어 질문드립니다.
가로줄(행)의 개수를 구할 때는 열의 크기, 세로줄(열)의 개수를 구할 때는 행의 크기를 구해야 하기 때문에 가로가 col, 세로가 row라고 설명하셨습니다.
그런데 가로줄의 크기가 비록 세로줄의 개수를 나타낸다고 해도 가로줄의 크기가 필요할 때까지 col이라는 변수명이 붙는 이유가 궁금합니다. 예를 들어 '가로줄의 크기를 구하고, 그만큼의 정수를 생성해 채워넣는다'라는 코드를 작성할 때는 직관적으로는 'size of row'를 구해서 그만큼 생성해야 하지 'number of column'을 구해서 생성하는 건 일부러 비직관적으로 코드를 쓰는 것 같아서요. rowsize, colnum처럼 명시하는 방법도 있을 테고요. 특히 3차원이나 그 이상 차원의 배열을 쓸 때는 혼동이 더 심할 것 같습니다.
또한 배열은 내부적으로는 그냥 일렬로 저장된 수라고 하셨기 때문에 '프로그래밍에서의 할당 방식이 그렇다'는 부분이 이해가 어렵습니다.
이렇게 이름을 붙이는 게 일종의 관행인가요? 익숙해져야 할 문제인가요? 아니면 제가 편한 대로 변수명을 지어도 될까요?
보통 행렬을 다루니까 row, col 변수명을 사용한 것이고, 상관은 없습니다.
인공지능 챗GPT에게 width, height로 작성해달라고 했습니다.
width, height로 쓰는 게 더 직관적이기는 합니다.
중요한 건 2차원 배열에서 array[세로크기][가로크기]입니다.
수학에서는 행렬이니까 행 -> 열의 순서이죠?
행 = 가로
열 = 세로
그러니까 수학처럼 생각해서
array[가로크기][세로크기]로 하면 인덱스 계산을 해보면 배열의 최대 범위를 벗어나는 경우가 생기기 때문에 반드시 index out of range 에러가 발생합니다. C 언어에서는 access violation이라고 표시하겠죠.
정사각형 NxN 행렬이면 가로, 세로를 바꿔써도 오류가 발생하지 않습니다. 대다수 C 언어 입문서가 여기서 실수를 하죠.
하지만 실제로 이미지 파일 등은 직사각형 크기이죠.
모니터의 해상도도 1920x1080처럼 직사각형입니다. 따라서 가로, 세로를 바꿔 쓰면 에러가 납니다. 가로, 세로를 바꿔 써서 에러가 안 나는 코드를 작성할 수 있으면 그렇게 하시면 됩니다.
아니면 수학의 행렬과 컴퓨터가 메모리를 접근하는 방식의 차이를 이해하려는 노력을 사람은 해야겠지요.
수학에서 2차원 평면을 그리면 (0, 0) 좌표의 위치는 왼쪽 아래 구석입니다.
컴퓨터는 모니터에 이미지를 표시할 때 왼쪽 위가 (0, 0)이고 시작 위치입니다.
컴퓨터가 입력에 따라 데이터를 처리하고 1바이트씩 화면에 순차적으로 쓴다면 왼쪽 위에서부터 씁니다. 그렇게 한 줄씩 결과를 처리하면서 출력하고, 그 결과가 전체 화면을 채우는 그림이 됩니다.
수학 시간에 왼쪽 아래가 (0, 0)이니까 컴퓨터도 그렇게 되지는 않습니다. 역사적으로 그렇게 처리하지 않았죠.
콘솔 시절이면 화면이 넘치면 위에 있는 글씨가 지워지면서 아래로 스크롤이 되었죠.
1. 컴퓨터가 처리하는 방식에 익숙해져야 합니다.
2. 변수명은 row, col보단 width, height로 쓰는 게 더 직관적입니다.
다만, 변수명 row, col은 작가님의 선택입니다. 답변을 쓰는 건 사이트 관리자이고, 관리자는 width, height를 추천합니다. 본문의 세로, 가로 크기와도 더 직관적일 겁니다. 다만 영어 글자는 몇 자 더 타이핑해야죠.
현장에서 실습할 때 보면 영타 귀찮아서 r, c, w, h 등으로 치는 것도 자주 보니까요. 그러나 영타 실력도 늘리는 게 좋죠.
이게 아니면
3번. 수학의 행렬과 같이 가로 -> 세로로 처리하는 나만의 프로그래밍 언어를 만들어본다(요즘 유튜브에 보면 따라 할 수 있는 영상들 많이 있습니다).
4번. 내 생각대로 처리할 수 있는 마이크로프로세서(CPU)를 직접 제작한다(역시나 유튜브에 있고, 빵판 + 납땜할 수 있는 약간의 돈만 있으면 됩니다). 없으면 마인크래프트에서 CPU 만들기 검색해서 마인크래프트에서 CPU를 직접 만드는 레벨도 있습니다.
3, 4번은 독자적인 사파의 경로라고 봅니다만,
1, 2번은 대다수가 따르는 정파의 경로입니다.
정파나 사파나 선택의 영역이니 선택하시면 됩니다.