728x90
반응형
일상 생활에서도 비슷한 것들끼리 묶어두면 유지 관리하기 쉽고, 필요할 때 내용을 찾기도 쉽습니다. 프로그래밍에서도 같은 자료형끼리 묶어서 관리하는 배열이 있습니다. 배열을 통해 각 내용들을 모으고 관련된 내용을 다루고 묶어서 관련된 처리를 할 수 있습니다.
자바에서의 배열을 다뤄보겠습니다. 기본 자료형과 참조 자료형의 1차원 배열은 어떻게 다룬지 비교해보고, 여러 배열들이 모여 만들어진 다차원 배열에 대해 배워겠습니다. 더불어 각 배열의 요소에 접근하는 방법이나 함수에 배열을 매개변수로 삼을 때 차이점도 배워보겠습니다.
📌 기본 자료형의 1차원 배열
📚 JAVA 배열 사용시 유의점
- 배열은 반복문으로 반복적 사용을 고려하여 설계해야함
- 배열 + 반복문을 세트로 생각할 것
- 자바의 배열은 참조 자료형
* 참조 변수 선언 후 배열 객첼르 동적으로 생성에 할당함 - 객체형 배열은 참조 변수들의 집합
* 배열 할당 후 배열의 각 요소 타입에 해당하는 객체 할당이 필요함
* C언어 포인터의 집합이라고 생각하면 좋음
📚 1차원 배열의 선언
- 배열 선언만으로는 실제 배열 객체가 생성되지는 않고 단지 참조변수만 생성됨
* elementType[ ] arrayName;
* elementType arrayName[ ];
elementType: 배열의 각 요소 타입 / arrayName: 배열로 선언되는 변수 이름
1차원 배열은 두 가지 방법으로 선언이 가능합니다. 그러나 배열임을 명확히 밝히기 위하여 자료형 뒤에 [ ]를 붙이는 것이 더 선호됩니다.
📚 1차원 배열의 생성
📃 1차원 배열의 생성
- new 연산자의 사용으로 배열 객체가 명시적으로 생성
- 배열의 각 요소들을 위한 메모리가 할당
- JVM이 메모리 주소를 계산하는데 필요한 정보를 배열 이름에 저장함 (메모리주소가 아닌 id(참조값))
arrayName = new elementType[size];
size : 배열 요소 개수, 배열의 할당 크기
📃 배열 선언의 예
- new 연산자를 통해 동적 메모리에 할당
- 특정 메모리 영역이 아닌 JVM이 메모리 주소 계산에 필요한 정보를 담는 참조값에 넣음
- int형 자료 5개를 담을 수 있음
- 배열의 이름인 list는 배열의 시작주소를 가리킴
double[] costs = new double[100]; // 기본자료형(double) 배열
boolean flags[];
flags = new boolean[20]; //선언 후 배열 사용 가능
String[] names = new String[10]; // Stirng 클래스로 만드는 배열
📚 배열 요소의 선택
- 배열의 특정요소를 식별하는 과정이 배열의 요소 선택(selection)
- 동적 할당된 값을 선택
arrayName[ indexNumber ]
배열의 선택식(selection expression)을 통해 일반 단순 변수처럼 조작 가능
📚 배열의 첨자
- 배열의 요소는 첨자(index)를 사용하여 참조
- 0부터 (배열의 할당크기 - 1)까지 유효한 배열의 첨자 범위로 지정됨
- 이를 벗어난 값을 사용하면 프로그램 수행 시 ArrayIndexOutOfBoundsException 예외 발생
arrayName.length
- 배열의 할당 크기를 반환 받을 수 있음
- 배열 역시 객체이기 때문에 length가 제공됨
- 배열의 유효 범위는 (0 ~ 배열.length - 1)로 표현됨
📚 배열 선언과 동시에 초기화
- 배열 선언문에 중괄호를 이용하여 초기값을 할당
- 초기값 개수와 동일한 크기의 배열이 생성
- 각 요소들은 초기값으로 초기화 됨
📌 참조 자료형의 1차원 배열
📚 객체(참조형) 배열
- 객체들에 대한 참조 변수들을 배열 요소로 가짐
- 배열의 각 요소는 null을 초기값으로 가짐
- 배열 요소인 참조 변수가 가리키게 될 각 객체들은 반드시 별도로 생성해야함
Circle[] circles = new Circle[5]; // 각 요소는 아직 null 값을 가짐
// 각 요소별로 별도의 객체를 생성해야함
Circles[0] = new Circle();
Circles[1] = new Circle(2);
Circles[2] = new Circle(3);
Circles[3] = new Circle(4);
Circles[4] = new Circle(5);
// 반복문을 통해 각 요소에 접근
for(int i = 0; i < circles.length; i++) {
system.out.println(circles[i].radius);
}
📚 객체 배열의 생성
- 객체 배열에 대한 참조 변수를 선언
- new 연산자로 객체 배열을 할당
* 각 요소(할당된 공간)은 각 타입의 객체를 가리키는 참조변수 - new 연산자와 적절한 생성자 호출로 각 요소(참조변수)가 가리키는 객체를 할당
Circle[] circles; // 1단계
circles = new Circle[5]; // 2단계
circles[0] = new Circle(); // 3단계
📚 객체(참조형) 배열의 예1: Circle
- 기본 자료형 배열은 객체 요소에 값을 지정했지만, 참조 자료형 배열은 참조 변수가 객체를 가리킴
- 각 요소는 객체를 가리키는 참조 변수일뿐 실제 객체는 아님
📚 객체 배열의 예2: String
- 암시적 생성이나 명시적 생성과 관계없이 내부 구조는 문자열 객체를 참조값으로 갖는 배열이 생성됨
- 각 요소에 문자열 객체를 생성해서 넣을 수 있음
- 참조자료형 배열이기 때문에 배열 요소 자체에 값이 들어가는 것은 아님
📚 1차원 배열의 요소 접근 방법
- 배열의 모든 요소에 순차적으로 접근하기 위해서는 for 반복문을 사용함
- 인덱스 변수의 변화 범위로 접근할 요소들의 유효한 첨자값을 나태님
- 인덱스 변수의 값 = 접근할 배열의 첨자 번호
int i;
for (i = 0; i < array.length; i++) {
array[i] = ~~;
}
📚 for each 루프
for each (Type var) in {array}
- 배열의 첫 요소부터 끝 요소까지 순차 적으로 접근시 사용하는 JDK5 이후 반복문
- array가 참조하는 배열 요소들을 순차적으로 변수 var에 전달하면서 처리
- index 변수를 따로 지정할 필요가 없음
- 단 특정 요소에 대해 별도의 작업을 할 수는 없음
String[] arr = {"철수", "영희", "민수"};
for(Stirng s : arr)
System.out.println(s);
📌 배열과 함수
📚 배열의 매개변수 전달
📃 배열을 메서드의 실인수로 사용할 때 사용
- 배열의 참조 변수를 넘김, 배열 객체의 참조값이 매개 변수로 전달됨
- 배열의 이름은 배열 객체의 참조값
- 배열이 인수여도 매개변수로 값이 복사되는 것이 아닌 참조값이 복사되는 것
- 배열의 유효크기를 .length를 이용해서 배열과 함께 전달
📃 배열을 매개변수로 받을 때
- 인수와 같은 요소 타입의 참조 변수 선언
- 매개 변수를 통해 실인수에 참조 가능
- 매서드 안에서 실인수 값을 변견할 수 있음
- 배열의 유효크기를 .length를 이용해서 배열의 할당 크기 접근 가능
📚 메서드의 배열 반환
- 배열의 참조값을 반환하는 것은 각 요소값을 복사해 반환하는 것은 아님
- 각 요소의 실인수 영역에 접근하는 것
- 메서드의 반환 자료형은 반환하고자 하는 배열의 요소 타입과 일치해야함
📌 다차원 배열
📚 다차원 배열(Multidimenstional Arrays)
- 배열 요소 자체가 또 다른 배열인 경우를 다차원 배열이라고 함
- n차원 배열은 n-1차원 배열이 모인 것
- n차원 배열의 각 요소를 참조하기 위하여 n개의 첨자가 필요함
- 1차원 배열은 단순 변수를 한 덩어리로 묶은 것
- 1차원 배열에 대한 참조 변수를 묶은 그룹이 2차원 배열
📚 고정적/가변적 길이의 2차원 배열의 예시
📃 고정적 길이의 2차원 배열 예
- [ ] [ ] 두 개로 참조 변수를 선언함
- [ 1차원 배열의 개수 ] [ 배열의 요소 개수 ]로 크기를 정함, 참조 변수에 배열 객체를 할당함
- 각 배열의 요소는 2개의 인덱스 번호로 접근 가능함
📃 가변적 길이의 2차원 배열 예
- 배열의 요소 개수를 지정하지 않은 경우 가변적으로 배열이 만들어짐
- 두 배열의 참조값을 저장할 배열만 만들고 각 참조 변수가 가리키는 배열은 생성되지 않은 것
- 이름으로 접근하여 일차원 배열을 반드시 할당해야 값이 지정됨
📚 2차원 객체 배열 예
- 참조자료형으로 만들어진 배열이므로 가변적임
- 각 요소는 String 타입의 객체를 의미하는 것이 아닌 참조 변수의 묶음 중 한 칸을 의미
📚 이차원 배열의 초기화
- 일차원 배열의 초기화와 마찬가지로 초기화 목록을 사용하여 이차원 배열도 선언함
- 배열 선언과 동시에 초기화가 가능함
int[][] array = { {1, 3, 5}, {2, 4, 6} };
📚 2차원 배열의 요소 접근 방법
- C언어와 마찬가지로 중첩된 for 반복문을 통해 각 요소에 접근할 수 있음
int i, j;
for (i = 0; i < array.length; i++) {
for (j = 0; j < array[i].length; j++) {
statements to be repeated : array[i][j]
}
}
- array.length = 1차원 배열의 개수
- array[i].length = i번째 그룹의 요소 개수
반응형
'코딩언어 > JAVA' 카테고리의 다른 글
[JAVA] 10. 상속과 다형성 (0) | 2022.10.30 |
---|---|
[JAVA] 09. 클래스 상속 (0) | 2022.10.24 |
[JAVA] 07-2 자바 기본 API (0) | 2022.10.20 |
[JAVA] 07-1 자바의 패키지와 모듈 (0) | 2022.10.18 |
[JAVA] 06. 캡슐화와 정보 은닉 (2) | 2022.10.14 |