배열은 자료의 구조 중 하나로, 동일한 타입의 데이터를 연속적으로 저장하여 하나의 변수 속에 묶어서 관리하는 자료 구조 입니다. 파이썬의 리스트라고 생각하시면 좋을 것 같아요.
배열의 자료는 기본 자료를 토대로 만드는 참조 자료입니다.
int [ ] ref = new int [5];
길이가 5개 짜리의 배열을 int 자료형으로 참조한다는 뜻이에요.
int [ ] -> int 형으로 이루어진 배열을 참조한다는 의미입니다. int 형 배열은 그 자체가 객체 입니다.
배열을 만들 때에는 칸수를 정해서 만들기 때문에 최초 선언한 값으로 고정됩니다.
예제를 보면 보다 더 쉽게 알 수 있습니다.
int [ ] ref = new int [5];
ref[0] = 7; // 값의 저장 : 첫 번째 요소
ref[1] = 8; // 값의 저장 : 두 번째 요소
ref[2] = 9; // 값의 저장 : 세 번째 요소
ref[3] = 10; // 값의 저장 : 네 번째 요소
ref[4] = 11; // 값의 저장 다섯 번째 요소
int num = ref[0] + ref[1] + ref[2] + ref[3] + ref[4] ; // 값의 참조
참조변수 int[ ] ref에 길이가 length가 5인 배열 인스턴스를 새롭게 생성합니다.
int [ ] ref =
7 | 8 | 9 | 10 | 11 |
각 값에 할당되는 공간, 배열에 인스턴스를 저장하는 것을 Box 인스턴스라고 합니다.
하단의 예시로 어떻게 사용되는지 확인해볼게요.
int[] ref1 = new int [3];
double[] ref2;
ref2 = new double[5];
System.out.println(ref1.length);
System.out.println(ref2.length);
int[] ref1 = new int [3];
int[] ref1 배열 객체는 int 3개의 배열을 받는 값을 받습니다.
이것은 선언과 동시에 배열 대상의 참조변수 값을 초기화를 한 것입니다.
double[] ref2;
ref2 = new double[5];
ref2 객체는 double 5개의 배열을 받는 값을 받습니다.
우선 double 의 배열은 ref2 라는 선언을 하고
그 뒤에 ref2 가 몇 개의 배열을 받는지 배열 대상의 참조변수 값을 초기화를 했습니다.
System.out.println(ref1.length);
System.out.println(ref2.length);
각 배열의 길이를 출력합니다.
배열은 그 자체로 객체에 해당하기 때문에 참조 값으로 저장이 될 수 있습니다.
public static void main(String[] args) {
int[] ar = {1, 2, 3, 4, 5, 6, 7}; // 배열 ar 의 초기화
int sum = sumOfAry(ar); // int 인수 sum 에게 배열의 참조 값 전달
....
}
static int sumOfAry(int[] ar) { // 배열 ar을 sumOfAry 에서 참조
int sum = 0;
for(int i = 0; i < ar.length; i++)
sum += ar[i];
return sum;
}
static int[] makeNewIntAry(int len) {
int[] ar = new int[len];
return ar;
}
이렇게 배열의 참조 값을 반환하는 것도 가능합니다.
이번에는 문자열의 배열을 반환해볼게요.
String[] words = new String[3];
words[0] = "아메리카노";
words[1] = "카페라떼";
words[2] = "자몽에이드";
System.out.println("1번째 요소는 : " + words[0]);
String[] words = new String[3]; 은 세 개의 배열을 가지고 제로 베이스로 시작하기 때문에
0, 1, 2 가 각 배열의 메모리 값이 됩니다.
이렇게 하나하나씩 지정해주면 코드가 길어지고 시간이 많이 들기 때문에 오류가 발생할 수도 있으므로
반복문을 활용해서 한 번에 배열에 넣어주는 것을 해볼게요.
아래의 예제를 참고해주세요.
String[] words = new String[3];
words[0] = "아메리카노";
words[1] = "카페라떼";
words[2] = "자몽에이드";
for(int i = 0; i < words.length; i++) {
System.out.printf("%d번째 요소는 : %s\n", i+1, words[i]);
for 반복문으로 i에는 초기값을 0 으로 주고, i가 words에 주어진 배열의 길이만큼(주어진 객체의 메모리 수만큼이겠죠. 우리가 각각의 메모리칸에 값을 넣어주어야 하니까요.) 1씩 커지며 반복하도록 반복문을 작성합니다.
그럼 배열의 길이만큼 반복되며 각 f 열의 자리에 알맞은 값이 들어가겠죠.
길이 정보를 반환하는 length 에 대해서 간단하게 짚고 가자면
System.out.println(words.length); 와
System.out.println(words[3].length(); <- 라고 하는 메소드가 있습니다.
System.out.println(words.length); 의 경우에는 word에 있는 배열의 길이를 반환하여 주는 것이고
System.out.println(words[3].length(); 의 경우에는 word 의 3행 속에 있는 자료의 길이를 반환해주는 것입니다.
이것은 이후에 2차원 배열의 자료 조회에서 사용됩니다.
하단의 예제는 배열의 디폴트 초기화에 대한 예제입니다.
package day15;
public class Board {
public static void main(String[] args) {
int[] ref = makeArray();
System.out.println(ref.length);
showArray(ref);
}
public static void showArray(int[] arr) {
for(int i = 0; i < arr.length; i++) {
System.out.printf("%d", arr[i]);
}
}
public static int[] makeArray() {
int[] ref = new int[5];
return ref;
}
}
'자바 > 자바 입문 공부일지' 카테고리의 다른 글
자바 기초 공부 일지 22. 2차원 배열, 2차원 배열 초기화 (0) | 2022.10.31 |
---|---|
자바 기초 공부 일지 21. enhanced for문 (for - each 문) (0) | 2022.10.31 |
자바 기초 공부 일지 19. 콘솔 입력(Scanner 클래스) (0) | 2022.10.28 |
자바 기초 공부 일지 18. toString 메소드, printf 메소드 (0) | 2022.10.28 |
자바 기초 공부 일지 17. String 클래스의 메소드, .concat(), equals, compareTo, compareToIgnoreCase, valueOf 함수 (수정중) (0) | 2022.10.27 |