⭐JAVA 배열⭐

p_chan.log·2022년 8월 9일
0

JAVA

목록 보기
9/17

🔴배열

💠배열이란?

  • 변수를 그룹으로 묶은 형태의 한 종류로서, 사물함 같은 형태를 갖고 있다.
  • 하나의 배열안에는 같은 종류(데이터 형)의 값들만 저장될 수 있다.

배열의 종류

  1. 1차배열

    • 앞에서 살펴본 배열처럼 한 줄만 존재하는 사물함 같이 구성된 배열
    • 행에 대한 개념이 없고, 열에 대한 개념만 존재하기 때문에 "배열이름.length"는 몇 칸인지를
      알아보는 기능이 된다.
  2. 2차배열

    • 1차 배열의 각 칸에 새로운 배열을 넣는 형태
    • 1차 배열의 각 칸은 행이되고, 각각의 칸에 추가된 개별적인 배열이 열의 개념이 되어
      "행렬"을 구성하게 된다.

1.배열만드는 방법

💠1차배열

1-1.배열의 선언

데이터형[] 배열이름;

1-2.배열의 생성 - 변수를 저장할 수있는 사물함을 생성

배열이름 = new 데이터형[크기];

1-3.배열 생성의 예

int[] grade; // 여러개의 int형 변수를 저장할 수 있는 배열의 선언
grade = new int[3]; // 배열의 칸을 3칸으로 할당

1-4.배열 선언과 크기 지정에 대한 일괄처리

데이터형[] 배열이름 = new 데이터형[3];


1-5.배열의 모양

생성된 배열은 사물함과 같이 각각의 칸에 값들이 저장되고, 각각의 칸은 0부터 일련번호가 지정된다.
(일련번호 = 배열의 인덱스)

1-6.데이터 할당

-> 배열은 값을 저장할 수 잇는 공간일 뿐, 그 자체가 값은 아니다.
-> 값이 대입되지 않은 경우, 숫자형은 0, boolean형은 false가 자동으로 대입된다.
-> 배열안에 값을 저장하기 위해서는 인덱스 번호를 사용하여 각각의 칸에 직접값을
대입해야 한다.

배열이름[인덱스] = 값;
int[] grade = new int[3];
grade[0] = 75;
grade[1] = 85;
grade[2] = 91;

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

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

데이터형[] 배열이름 = new 데이터형[]{값1, 값2, ..., 값n};
데이터형[] 배열이름 = {값1, 값2, ..., 값n};

1-8.배열 값 사용하기

-> 배열안에 저장되어 있는 값들을 사용하여 연산이나 출력등의 처리를 위해서는
배열에 부여된 인덱스 값을 통해서 데이터에 접근해야 한다.

System.out.println( grade[0] ); // 75
System.out.println( grade[1] ); // 82
System.out.println( grade[2] ); // 91

1-9.배열과 반복문

-> 배열의 특성 : 0 ~ (배열의 크기-1)만큼의 인덱스 값을 순차적으로 갖는다.
-> 특성을 활용한 배열 데이터 처리 : 일정 범위를 갖고 순차적으로 증가하는 인덱스 값의 특성을 활용하면
반복문 안에서 배열의 값을 할당하거나, 할당된 값을 읽어들이는 처리가 가능하다.

int[] grade = new int[]{100, 100};

for( int i=0; i<2; i++ ){
System.out.println( grade[i] );
}

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

-> 배열의 길이를 얻기 위해서는 "배열이름.length" 형식으로 접근한다.
-> grade라는 배열을 생성한 경우 배열의 길이

int size = grade.length;

-> 배열의 길이값은 주로 반복문의 조건식에서 반복의 범위를 지정하기 위하여 사용된다.

int[] grade = new int[]{100, 100, 90, 95, 85};

for( int i=0; i<grade.length; i++ ){
System.out.println( grade[i] );
}

💠2차배열

2-1. 2차원 배열의 선언

  • 데이터 타입의 이름 뒤에 대괄호 "[]"를 행과 열에 대하여 각각 지정한다

데이터형[][] 배열이름;

2-2. 2차원 배열의 크기 할당

  • 행과 열에 대한 크기를 명시한다

배열이름 = new 데이터형[행][열];

2-3. 2차원 배열의 선언과 할당의 일괄처리

데이터형[][] 배열이름 = new 데이터형[행][열];

2-4. 2차원 배열의 선언, 크기 할당, 값의 대입에 대한 일괄처리

  • 2차원 배열의 경우 블록 괄호 '{}' 를 2중으로 겹쳐서 2차원 배열을 표현한다.
    - 행과 열의 구분에는 콤마(,)가 사용된다.
    - 컴파일러가 블록괄호 '{}'의 요소를 파악하면 행,열의 크기가 산출될 수 있으므로 배열의
    크기 설정을 위한 [][]에는 배열의 크기를 명시하지 않는다.

2-5. 2차원 배열에 대한 값의 대입 방법

  • 행,열에 대한 인덱스를 통하여 값을 대입한다.

배열이름[행][열] = 값;

  • 일괄지정
    int[][] grade = new int[][]{
    { 75,82,91 },{ 88, 64, 50 },{ 100, 100, 90 }
    };

2-6. 2차원 배열의 길이

  • 2차원 배열의 길이는 행에 대한 측면과 열에 대한 측면을 나누어서 생각해야 한다.
  • 행의 길이
    1차 배열의 길이는 2차 배열에서는 행의 크기로 조회된다.
    int rows = grade.length;
  • 열의 길이
    열의 길이는 각 행에 대해여 개별적으로 조회해야 한다
    int cols = grade[행].length;

💠3. 객체배열

3-1. 객체배열

  • 일반 데이터 타입의 배열과 동일한 개념으로, 같은 클래스의 객체 여러
    개를 그룹화 할 수 있다.
  • 일반 데이터형의 배열 생성과 객체 배열 생성 비교
일반 데이터 형 배열의 경우
int[] data = new int[3];
객체 배열의 경우
Army[] data = new Army[3];	

3-2. 각 경우에 대한 배열의 요소 할당 처리

  • 일반 데이터형은 단순히 값을 대입하지만, 객체 배열은 'new'를
    사용해서 객체를 할당해야 한다.
일반 데이터 형 배열의 경우
data[0] = 1;
data[2] = 2;
data[3] = 3;
객체 배열의 경우
data[0] = new Army();
data[1] = new Army();
data[2] = new Army();

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

  • 배열의 생성이 부모 클래스로 지정되었을 경우, 모든 자식 클래스의
    객체들은 그 배열에 포함될 수 있다.
Unit[] unit = new Unit[3];
// 배열의 요소 할당 과정에서 암묵적 형변환이 이루어 진다.
unit[0] = new Army();
unit[1] = new Navy();
unit[2] = new AirForce();

3-4. 객체 배열의 활용

  • 일괄처리가 가능
    -> 서로 다른 객체를 부모 형태의 배열에 담게 되면, 반복문으로
    일괄처리가 가능하다.
    -> 이 때 배열의 각 요소를 통해 사용하는 메서드가 Override되어
    있을 경우, 부모의 메서드가 아니라 자신이 재정의한 기능을 뜻한다.
for( int i = 0; i<unit.length; i++ ){
	unit[i].attack();
}

  • 원래의 기능으로 복귀하기
    -> 배열의 각 요소가 확장한 기능을 사용하기 위해서는
    원래의 클래스 형태로 명시적 형변환이 이루어 져야 한다.
    -> 하지만 반복적으로 처리되는 과정에서 몇 번째 요소가 어떤 클래스에서
    최초 생성 되었는지를 판단하기란 쉽지 않다.
  • instanceof 연산자
    -> instanceof 연산자는 어떤 객체에 대한 출처를 판단하여
    boolean 형으로 결과를 반환한다
if( unit[0] instanceof Army ){
	Army temp = (Army)unit[0];
}

profile
개발자 박찬의 노트

0개의 댓글