[Java] 자바 프로그래밍 - 07 배열,ArrayList

Dev_Honey·2022년 12월 14일
0

JAVA

목록 보기
8/8
post-thumbnail

배열과 ArrayList

배열
동일한 데이터가 연속적, 순차적으로 있는 자료 구조(물리적,논리적 순차적 자료 구조)

  • 왜 써야할까???
    • 정수 20개를 이용해서 프로그래밍한다고 치자. 그러면 20개의 정수 타입의 변수를 선언해야한다. 하지만, 배열을 사용하면 동일한 자료형의 변수를 한꺼번에 순차적으로 관리를 할 수 있기때문에 관리가 용이하다.

      배열의 index는 0부터 시작!
  • 배열의 길이 n 이라고 하면 인덱스는 0 ~ n-1
  • 배열은 쓰기 전에 먼저 몇 개를 사용할 것인지(fixed length) 선언하고 사용!(미리 메모리가 할당)
  • 배열을 사용할 때 중간에 자료가 비면(empty) 안된다.
  • 배열에 원소를 추가하고 싶으면 새로운 배열을 만들어서 다시 복사해야한다. 동적으로 늘어나거나 줄어들지 않기에

배열 선언하기
자료형[ ] 배열이름 = new 자료형[개수];
int[ ] arr = new int[10];
자료형 배열이름[ ] = new 자료형[개수];
int arr[ ] = new int[10];
이렇게 선언을 하면, int는 4byte를 할당하니까, 배열의 길이가 10, 그래서 40byte의 메모리가 할당된다.

배열 초기화
배열은 선언과 동시에 초기화 할 수 있음
배열을 초기화 할 때는 배열의 개수를 명시하지 않음

  • int[ ] studentIDs = new int[ ]{101,102,103} //개수는 생략해야함
  • int[ ] studentIDs = new int[3]{101,102,103} //오류 발생
  • int[ ] studentIDs = {101,102,103} //int형 요소가 3개인 배열 생성
    만약 초기화 없이 선언한 경우, 정수는 0, 실수는 0.0, 객체배열은 null로 초기화 된다.

배열 사용하기

[ ] : 인덱스 혹은 첨자 연산자
배열의 위치를 지정하여 자료를 가져옴
모든 배열의 순서는 0부터 시작
n개 배열은 0부터 n-1 위치까지 자료가 존재
ex) int[ ] num = new int[ ]{1,2,3,4,5,6,7,8,9,10};

배열의 길이와 유효한 요소 값
배열의 길이의 속성 : length
자료가 있는 요소만 출력 하려면 크기에 대한 저장을 따로 해야 함
(아래 예제에서 전체 길이로 곱하기를 하면 값은 0.0이 되어 버림)

public class ArrayTest2{
	public static void main(String[] args) {
    
    double[] data = new double[5];
    
    data[0] = 10.0; // 첫 번째 요소에 값 10.0 대입
    data[1] = 20.0; // 두 번째 요소에 값 20.0 대입
    data[2] = 30.0; // 세 번째 요소에 값 30.0 대입
    
    for(int i=0; i < data.length; i++) {
    	System.out.println(data[i]);
    }
    
    }

}

double 자료형의 배열이 만들어지는데 , 0,1,2 는 데이터가 있는데 3,4 인덱스는 데이터가 없으므로 0.0으로 초기화 되어있다. 그래서 출력을하면, 10.0,20.0,30.0,0.0,0.0 이 출력이되는데, 10.0,20.0,30.0만 출력을 하려면 data.length를 for문에 쓰지말고 <3을 쓰면 된다.

이렇게 for문 반복수를 설정해주면된다.

package array;

public class ArrayTest2 {

	public static void main(String[] args) {
		double[] data = new double[5];
		int size = 0;

		data[0] = 10.0;
		size++; // 첫 번째 요소에 값 10.0 대입 size는 하나씩 증가
		data[1] = 20.0;
		size++;// 두 번째 요소에 값 20.0 대입
		data[2] = 30.0;
		size++;// 세 번째 요소에 값 30.0 대입

		double total = 1;
		// length로 사용하면 0.0이나옴..
		for (int i = 0; i < size; i++) {
			System.out.println(data[i]);
			total *= data[i];
		}

		System.out.println("total=" + total);
	}

}

문자 배열 만들기

package array;

public class ArrayTest3 {

	public static void main(String[] args) {

		char[] alphabets = new char[26];
        //길이가 26인 배열

		char ch = 'A'; // 65
												//i도 증가하지만 ch도 반복마다 증가시킴!
		for (int i = 0; i < alphabets.length; i++, ch++) {

			alphabets[i] = ch;
			System.out.println(alphabets[i]);
		}
		
	}

}


이렇게 문자배열도 for문을 통해서 출력되는 것을 볼 수 있다.

객체 배열 만들기

  • 참조 자료형을 선언하는 객체 배열
  • 배열만 생성 한 경우 요소는 null로 초기화
  • 각 요소를 new를 활용하여 생성하여 저장
public class BookArray {
	public static void main(String[] args){
    	Book[] library = new Book[5];
        
        for(int i=0; i<library.length; i++){
        	System.out.println(library[i]);
        }
    }
}

배열의 복사
System.arraycopy(src,srcPos,des,desPos,length);

매개변수설명
src복사할 배열 이름
srcPos복사할 배열의 첫 번째 위치
dest복사해서 붙여 넣을 대상 배열 이름
destPos복사해서 대상 배열에 붙여 넣기를 시작할 첫 번째 위치
lengthsrc에서 dest로 자료를 복사할 요소 개수

객체 배열 복사
System.arraycopy()를 통해서 복사를 하게되면, 객체 자체의 값을 복사하는 것이 아니라 주소 값이 복사되게 된다. 그래서 만약, 같은 주소를 가진 객체의 값이 바뀌게 되면, 같은 주소를 가진 속성들은 똑같이 변하게 된다.


참조 및 출처

https://www.inflearn.com Do it! 자바 프로그래밍 입문 with 은종쌤

profile
자습서 같은 공부 블로그 만들기!

0개의 댓글