어서 오세요
이번 강의에서는 다차원 배열에 관해 얘기해 보죠
네 이 시점까지 여러분이 배열을 생각했다면 방금 배열은 다양한 유형의 데이터를
저장하는 변수라고 했죠 그런데 배열은 많은 데이터를 저장하는 변수예요
더 복잡해질 수도 있어요
기본적으로 여러 차원이 있을 수 있어요
네 지금까지 얘기한 것처럼 선형 배열만 있다면 단일 차원이라고
하죠
싱글Dimension인 건 알죠 하나의
괄호와 하나의 크기니까요
C 언어는 어떤 차원의 배열이든 벌금을 내게 하죠
이건 일종의 배열이에요 배열의 배열이죠
2차원 해상도가 가장 흔해요
네 하지만 3차원 배열이나 4차원 배열
5차원 배열은 가능하지만 3차원 배열은 유스케이스가
많지 않아요 4, 5
네 네 정말로 프로그램에 사용하는 단차원
배열과 2차원 배열이 있어요
네 2차원 배열은 스프레드시트로 행과
열을 나타내기 때문에 흔합니다 그런 식으로 매트릭스나
테이블을 시각화하죠
2차원 배열이죠 행과 열이 있어요
단일차원 배열을 더 많이 저장할 수
있습니다 크기를 지정해서요
매트릭스 같기 때문에 충분히 적용할 수 있어요
그리고 여러분이 쓰고 싶은 응용 프로그램 중 매트릭스 개념이 있을 수도 있어요
구체적으로 수학적 응용 프로그램이 가장 관련이
있겠죠
하지만 2차원 가오리는 다양한 용도로 쓸 수 있죠
한 예가 매트릭스예요
그걸 테이블로 상상해 보세요
2차원 배열은 1차원 배열과 마찬가지로
분리되죠
유일한 차이는 이제 다른 괄호 세트가 생겼다는 거죠
네 이 예제에선 매트릭스라는 이름의 배열을 선언하고
있죠 4개의 행과 5개의 열이 있어요
그 2차원 배열에 20개의 요소를 저장할 수 있다는 거죠
그러니 괄호 한 쌍으로 각 차원이 지정되는
방법을 아셔야 해요
그래서 배열에 있는 차원을 쉽게 구분할 수 있는 거예요
브래킷이 3개면 3차원 배열이에요
4가 있으면 4죠
이건 2개니까 2개예요
그 전까지는 한 차원만 있었기 때문에 단일 차원이라는
걸 알았죠
괄호를 잘 보세요
다시 4개의 행, 5개의 열, 총 20개의 요소가 있네요.
네 2차원 배열을 초기화하기 위해서요 1차원 배열과 같은
방식으로 초기화될 겁니다 같은 유형의 구문이죠 더
늘어날 거예요
초기화에 대한 요소들을 리스트화할 때 값들은 행별로
나열되어 있어요.
여기서 차이점은 각 행에 대한 초기 값을
입력할 때 중괄호 사이에서 할 거라는 거죠 중괄호 사이에서요 그런
다음 중괄호 사이에 모든 행을 감싸죠
이렇게 보일 거예요
네 2차원의 숫자들을 배열해 볼게요 3개의
행과 4개의 열이 있습니다 이것을 초기화하고
싶다면 괄호 안에 전체 배열을 넣고 각 행에 중첩된 괄호를 추가하면
됩니다
값은 0-0을 10으로 초기화하고 0은 1을 20으로 0은 2를 30으로
0은 3을 40으로 하죠
그렇게 해서 물리의 차원 배열에 접속하는 거죠
열에 행을 넣어 액세스하세요
0 기반이라는 것만 기억하면 돼요
좌측 상단은 1행 1열은 00이 되고 그건 10이
되죠
1열 2열은 20까지 비퀄이고 1열은
0으로 접근할 수 있죠
네 첫 번째 배열은 3개의 행을 포함하기 때문에 액세스할 수 있어요 행 넘버를 명시하는 숫자죠
그리고 열 넘버는 배열에 접근하기 위한
다음 사양입니다
하지만 개별화는 꽤 까다로워요 괄호
열고 주석으로 나누면 되죠
거기에 엑세스하려면 일반 배열에 엑세스하듯 거기에 엑세스해야 합니다
지금 여러분은 열에 있는 행이란 개념에 엑세스하고 있는 거죠
네 괄호 안에 있는 중괄호 사용은 사실 선택 사항이지만 가독성을
위해 사용해야 해요
네 네 괄호를 안 쓰면 그냥 10이나 20 30
40 0.45kg 0.25kg 0.35kg 연달아 잡히네요 뭘 초기화할지 시각화하기
힘들어요
네 프로그래머로서 가독성은 아주 중요합니다 코드의 품질을 향상시키거든요
코드를 유지하는 게 더 쉽습니다
네 여기 이걸 보면 쉽게 식별할 수 있어요 특히
코멘트로요 뭘 초기화하고 있는지 어떤 값과 행이 초기화될지를요
한 줄로 연속해서 연결하는 숫자가 있었다면 정말 빨리
길을 잃었을 거예요
안쪽 브래킷은 필요 없지만 사용하세요
1차원 배열과 마찬가지로 전체 배열을 초기화할
필요가 없어요
특정 영역을 초기화하세요
이 예제에선 4행과 5열로 2차원 배열을
재현하고 있어요
각 행의 3개 요소만 초기화하고 있어요
네 그래서 1열은 1열은 10 1열은 2열은 5열과 1열 3열은 마이너스 3
2열 등도 마찬가지입니다
900 32 31 008
네 각 행의 4번째와 5번째 값을 설정하지
않은 값들은 자동으로 0으로 설정될 것입니다 빼놓았기
때문이죠
이 경우엔 중괄호를 제공해야 합니다
안에 있는 거요
그렇게 하면 초기화가 엉망이
될 테니까요
중괄호가 없으면 연속적으로 실행될
테니까요
이 기계가 첫 12가지
원소를 초기화할 거예요
네 그래서 모든 요소를 1열에 초기화하고 모든 요소를
2열에 초기화해요 처음 2개의 요소는 3열에
나머지 요소는 3열에 두고요 4번째 줄의 나머지
요소는 0...
이건 4행과 5개의 열이 있는 2차원적인 가오리예요
연달아 하는 거죠
네 교정기 잊지 마세요 혹시나 해서요 특정
초기화 요소만 지정하고 싶다면
초기화 장치도 조작할 수 있어요
이게 C99 콘셉트라는 걸 기억하세요
그건 C11에서 선택 사항이고 거기서는
특정 지수를 초기화할 수 있죠
네 초기화 목록에서 서브스크립트를 쓸 수 있어요 단일
차원 배열에서처럼요 지정 초기화 작업을 하고 싶다면 이렇게
하면 됩니다
네 여기 4행과 3열의 매트릭스 배열을 선언하고 있죠 하지만 실제로
0을 지정하고 있어요 0은 1과 같다 1은 5와 2와 같다
2는 9와 같다
네 2열이라고 하면 다시 2열이요 2열을 가리키는 거죠 3열 말이에요
0열에서 시작했으니까요 2열이요 3열 말이에요
이 ASA 테이블이나 스프레드시트를 상상하세요
왼쪽 상단 구석에 접근하는 거죠
하지만 4는 행을 의미하고 3은 열을 의미한다는 것을
이해하게 되면 직관적으로 알 수 있죠.
네 매트릭스에 표시된 3가지 요소를 지정된
값으로 초기화합니다
하지만 여기서 필요한 건 구문이에요
여기서 알려지지 않은 값은 자동으로 0이 될 거예요
3개 값만 초기화할 거예요
네 네 초기화하는 값들의 집합은 행의 요소들이 될 것입니다
중괄호들 사이에 있습니다
다른 괄호 사이에 전체 초기화가 이루어지죠
네 바깥쪽에 괄호가 있는 게 보이시죠 일반적인
초기화처럼요 괄호는 내부 배열에 접근하기
위한 거고요
그리고 쉼표로 각 행을 분리합니다 각 행 값의 집합은
쉼표로 다음 집합과 분리되죠
그래서 값과 열 표가 나뉘었죠
네 자 우리가 2차원이 있다고 했고 계속 얘기했지만 2차원이
존재하고 그에 대해 계속 얘기했지만 네, 네.
네 2차원과 관련해 말씀드린 모든 게 3차원에도
적용돼요 4차원 5차원
a3차원 배열을 선언하고
싶다면 대괄호 3개를 쓰면 돼요
여기 boxof 타입 int라는 배열이 있습니다 10 20과 30이죠
네 3차원 배열을 사용하고
싶을 수도 있죠 어쩌면 xyz 값을 저장하는 경우 이건 필요 없을지도 몰라요
3차원 배열과 업은 흔치 않아요
네 네 요약하자면 1차원 배열을 데이터 행으로
시각화할 수 있어요 단일 행으로요 2차원 배열은 테이블로 매트릭스나
스프레드시트로 3차원 배열에서는 데이터 테이블이 쌓인 이미지를 볼 수 있습니다
테이블이 쌓인 이미지를요
그 정도 양의 데이터가 필요하다면 접근하기가 정말
어렵고 혼란스러울 거예요
3차원 배열이나 그 이상의 프로그램을
유지하는 사람도요 무슨 일인지 알아보려다
길을 잃을 수도 있어요 다시 할 수 있어요 이런 걸 반복해야 한다면
하나, 둘 3차원 배열 루프를 사용해야 할 겁니다
루프에 더 많은 차원이 있을수록 중첩된 루프가
더 많아지죠
a3차원 배열을 처리하고 싶다면 중첩된
루프가 3개 있어요
afour-차원 배열을 처리하고 싶다면 중첩된
루프가 4개 있을 거예요
네 그래서 2차원보다 높은 배열을 초기화할 때 같은 유형을
적용할 거예요 조금 확장할 뿐이죠
3차원 배열은 3단계의 중첩된
중괄호를 갖습니다 내부 레벨은 각 행의 초기화 값
집합을 포함하고요 이렇게 보일 거예요
이건 3차원 레이입니다 2차원, 3차원, 4차원 데이터 테이블이
쌓여 있죠
네 첫 번째 3열 블록은 초기화하고요
세 행의 두 번째 블록은 초기화합니다
네 다시 말해 첫 번째 블록과 두 번째 블록입니다 세 번째와 네 번째 블록은
초기화하지 않았거든요 첫 번째와 두 번째만
했죠
네 그래서 4개의 블록이 있고 각 블록은 데이터 테이블이
쌓여있고 각 블록은 행과 열로 이루어져 있죠
네. 첫 번째 블록은 처음 3개의 행만 초기화 할 것입니다. 3개의
행만 가지고 있는데요.
네 두 번째 블록은 다음 세 행을 초기화하지만 세 번째, 네 번째
블록은 초기화가 안 돼요
네 세 번째와 네 번째 블록을 초기화하고
싶다면 더 많은 내부 괄호와 중괄호 등을 사용하세요
네 맞아요 하지만 하지만 ? 0으로
초기화할 거예요
하지만 보시다시피 아주 지루하고
따라가기 힘들죠
네 제가 언급한 차원 배열에서 요소들을 처리하고 싶을 때
중첩된 루프를 사용할 거예요
다시 한 번 차원의 수와 일치하게 될 거예요
각 루프가 하나의 배열 차원 위에서 운율을 맞출 거예요
이렇게 보일 거예요
이건 아트리마의 차원 배열의 한 예죠
외부 루프가 있고 내부 루프가 2개 있어요
네 외부 루프는 첫 번째 외부 배열이 될 거예요 외부 루프는 기본적으로 행을 통과하고 두
번째 루프는 열을 통과하고 세 번째
루프는 블록을 통과하죠
네 다시 말씀드리지만 아셔야 할 게 있어요 정말
복잡하고 지루해지네요 정말 빨라요
네 그러니 3차원이나 4차원 배열은 피하세요
사용 사례도 별로 없던데요 1번과 2번만
사용할 거예요
네 하지만 명심해요 다차원 배열은 C에서 가능해요 더 많은 데이터를 저장하고 많은
데이터 요소로 같은 이름에 접근할 수 있죠 고마워요