1. 배열 자료형
- 배열(array) : 하나의 블록안에 여러 데이터들을 연속적으로 저장함으로써 데이터를 구조적으로 다룸
- 배열 요소(element) : 배열을 구성하는 각각의 값
- 인덱스(index) : 배열에서의 위치를 가리키는 숫자
1-1. 배열 선언 & 초기화
- []로 배열을 선언할때 미리 공간의 갯수(길이)를 지정 ⇒ 공간의 제약이 생김
- 배열의 타입(int)을 지정해 저장할 데이터의 자료형 명시
⇒ 인덱스(index) 번호를 통해 배열에 접근 가능
1-2. 배열 출력
- System.out.println() 으로 배열 변수 출력시 메모리에 있는 배열의 주소값(타입@주소) 반환
- 단, char 형 배열(문자)은 println() 으로 출력 가능 - 배열 요소 출력
- for 문을 이용해 배열 각 원소들을 순회하여 출력하도록 하드코딩
- 자바에서 제공하는 Arrays.toString() 메서드를 이용해 배열을 문자열 형식으로 만들어 출력 (java.util 패키지)
1-3. 배열 확장(열 복사)
- 배열은 한번 선언되고 나면 공간 자체를 직접 늘릴 수 없음 ⇒ 간접적인 방법으로 배열 확장
⇒ 따로 공간이 큰 배열을 새로 만들어 주고 기존의 배열의 내용을 새로 만든 배열에 복사
⇒ for문으로 순회해 직접 복사하도록 지정
⇒ 자바에서 제공하는 Arrays.copyOf() 메서드를 사용 - 비용이 많이 들기 때문에 처음부터 배열의 길이를 넉넉하게 잡아야 함
1-4. 배열 정렬
- Arrays.sort() 메서드 이용
⇒ 배열을 새로 반환하는 것이 아니라, 자기 자신 배열을 정렬
1-5. 배열 비교
- 두 개의 배열의 구성이 같은지 아닌지 비교
⇒ for문으로 순회하여 원소 비교
⇒ Arrays.equals() 메소드 이용
2. 다차원 배열
- 2차원 이상의 배열 ⇒ 배열 요소로 또 다른 배열을 가지는 배열
- 1차원 배열은 배열 요소로 '단일값'을 가지는 배열
2차원 배열은 배열 요소로 '1차원 배열'을 가지는 배열
3차원 배열은 배열 요소로 2차원 배열을 가지는 배열 - 메모리의 용량이 허용하는 한 차원 제한 X
2-1. 2차원 배열 생성
- 엑셀과 같은 테이블 형태의 데이터를 담기위해 사용하는 배열
⇒ 테이블 형태의 데이터는 행(row)과 열(column)로 구성
⇒ 행(row) : 1차원 배열
열(colums) : 2차원 배열 (행이 여러개 존재) - 대괄호 [행][열] 를 2번 써서 선언

2-2. 2차원 배열 출력
- 배열 요소 출력
- for 문을 이용해 배열 각 원소들을 순회하여 출력하도록 하드코딩
- 자바에서 제공하는 Arrays.deeptoString() 메서드를 이용 (java.util 패키지)
2-3. 2차원 배열 비교
- Arrays.deepEquals() 메소드 이용
2-4. 가변 배열
- 2차원 배열이 테이블 형태라고 해서 반드시 가로와 세로가 똑같은 정방 행렬일 필요 X
- 마지막 차수의 길이를 다르게 지정 가능
⇒ 각 요소로 들어가는 1차원 배열의 길이를 다르게 해도 2차원 배열 데이터를 생성하는데 문제 X
3. 객체 배열
- 객체 자체도 배열에 넣어 사용 가능 (객체 역시 하나의 자료형으로 취급되기 때문)
- 타입 배열 생성 → 배열 공간 안에 new 생성자로 객체 생성 및 할당 → 배열에 객체 적재
3-1. 객체 배열 복사
- 기본 타입의 배열 : Arrays.copyOf 나 Arrays.copyOfRange 메서드를 통하여 간단하게 배열 복사 가능
- 객체로 이루어진 배열 : 배열 자체는 복사가 되지만, 배열 내용물 객체는 참조 복사(주소 복사)
- 배열 내용물은 여전히 같은 객체 주소를 가리킴 → 객체도 복사 되었는 줄 알고 복사한 객체의 멤버를 변경하면 복사된 멤버에 객체도 변경되는 꼴 → 완전한 깊은 복사를 이행하기 위해서는 for문 사용
3-2. 객체 배열 정렬
Comparable 사용
- 같은 타입의 인스턴스 비교 : Comparable 인터페이스를 구현해서 compareTo() 메소드를 오버라이딩 정의, 사용
- 기본 타입, Boolean을 제외한 래퍼 클래스나 String, Time, Date와 같은 클래스의 인스턴스는 모두 정렬 가능
Comparator 사용
- Comparator 인터페이스 : Comparable 인터페이스와 같이 객체를 정렬하는 데 사용
- 익명 객체를 이용해 좀더 유기적으로 다양하게 속성을 받아 정렬 가능
📌 만일 나이순이 아닌 이름(문자열)순으로 정렬하려면 compare() 대신 compareTo() 메서드로 가능
여러 조건 비교 (comparing / thenComparing)
- 객체의 여러 속성을 이용하여 정렬 : Comparator의 comparing() 과 thenComparing() 을 이용해 체이닝하여 구현
- 객체의 속성을 가져올때 getter/setter 사용
'JAVA > 개별학습' 카테고리의 다른 글
[JAVA] UpCasting & DownCasting (0) | 2024.02.21 |
---|---|
[JAVA] 추상클래스 (0) | 2024.02.21 |
[JAVA] 타입변환 (0) | 2024.02.21 |
[JAVA] 자료형 (0) | 2024.02.21 |
[JAVA] 변수 (0) | 2024.02.21 |