[포스코x코딩온] 웹개발자 풀스택 과정 17주차 | Java 배열, ArrayList, 예외처리

구준희·2023년 10월 23일
0

[포스코x코딩온]교육

목록 보기
35/40
post-thumbnail
post-custom-banner

배열

배열이란?

  • 배열(array)은 같은 타입의 변수들로 이루어진 유한집합이다.
    배열을 구성하는 각각의 값을 요소(element)라고 하며, 배열에서의
    위치를 가리키는 숫자를 인덱스(index)라고 한다.
    자바에서 인덱스는 언제나 0부터 시작하며, 0을 포함한 양의 정수만을 가질 수 있다.

1차원 배열

//선언
1. 타입[] 배열이름;
2. 타입 배열이름[];

//생성
배열이름 = new 타입[배열길이];
타입[] 배열이름 = new 타입[배열길이];

//예제
int[] grade1 = new int[3]; // 길이가 3인 int형 배열의 선언 및 생성
int[] grade2 = new int[3]; // 길이가 3인 int형 배열의 선언 및 생성

grade1[0] = 85; // 인덱스를 이용한 배열의 초기화
grade1[1] = 65;
grade1[2] = 90;
grade2[0] = 85; // 배열의 길이보다 적은 수의 배열 요소만 초기화

for (int i = 0; i < grade1.length; i++) {
    System.out.print(grade1[i] + " "); // 인덱스를 이용한 배열로의 접근
}
for (int i = 0; i < grade2.length; i++) {
    System.out.print(grade2[i] + " "); // 인덱스를 이용한 배열로의 접근
}

//실행결과
85 65 90
85 0 0

1차원배열 초기화

자바에서는 변수와 마찬가지로 선언과 동시에 초기화가 가능하다

//문법
1. 타입[] 배열이름 = {배열요소1, 배열요소2, ...};
2. 타입[] 배열이름 = new 타입[]{배열요소1, 배열요소2, ...};

2차원 배열

2차원 배열이란 배열의 요소로 1차원 배열을 가지는 배열이다. 자바에서는 2차원 배열을 나타내는 타입을 따로 제공하지는 않고 있다. 대신에 1차원 배열의 배열요소로 또 다른 1차원 배열을 사용하여 2차원 배열을 나타낼 수 있다.

//문법
1. 타입[][] 배열이름;
2. 타입 배열이름[][];
3. 타입[] 배열이름[];

2차원배열 초기화

  • 1차원 배열과 마찬가지로 2차원 배열도 선언과 동시에 초기화할 수 있다.
타입 배열이름[행의길이][열의길이] = {
    {배열요소[0][0], 배열요소[0][1], ...},
    {배열요소[1][0], 배열요소[1][1], ...},
    {배열요소[2][0], 배열요소[2][1], ...},
    ...
};

//예제
int[][] arr = {
    {10, 20, 30},
    {40, 50, 60}
};

//결과
10 20 30
40 50 60

Arrays Method

1. copyOf

  • 특정길이 만큼 복사한 새 배열을 반환한다.
//사용방법
배열선언 = Arrays.copyOf(복사할배열, 범위);

//예제
int[] arr = {1,2,3,4,5};
int[] newArr = Arrays.copyOf(arr, 5);
System.out.println(Arrays.toString(newArr));

//결과
[1,2,3,4,5]

2. copyOfRange

  • 시작 인덱스부터 종료 인덱스 전까지의 부분을 복사한 새 배열을 반환한다.
//사용방법
배열선언 = Arrays.copyOfRange(복사할배열, 시작,)

//예제
int[] newArray2 = Arrays.copyOfRange(arr, 2, 5);
System.out.println(Arrays.toString(newArray2));

//결과
[3,4,5]

3. fill

  • 배열의 주어진 요소를 주어진 값으로 채운다.
//기본형
Arrays.fill(배열, 바꿀값);

//예제
arr = [1,2,3,4,5]
Arrays.fill(arr, 10);
System.out.println(Arrays.toString(arr));

//결과
[10,10,10,10,10]

//예제2
int[] arr2 = new int[5];
arr2[0] = 1;
arr2[1] = 2;
arr2[2] = 3;
Arrays.fill(arr2, 3, arr2.length, 100);
System.out.println(Arrays.toString(arr2));

//결과
[1,2,3,100,100]

ArrayList

ArrayList 클래스는 배열을 이용하기 때문에 인덱스를 이용해 배열 요소에 빠르게 접근이 가능하다. 하지만 배열은 크기를 변경할 수 없는 인스턴스이므로, 크기를 늘리기 위해서는 새로운 배열을 생성하고 기존의 요소들을 옮겨야 하는 복잡한 과정을 거치게 된다.
물론 이 과정은 자동으로 수행되지만, 요소의 추가 및 삭제 작업에 걸리는 시간이 매우 길어지게 되는 단점을 가진다.

생성방법

//기본 capacity는 10
1. ArrayList<String> a1 = new ArrayList<String>();
// 초기 capacity를 50으로 설정
2. ArrayList<String> a2 = new ArrayList<String>(50);
// 다른 컬렉션(a1)의 데이터를 초기값으로 설정
3. ArrayList<String> a3 = new ArrayList<String>(a1);

메소드

ArrayList<String> list = new ArrayList<>();
  • add(element) : ArrayList 맨 뒤에 element 추가
list.add("Google");
System.out.println(list);

//결과
["Google"]
  • add(index, element) : index 위치에 element 삽입
list.add(0, "Amazon");
System.out.println(list);

//결과
["Amazon","Google"]
  • addAll(ArrayList) : ArrayList 뒤에 ArrayList 추가
ArrayList<String> list2 = new ArrayList<>();
list2.add("Apple");
list2.add("Samsung");
list.addAll(list2);
System.out.println(list);

//결과
[Amazon, Google, Apple, Samsung]
  • size() : ArrayList의 길이 리턴
System.out.println(list.size());

//결과
4
  • `contains(params) : ArrayList가 params를 포함하고 있는지 여부
System.out.println(list.contains("Apple"));

//결과
true
  • get(index) : index에 해당하는 요소 리턴
System.out.println(list.get(0));

//결과
Amazon
  • set(index, element) : 특정한 위치에 있는 값을 교체
list.set(2,  "Hyundai");
System.out.println(list);

//결과
[Amazon, Google, Hyundai, Samsung] 
  • indexOf(params) : params와 같은 첫 번째 요소의 index 리턴, 없으면 -1리턴
System.out.println(list.indexOf("Google"));

//결과
1
  • remove(index) : index의 요소 삭제
System.out.println(list);

[Amazon, Google, Hyundai]
//결과
  • clear() : 모든 요소 삭제
list.clear();
System.out.println(list);

//결과
[]

예외처리(exception handling)

  • 자바에서는 프로그램이 실행되는 도중 발생하는 예외를 처리하기 위해 try / catch / finally 문을 사용할 수 있다.
try {
    예외를 처리하길 원하는 실행 코드;
} catch (e1) {
    e1 예외가 발생할 경우에 실행될 코드;
} catch (e2) {
    e2 예외가 발생할 경우에 실행될 코드;
}
...
finally {
    예외 발생 여부와 상관없이 무조건 실행될 코드;
}
  1. try : 기본적으로 맨 먼저 실행되는 코드로 여기에서 발생하는 예외는 catch 블록에서 처리된다.
  2. catch : try에서 발생한 예외코드나 예외 객체를 인수로 받아 그 처리를 담당한다.
  3. finally : try에서 예외가 발생하건 안 하건 맨 마지막에 무족너 실행된다.

예외 클래스

클래스설명
ArithmeticException어떤 수를 0으로 나눌때 발생
NullPointerExceptionNull 객체를 참조할 때 발생
ClassCastException적절치 못하게 클래스를 형 변환하는 경우 발생
NeagtiveArraySizeException배열의 크기가 음수 값인 경우
OutOfMemoryException사용 가능한 메모리가 없는 경우
NoClassDefFoundException원하는 클래스를 찾지 못하였을 경우
ArrayIndexOutOfBoundsException배열을 참조하는 인덱스가 잘못된 경우

예외처리 메서드

메서드설명
printStackTrace()예외 정보를 콘솔에 출력
getMessage()예외 메세지를 반환
getCause()예외 원인을 반환
getStackTrace()예외의 스택 트레이스를 배열로 반환
profile
꾸준히합니다.
post-custom-banner

0개의 댓글