<Java> 8. 자바의 배열

정지민·2023년 10월 13일

Java

목록 보기
7/12

배열 사용시 유의점

  • 반복적 사용 고려
  • 배열은 참조자료형이다!
    • 참조변수 선언 후 배열 객체 동적으로 생성해 할당해주어야함
    • 배열의 이름 = 참조값
  • 객체형 배열은 참조변수들의 집합이다
    • 배열 할당 후, 배열의 각 요소의 요소타입 해당하는 객체 할당 필요
    • 자동 객체 생성 x, 필요시 할당해야 함

1차원 배열 선언

  • 참조변수만 생성
  • 배열 객체 생성되지는 않음
    int[] list;

1차원 배열 생성

  • new 연산자로 배열 객체가 명시적으로 생성됨
1. list = new int[5];

2. double[] costs = new double [100]

3. boolean flags[];
   flags = new boolean[20];

4. String[] names = new String[10];

배열 요소의 선택

list[0] = 90;

배열의 첨자

  • 유효한 첨자의 범위 : 0 ~ (배열의 할당크기 -1)
  • 배열의 할당 크기
    int arrayLen = list.length;

기본 자료형 배열의 예

char[] ch;
ch = new char[4];
ch[0]-'J';
ch[1]-'a';
ch[2]-'v';
ch[3]-'a';

배열 선언과 동시에 초기화

int[] list = {10,20,30,40,50}; //아래와 동일
int[] list = new int[]{10,20,30,40,50}; //크기 지정 안해도 뒤에보고 알 수 있음

int[] integers = null 하면 안됨

객체(참조형) 배열

  • 객체들에 대한 참조 변수들을 배열 요소로 갖음
    • 배열의 요소타입이 참조자료형
    • 배열 각 요소 초기값 null
  • 배열 요소인 참조 변수가 가리키게 될 각 객체는 별도로 생성!!
    • (배열 객체만 만들지 말고, 각 요소 객체 생성!)

객체 배열의 생성

  1. 객체 배열에 대한 참조 변수 선언
    Circle[] circles;

  2. new 연산자로 객체 배열 할당
    (각 요소는 Circle 타입의 객체를 가리키는 참조변수)
    circles = new Circle[3];

  1. new 연산자와 생성자 호출로 각 요소(참조변수)가 가리키는 객체 할당 (중요)
circles[0] = new Circle(1);
circles[1] = new Circle(2);
circles[2] = new Circle(3);

객체형(참조형) 배열의 예1: Circle

Circle[] circles;

circles = new Circle[3]; //(참조변수)배열 만듦

circles[0] = new Circle(1); //요소 객체 만듦
circles[1] = new Circle(10);
circles[2] = new Circle();

객체형(참조형) 배열의 예1: String 객체 배열

String[] arr;
arr = new Strin[3];
arr[0] = "java" // new String("java"); 
arr[1] = "array" // new String("array");
arr[2] = "test" // new String("test");
// -> 암시적생성 / 명시적 생성

1차원 배열의 요소 접근 방법

for 루프

int i;
for (i=0;i<array.length; i++){
}

for each 루프

  • index 변수 따로 정의 안해도됨
String[] arr = {"정지민", "홍정란", "정석원"};
  
for(String s: arr) //  - arrr이 참조하는 배열요소 순차적으로 변수 s에 하나씩 전달
	System.out.println(s);

배열의 매개변수 전달, 반환

  • 전달
    • 배열의 참조변수, (유효크기) 를 넘김
    • 메서드 안에서 실인수 값 변경 가능
    • .length로 할당크기 접근 가능
  • 반환
    • 배열의 참조값 반환
    • 반환 자료형은 배열의 요소 타입과 일치해야 함

String 배열의 예

public class CircleArrayTest {
	static void initArray(Circle[] cs){
        for (int i=0;i<cs.length;i++)
        	cs[i]=new Circle();
}

public static void main(String[] args){
	Circle[] circles = new Circle[5]; //1차원 배열 만듦
    iniArray(circles); //객체 할당 함수
    
    for(Circle c: circles)
    	if (c !=null)
        	System.out.println(c.getRadius());
}
public class CircleArrayTest {
	static Circle[] initArray(int n){ //동적 할당된 배열은 사라지지 않음
    	Circle[] cs = new Circle[n]; //1차원 배열 만듦
        for (int i=0;i<n;i++)
        	cs[i]=new Circle();
        return cs; // 참조값 반환
}

public static void main(String[] args){
	Circle[] circles = iniArray(3); //객체 배열 생성, 요소값 할당 함수
    
    for(Circle c: circles)
    	if (c !=null)
        	System.out.println(c.getRadius());
}

고정적 길이의 2차원 배열

int[][] test1;
test1 = new int[2][3];

//test1.length ==2
//test[0].length ==3

가변적 길이의 2차원 배열

int[][] test2;
test2= new int[2][];

test2[0] = new int[2]; //꼭 해줘야함!!
test2[1] = new int[4];

//test2.length == 2 //그룹 개수
//test2[0].length == 2 //요소 개수
//test2[1].length == 4


2차원 객체 배열 예

String[][] test3;
test3 = new String[2][]; //참조변수

test2[0] = new String[2];
test2[1] = new String[3]; //참조변수

test3[0][0] = new String("hi");
//각각 객체에 대한 참조를 대입함으로써 각 배열 요소 초기화 필요!
// [] : 배열 생성
// () : 객체 생성

2차원 배열의 초기화

int[][] array = {{1,3,5},{2,4,6}};

2차원 배열 요소 접근

  • 중첩된 for루프 이용
int i,j;
for (i=0;i<array.length;i++){
	for (j=0;j<array[i].length; j++){
    	array[i][j]=new Array[1];
    }
}
  • array.length = 그룹의 개수
  • array[i].length = i번재 그룹의 요소 개수

0개의 댓글