배열(Array)
int a = 1;
char num = 'one'; 와 같이 변수는 하나의 값만 저장할 수 있다.
저장해야 할 값이 적으면 위와 같이 선언을 해도 큰 문제는 없지만 저장해야 할 값이 많아질수록 많은 변수가 필요하고, 변수에 값을 저장하는데 많은 시간이 들기 때문에 매우 비효율적이다.
이런 문제를 해결하기위해 배열을 사용하면 된다.
배열은 연속된 공간에 값들을 나열시키고, 값들에 대해 인덱스(Index)를 부여해 놓은 자료구조이다.
각 데이터를 인덱스와 1대1 대응시키며, 데이터가 메모리 상에 연속적으로 저장된다.
인덱스는 대괄호 []와 같이 사용하여 배열 항목의 값을 저장하거나 읽을 때 사용된다.
예시로, 10개의 값을 배열로 선언해 보겠다.
int[] age = { 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 }
이렇게 배열을 사용하여 변수를 선언하면 편하고 간결하게 작성할 수 있다.
중괄호 {}는 저장된 값들을 항목으로 가지는 배열을 힙에 생성하고, 번지를 리턴한다.
배열 변수는 리턴된 번지를 저장하기 때문에 참조가 이루어질 수 있는 것이다.
배열은 타입[] 변수; 또는 타입 변수[] ;로 선언할 수 있다.
배열 변수는 참조 변수이며, 배열도 객체이기 때문에 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 주소를 저장한다.
만약 참조할 배열이 없으면 배열 변수도 null값으로 초기화할 수 있다.
만약 배열 변수가 null 값을 가지고 있는 상태에서 값을 읽거나 저장하게 되면 NullPointerException이 발생한다.
(NullPointerException : 선언만 하고 아무것도 참조하지 않는 null 상태인 변수에서 내용을 참조하려 할 때 발생하는 상황)
배열의 특징으로는 같은 타입의 값만 관리하며, 배열의 길이는 늘리거나 줄일 수 없다.
그리고, 배열 변수로 값을 저장한 후에 다른 값으로 넣어주고 싶은 경우에는 new를 붙여주면 된다.
int[] num = null;
num = new int[] {1, 2, 3, 4, 5};
ArrayList
ArrayList는 자바의 List 인터페이스를 상속받은 클래스 중 하나이다.
배열은 크기가 고정적이기 때문에 크기 유동적으로 사용하기에는 비교적 불편하지만,
ArrayList는 크기가 가변적으로 변하기 때문에 사용하기에 더 편리하고 많이 쓰인다.
ArrayList를 사용하려면 추가해줘야 하는 구문이 있으며 아래와 같이 생성할 수 있다.
import java.util.ArrayList; // ArrayList를 사용하기 위해 추가해야 하는 구문
ArrayList<Integer> integers1 = new ArrayList<Integer>(); // 타입 지정
ArrayList<Integer> integers2 = new ArrayList<>(); // 타입 생략
기본적으로 ArrayList를 생성할 때, 두 번째 방법과 같은 new ArrayList<>()와 같이 타입을 생략해서 생성한다.
ArrayList 속성
변수.add(Index) = 해당 Index의 값 설정
변수.set(Index, 변경 값) = 해당 Index의 값 변경
변수.remove(Index) = 해당 Index 제거 ( 해당 값이 사라지면 뒤에 있던 값들이 빈 공간을 채워주기 위해 당겨온다.)
변수.clear() = 모든 값 제거
import java.util.ArrayList;
public class Main{
public static void main(String[] args) {
ArrayList<Integer> num = new ArrayList<>();
num.add(1);
num.add(2);
num.add(3);
num.add(4);
num.set(1,4); // 2번째 요소인 num[1]값을 4로 변경
num.remove(3); // 4번째 요소인 num[3] 제거
System.out.println(num);
}
}
'Java & Spring' 카테고리의 다른 글
[JAVA] - 문자열 String 타입 (0) | 2023.04.09 |
---|---|
[JAVA] - JAVA의 구조 및 동작 원리 (0) | 2023.04.09 |
[JAVA] - StringBuilder (0) | 2023.01.29 |
[JAVA] - Hash, HashTable (≒ HashMap) (0) | 2023.01.07 |
[JAVA] - 연결 리스트(LinkedList) (0) | 2023.01.07 |