자바 배열 (5장)

jungnoeun·2021년 9월 4일
0

java

목록 보기
4/22

배열

  • 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것이다.



선언방법과 선언 예

  1. 타입[] 변수이름;
int[] score;
String[] name;
  1. 타입 변수이름[];
int score[];
String name[];




배열 생성

타입[] 변수이름;
변수이름 = new 타입[길이];

int[] score; //1. 배열을 선언(배열을 다루기 위한 참조변수 선언)
score = new int[5]; //2. 배열을 생성(실제 저장공간을 생성)

1. int[] score;

  • int형 배열 참조변수 score을 선언한다. 데이터를 저장할 수 있는 공간은 아직 마련되지 않았다.

2. score = new int[5];

  • 연산자 new에 의해서 메모리의 빈 공간에 5개의 int형 데이터를 저장할 수 있는 공간이 마련된다.

초기화

  • 그리고 각 배열 요소는 자동적으로 int의 기본값(default)인 0으로 초기화된다.
  • 마지막으로 대입연산자'='에 의해 배열의 주소가 int형 배열 참조변수 score에 저장된다.




배열의 길이

  • 인덱스(index)의 범위는 0부터 '배열길이-1'까지
  • 배열의 길이는 int범위의 양의 정수(0도 포함)이어야 한다.
int[] arr = new int[0]; //길이가 0인 배열도 생성이 가능하다!!

배열이름.length

  • 배열이름.length를 통해서 배열의 길이를 알 수 있다.




배열의 초기화

  • 배열은 생성과 동시에 기본값으로 초기화되지만 원하는 값으로 초기화하려면 for문이나 직접지정해줘야 했다.
  • 하지만 자바에서는 간단히 초기화할 수 있는 방법을 제공한다.
int[] score = new int[]{50,60,70,80,90}; //배열의 생성과 초기화를 동시에 
int[] score = {50,60,70,80,90}; //new int[]를 생략할 수 있다.
  • 하지만 생성과 초기화를 동시에 하지 않을때 new int[]를 생략할 수 없다.
int[] score;
score = new int[]{50,60,70,80,90}; //OK
score = {50,60,70,80,90}; //ERROR. new int[]를 생략할 수 없다.
  • 길이가 0인 배열도 생성가능하다.
int[] score = new int[0]; //길이가 0인 배열
int[] score = new int[]{}; //길이가 0인 배열
int[] score = {}; //길이가 0인 배열. new int[]가 생략됨.




배열의 출력

  • 배열에 저장된 값을 출력할 때는 초기화할때와 같이 for문을 사용할 수 있다.
int[] iArr = {100,95,80,70,60};
for(int i=0; i<iArr.length; i++) {
	System.out.println(iArr[i]);
}
  • 하지만 더 간단한 방법은 Arrays.toString(배열이름) 메서드를 사용하는 것이다.
int[] iArr = {100,95,80,70,60};
System.out.println(Arrays.toString(iArr));
  • 예외로는 char배열은 println메서드로 출력하면 각 요소가 구분자없이 그대로 출력되는데, 이것은 println메서드가 char배열에서만 이렇게 동작하도록 되어있기 때문이다.
char[] chArr = {'a','b','c','d'};
System.out.println(chArr);  //abcd가 출력이 된다.




배열의 복사

  • for문을 사용하는 방법도 있지만 System클래스의 arraycopy를 사용하면 보다 간단하고 빠르게 배열을 복사할 수 있다.
  • arraycopy는 범위의 값들을 한번에 통째로 복사한다.
  • 그래서 배열의 복사는 for문보다 arraycopy를 사용하는 것이 효율적이다.

for문을 이용한 복사

for(int i=0;i<num.length;i++){
	newNum[i] = num[i];
}

arraycopy을 이용한 복사

//num[0]에서 newNum[0]으로 num.length개의 데이터를 복사.
System.arraycopy( num, 0, newNum, 0, num.length );








String 배열

선언방법

  • String 배열의 참조형변수의 기본값은 null이므로 각 요소의 값은 null로 초기화된다.
String[] name = new String[3]; //3개의 문자열을 담을 수 있는 배열을 생성한다.

초기화

  • 배열 하나하나 초기화해줄 수 있지만 괄호{}를 이용해 간단히 초기화할 수 있다.
String[] name = new String[]{"Kim","Park","Yi"};
String[] name = {"Kim","Park","Yi"}; //new String[]을 생략할 수 있다.




char배열과 String클래스

  • String클래스는 char배열에 기능(메서드)를 추가한 것이다.

    String클래스의 주요 메서드
    char charAt(int index)
    : 문자열에서 해당위치(index)에 있는 문자열을 반환한다.
    int length()
    : 문자열의 길이를 반환한다.
    String substring(int form,int to)
    : 문자열에서 해당범위(from~to)에 있는 문자열을 반환한다. (to는 범위에 포함되지 않음)
    boolean equals(Object obj)
    : 문자열의 내용이 obj와 같은지 확인한다. 같으면 결과는 true, 다르면 false가 된다.
    char[] toCharArray()
    : 문자열을 문자배열(char[])로 변환해서 반환한다.

char배열과 String클래스의 변환

char[] chArr = {'A','B','C'}; 
String str = new String(chArr); //char배열 -> String
char[] tmp = str.toCharArray(); //String -> char배열








다차원 배열

2차원 배열의 선언과 index

  1. 타입[][] 변수이름;
int [][] score;
  1. 타입 변수이름[][];
int score[][];
  1. 타입[] 변수이름[];
int[] score[];
  1. 예시
int[][] score = new int[4][3]; //4행3열의 2차원 배열을 생성한다.




다차원배열의 향상된 for문

for(int[] tmp : score) {  //score의 각 요소(1차원배열 주소)를 tmp에 저장
	for(int i : tmp) { //tmp는 1차원 배열을 가리키는 참조변수
    	sum += i;
    }
}

가변배열

  • 자바에서는 2차원이상의 배열을 배열의 배열의 형태로 처리하여 더 자유로운 형태의 배열을 구성할 수 있다.
  • 그래서 아래와 같이 행마다 다른 길이의 배열을 생성하는 것이 가능하다.
int[][] score = new int[5][] //두번째 차원의 길이는 지정하지 않는다.
score[0] = new int[3];
score[1] = new int[4];
score[2] = new int[2];
score[3] = new int[1];
score[4] = new int[3];
profile
개발자

0개의 댓글