배열
앞서 배웠듯이 하나의 변수에는 하나의 값만 들어갈 수 있다.
만약 int 자료형에 1, 2, 3, 4, 5를 담고 싶다면 int를 다른 변수명으로 5번 선언하여 값을 집어넣어야했다.
그런데 이런 경우 배열을 사용하면 간단하게 초기화가 가능하다.
배열이란 같은 자료형의 변수를 한 묶음으로 다룰 수 있게 해주는 것으로 저장된 값마다 인덱스 번호가 부여된다.
여기서 인덱스는 zero-based index를 말하는 것으로 사람은 보통 몇 번째를 셀 때에 1번째, 2번째, ... 이런식으로
1부터 셈을 하지만 컴퓨터는 0부터 계산을 한다.
그러니까 우리가 일반적으로 아는 1번째는 컴퓨터에게 0번째이다.
따라서 배열은 인덱스 번호 0부터 시작하여 설정이 된다.
배열의 선언은 자료형[] 배열명; 혹은 자료형 배열명[];으로 하며
할당은 자료형[] 배열명 = new 자료형[배열크기]; 혹은 자료형 배열명[] = new 자료형[배열크기];로 한다.
자료형과 다르게 할당이라는 과정이 추가가 되는데 그 이유는
배열은 레퍼런스 변수(참조 변수)이기 때문에 메모리의 Heap영역에 할당되기 때문이다.
이 때 배열 공간의 주소를 저장하는데 이 배열 공간의 주소를 사용해서 인덱스를 참조하는 방법으로 값을 계산한다.
이 과정은 추후 포스팅할 객체에서 다시 다루도록 하겠다.
배열도 자료형과 마찬가지로 초기화를 하는데 총 3가지 방법이 있다.
첫 번째로 인덱스를 이용한 초기화 방법은 배열의 길이만큼 하나하나 값을 입력해주는 방법이다.
두 번째로는 for문을 이용한 초기화다. 이 방법은 배열의 인덱스가 증가할때 해당하는 값이 규칙적이면 이용 가능하다.
length는 배열의 길이를 알고자 할때 사용되는 함수로 문자열의 길이를 반환하는 length()와 혼동하지 않도록 한다.
마지막으로 선언과 동시에 초기화 하는 방법이다. 인덱스를 이용한 초기화 방법보다 훨씬 효율적인 방법이다.
넣은 값의 갯수가 곧 배열의 길이가 된다.
배열은 2가지의 복사 방법이 있는데 각자의 방법이 결과가 크게 다르다.
얕은 복사는 가장 많이 사용하는 복사로 하나의 객체를 두 변수가 참조하는 것을 말한다.
아까 Heap메모리에 할당이 될 때 주소값이 생성된다고 했었다.
해당 주소값만 공유하면 배열명은 다르더라도 같은 Heap메모리 영역에 할당된 값을 공유하게 된다.
두 변수는 완전히 동일한 객체를 참조하는 것이다.
깊은 복사는 얕은 복사와 다르게 아예 새로운 별개의 객체를 생성해서 기존 배열의 값만 복사하는 것으로
복사 후 두 변수는 독립적인 객체를 참조하게 된다.
따라서 이 경우는 두 개의 주소값이 다르고 복사 뒤엔 서로에게 관여하지 않는다.
깊은 복사는 System.arraycopy, Arrays.copyOf, arr.clone();, for문을 이용한 방법 등 여러 방법이 있으며
얕은 복사에 비해 사용빈도가 적다.
'프로그래밍 > Java' 카테고리의 다른 글
[Java] 7. 상속 (0) | 2023.02.21 |
---|---|
[Java] 6. 객체 (0) | 2023.02.21 |
[Java] 4. 제어문 (0) | 2023.02.21 |
[Java] 3. 연산자 (0) | 2023.02.19 |
[Java] 2. 변수 (0) | 2023.02.19 |