본문 바로가기

JAVA/개별학습

[JAVA] 배열

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