배열 [Array]

devlsn96·2024년 7월 18일
0

java 언어 개념정리

목록 보기
6/27

1.배열이란 ?

변수를 그룹으로 묶는 형태의 한 종류로서 사물함같은 형태를 갖고 있다.

  • 하나의 배열안에는 같은 종류(데이터형)의 값들만 저장될 수 있다.

1-1. 배열을 만드는 방법

  • 배열의 선언
    데이터형[] 배열이름;
  • 배열의 생성 : 변수를 저장할 수 있는 사물합을 생성
    배열이름 = new 데이터형[크기];
  • 배열의 선언과 크기지정에 대한 일괄지정
    데이터형[] 배열이름 = new 데이터형[크기]
  • 배열의 모양
    생성된 배열은 각각의 칸에 값들이 저장되고, 각각의 칸은 0부터 일련번호가 지정된다

    배열의 인덱스는 일련번호를 의미한다.

1-2. 배열에 값을 저장하기

배열은 값을 저장할 수 있는 공간일 뿐, 그 자체가 값은 아니다.

  • 값이 대입되지 않은 경우 숫자는 0, boolean false가 자동 대입된다. 배열이름[인덱스번호] = 값;

1-3. 배열의 크기설정과 값 할당에 대한 일괄처리

  • 배열의 크기를 지정하면서 괄호{...} 안에 배열에 포함될 각 항목들을 콤마(,)로 나열하면서, 배열의 생성과 값의 할당을 일괄 처리할 수 있다. 이 때는 배열의 크기를 별도로 지정하지 않으며, new 데이터형[] 부분은 생략 가능하다.
    데이터형[] 배열이름 = new 데이터형[]{값1, 값2, ..};
    데이터형[] 배열이름 = {값1, 값2, ..};

1-4. 배열값 사용하기

  • 배열안에 저장되지 있는 값들을 사용하여 연산이나 출력등의 처리를 위해서는 배열에 부여된 인덱스값을 통해서 데이터에 접근해야한다.
    grade[0];, grade[1];, System.out.println(grade[2]);

1-5. 배열과 반복문

  • 배열의 특성
    0~ (배열의 크기 -1 )만큼의 인덱스값을 순차적으로 갖는다.
    int[] grade = new int[]{100, 100, 90};
  • 특성을 활용한 배열데이터 처리
    인덱스값 특성을 활용하면 반복문 안에서 배열의 값을 할당할 수 있다.
for (int i=0; i<3; i++){
	System.out.println(grade[i]);
}

1-6. 배열의 길이 (크기)

  • 배열의 길이를 얻기 위해서는 배열이름.length형식으로 접근한다.

1-7. 이차원 배열

  • 이차원 배열의 선언
    데이터형[][]배열이름;
  • 이차원배열의 크기할당
    배열이름 = new 데이터형[행][열];
  • 이차원 배열의 선언과 할당의 일괄처리
    데이터형[][] 배열이름 =new 데이터형 [행][열];
  • 이차원 배열의 선언 크기할당 대입에 대한 일괄처리
데이터형[][] 배열이름 = new 데이터형[][]{
	{1행0열, 1행1열, ....},
	{2행0열, 2행1열, ...},
	....
	{n행0열, n행n열, ...}
};

1-8. 이차원 배열에 대한 값의 대입방법

  • 행과 열에 대한 인덱스를 통해 값을 대입
    배열이름[행][열]= 값;

1-9. 이차원 배열의 길이

  • 이차원 배열의 길이는 행에 대한 측면열에 대한 측면을 나눠 계산한다.
    • 행의 길이 int row = grade.length;
    • 열의 길이 int cols = grade[행].length;

2. 객체배열

  • 일반 데이터 타입의 배열과 동일한 개념으로, 같은 클래스의 객체 여러 개를 그룹화 할 수 있다.
int[] data = new int[3];
Army[] data = new Army[3];
  • 각 경우에 대한 배열의 요소를 할당 처리하는데, 일반 데이터 형은 단순히 값을 대입하지만, 객체 배열은 new를 사용하여 객체를 할당해야 한다.

    일반 데이터형 배열의 경우
    data[0] = 1;, data[1] = 2;, data[2] = 3;
    객체배열의 경우
    data[0] = new Army();, data[1] = new Army();, data[2] = new Army();

3. 부모클래스 배열에 자식 클래스의 객체넣기

  • 배열의 생성이 부모 클래스(Unit)로 지정되었을 경우, 모든 자식 클래스(Army, Navy, AirForce)의 객체들은 그 배열에 포함될 수 있다.
// 먼저 객체배열을 생성하고,
Unit[] unit = new Unit[3];

// 배열의 요소 할당 과정에서 암묵적 형변환이 이루어진다.
unit[0] = new Army();
unit[0] = new Navy();
unit[0] = new AirForce();
  • 일괄 처리가 가능하다.
    • 서로 다른 객체를 부모 형태의 배열에 담게 되면, 반복문으로 일괄적으로 콘솔창에 출력처리가 가능하다.
    • 이때, 배열의 각 요소를 통해 사용하는 메서드가 Override 되어 있을 경우, 부모의 메서드가 아니라 자신이 재정의 기능을 뜻한다.
for(int i = 0; i <unit.length; i++ ){ unit[i].attack(); }

4. 객체배열의 활용

4-1. 원래기능으로 복귀하기

  • 배열의 각 요소가 확정한 기능을 사용하기 위해서는
    원래의 클래스형태로 명시적 형변환이 이뤄져야 한다.
  • 하지만 반복적으로 처리되는 과정에서
    몇 번째 요소가 어떤 클래스에서 최초 생성되었는지를 판단하기란 쉽지 않다.

4-2. instanceof 연산자의 사용

  • instanceof 연산자는 어떤 객체에 대한 출처를
    판단하여 boolean 형으로 결과를 반환한다.
if (unit[0] instanceof Army){
	Army temp = (Army)unit[0];
} else if (unit[i] instanceof Navy ){
	Navy temp = (Navy)unit[i];
} else if (unit[i] instanceof AirForce ){
	AirForce temp = (AirForce)unit[i];
}
profile
Quantum Jump to class for java….

0개의 댓글