블로그 글을 열심히 써보려고 했지만, 최근에 생각을 정리하는 시간을 많이 갖게 되었습니다.
결국 블로그 글을 작성하는 것이 옳다고 생각했고. 글을 주로 쓰려고 합니다.
다만, 제 생각을 정리하고 기본을 다시 채우는 느낌의 블로그라서 공부의 지침서가 될 지는 모르겠습니다.
몇 번씩, 방문하면서 제 글을 읽어주시는 분들께 감사합니다!
배열이란 무엇일까?
배열은 자료구조 관점에서 보면 상당한데요.
현재 글의 카테고리는 Java의 기본이론이므로 단순하게만 보도록 하겠습니다!
현실과 빗대어 생각해보자.
숫자가 `1, 2, 3, 4`의 형태를 띠고 있으면 우리는 '수가 나열되어 있다.' 라고 하죠?
글자가 `ㅈ, ㅣ, ㄱ, ㅏ, ㅂ`의 형태를 띠고 있을 때, 올바른 글자로 '배열'해 보세요. 라고도 하죠?
올바르게 배열 한다면, '지갑'이 될 것입니다.
지갑에는 10원, 100원, 1000원, 10000원 등 많은 화폐나 돈이 들어가죠?
하지만 화폐의 범위는 수표가 아닌 이상 '5만원'으로 한정되어 있습니다.
그리고 지갑의 크기에 따라 지갑에 채울 수 있는 돈도 한정되어 있습니다.
실제 컴퓨터를 현실과 비교하여 생각해보자.
배열을 지갑이라고 생각한다면, 화폐의 범위가 '자료형의 크기'가 되고 지갑의 크기가 '배열의 크기'가 됩니다.
만약, 한국이 아니고 미국이었다고 해봅시다. 화폐의 범위는 최대 100$가 됩니다.
앞서, 자료형에서 설명했듯이 컴퓨터도 똑같이 어떤 자료형이냐에 따라서 화폐가 달라집니다.
추가적으로 지갑의 크기가 한정되어 있듯, 배열의 크기도 설정해주어야 합니다.
Java에서 배열을 '선언'하는 방법은 `자료형[] 배열명(변수명) = new 자료형[크기];` 입니다.
여기서 대괄호 '[]'가 지갑의 크기라고 생각하시면 됩니다.
// 5개의 숫자를 담을 수 있는 배열
int[] arr = new int[5];
// 5개의 문자열을 담을 수 있는 배열
String[] brr = new String[5];
여기서 new 연산자라고 하는 것이 사용이됩니다. 이것은 조금 CS지식을 필요로 하는데요.
우리는 자바에서 일반적으로 Stack 메모리를 사용합니다. - 컴퓨터 구조 및 운영체제 지식이 필요
하지만 String이라는 UserDefineDataType은 이전 챕터 UDDT에서 설명했지만 PDT 및 UDDT의 집합입니다.
배열 또한 Reference Data Type으로 하나의 UDDT 입니다. 배열은 연속된 공간에 순차적으로 자료형 크기를 갖게되는데 현재 코드를 읽은 시점에 이 크기만큼 메모리가 필요합니다.
그래서 heap 메모리라는 것을 사용해서 '동적'으로 현재 필요한 메모리만큼 적절하게 사용하는 것이 new 연산자입니다.
해당 내용을 스텝별로 진행하게 된다면 불편할 수 있어서 new는 좀 더 뒤에 다루는게 맞는 것 같습니다.
지갑에서 천 원을 꺼내고 싶은데 어떻게 꺼내지??
우리는 시각을 통해 지갑에서 천 원의 위치를 바로 파악할 수 있습니다.
예를 들어서 (5000원, 1000원, 10000원, 1000원) 이렇게 있을 경우,
5천 원과 만 원 사이의 천 원을 꺼내던가 만 원 옆에 있는 천 원을 꺼낼 수 있습니다.
이 때, 천 원은 두 번째, 네 번째에 존재하게 되는 것이죠. 이것을 배열에서는 ;index'라고 합니다.
배열도 마찬가지 입니다. int[] wallet = new int[4] 라는 배열을 선언하겠습니다.
[5000, 1000, 10000, 1000]라는 값이 있을 때 우리는 두 번째, 네 번째에 1000이라는 값이 있다는 것을 알 수 있습니다.
하지만 배열의 Index는 0번 째 부터 시작한다는 차이가 있습니다.
변수편에서 설명한 내용 중, 변수는 메모리 상의 위치를 가르키고 있다고 설명한 적이 있습니다. wallet의 위치가 1000번을 가르키고 있다면, int형은 4byte이므로, wallet이라는 배열의 각 index는 1000, 1004, 1008, 1012 을 가르키게 됩니다.
상대적으로 보면 1000번의 위치에서 0번 째, 1번 째, 2번 째, 3번 째에 위치해 있다는 것이죠.
우리는 이제 해당 Index를 가르키는 것을 '접근(Access)'라고 합니다.
// 배열의 선언
int[] arr = new int[4];
// 배열의 할당
int[] brr = {1, 2, 3, 4};
// 접근, 실행 결과 : 0, 1
System.out.println("arr[0] = " + arr[0] + ", brr[0] = " brr[0]);
// 접근 후 할당
arr[0] = 2;
brr[0] = 5;
// 실행 결과 : 2, 5
System.out.println("arr[0] = " + arr[0] + ", brr[0] = " brr[0]);
배열 정리 : https://www.notion.so/24jihwan/e710f65bdd964f848ea282dd10107c20
'JAVA > 기본 이론' 카테고리의 다른 글
8. 반복문 - for 문 (1) | 2024.02.10 |
---|---|
7. 다차원 배열 (Multi Dimensional Array) (1) | 2024.02.10 |
5. 연산자(Operator)와 연산 순위 (1) | 2024.02.10 |
3. 자료형(DataType) (0) | 2024.01.02 |
2. 변수(Variable)와 할당(Assign) (1) | 2024.01.02 |