다라다라V
article thumbnail
Published 2022. 10. 22. 01:46
[JAVA] 08. 배열 코딩언어/JAVA
728x90
반응형

비슷한 것들끼리 묶어두면 관리하기 편합니다.

일상 생활에서도 비슷한 것들끼리 묶어두면 유지 관리하기 쉽고, 필요할 때 내용을 찾기도 쉽습니다. 프로그래밍에서도 같은 자료형끼리 묶어서 관리하는 배열이 있습니다. 배열을 통해 각 내용들을 모으고 관련된 내용을 다루고 묶어서 관련된 처리를 할 수 있습니다.

자바에서의 배열을 다뤄보겠습니다. 기본 자료형과 참조 자료형의 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)로 표현됨

📚 배열 선언과 동시에 초기화

  • 배열 선언문에 중괄호를 이용하여 초기값을 할당
  • 초기값 개수와 동일한 크기의 배열이 생성
  • 각 요소들은 초기값으로 초기화 됨


📚 객체(참조형) 배열

  • 객체들에 대한 참조 변수들을 배열 요소로 가짐
  • 배열의 각 요소는 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);
}

📚 객체 배열의 생성

  1. 객체 배열에 대한 참조 변수를 선언
  2. new 연산자로 객체 배열을 할당
    *  각 요소(할당된 공간)은 각 타입의 객체를 가리키는 참조변수
  3. 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차원 배열의 묶음인 2차원 배열

  • 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
profile

다라다라V

@DaraDaraV

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!