KDT/Java

231227 Java

001cloudid 2023. 12. 27. 17:40
728x90

배열

자료를 순차적으로 관리하는 구조

학교에 학생이 100명이고 이들의 학번을 관리하기 위해서 학번 변수를 100개 선언해야한다면

int studentID1;

int studentID2;

... int studentID100;

매우 번거롭고 귀찮을 것이다.

이때 사용하는 자료형이 배열(array)d이다.

배열을 사용하면 자료형이 같은 자료 여러 개를 한 번에 관리할 수 있다.

 

배열 선언과 초기화

배열선언

자료형[] 배열이름 = new 자료형[개수];
또는
자료형 배열이름[] = new 자료형[개수];

배열을 사용하려면 먼저 배열을 선언해야한다.

변수와 마찬가지로 자료형을 함께 선언하며, 배열을 이루는 각각의 자료를 배열 요소라고 한다.

배열 요소는 자료형이 모두 같다.

저장하려는 자료의 성격에 맞게 자료형을 정하고 선언하려는 배열 요소 개수 만큼[] 안에 적는다.

new 예약어는 배열을 새로 만들라는 의미이다.

int[] studentID = new int[100]
int 형 요소가 100개인 배열 선언

 

배열 초기화

배열을 선언하면 각 요소의 값이 초기화된다.

배열 자료형에 따라 정수는 0, 실수는 0.0, 객체 배열은 null로 초기화된다.

배열이 초기화 요소의 개수만큼 생성되므로 []안의 개수를 생략
자료형[] 배열이름 = new 자료형[] {값1, 값2, ....}; → 개수는 생략
ex) int[] studentID = new int[]{100,101,102};


선언과 동시에 초기화할 때 new 자료형을 생략한 경우\
자료형[] 배열이름 = {값1, 값2,... }; → 자료형 요소가 n개인 배열 생성
ex) int[] studentID = {100,101,102};


하지만 배열의 자료형을 먼저 선언하고 초기화하는 경우에는 new 자료형[]를 생략할 수 없다.
ex) int[] studentID;
studentID = new int[] {101,102,103};

 

배열 사용하기

선언한 배열의 각 요소에 값을 넣을 때나 배열 요소에 있는 값을 가져올 때는 []를 사용한다.

studentID[0] = 10;

배열의 첫 번째 요소에 값을 10 저장

 

인덱스 연산자[]

[]는 배열을 처음 선언할 때 사용한 연산자이다. 배열 이름에 []를 사용하는 것을 인덱스 연산이라고 한다.

인덱스 연산자의 기능을 배열 요소가 저장된 메모리 위치를 찾아주는 역할이다.

변수 이름으로 변수가 저장된 메모리 위치를 찾는 것 처럼, 배열에서 [i]인덱스 연산을 가져와서 사용할 수 있다.

 

배열 순서는 0부터

배열 길이가 n이라고 하면 배열 순서는 0부터 n-1까지이다.

 

문자 저장 배열 만들기

public class Alphbet {

 

public static void main(String[] args) {

char[] abc = new char[26];

char ch = 'A';

 

for(int i = 0; i<abc.length; i++, ch++) {

abc[i] = ch;

System.out.println(abc[i]+" , "+(int)ch);

}

 

 

객체 배열 사용하기

참조 자료형 변수도 여러 개를 배열로 사용할 수 있다.

package arrary;

 

public class Book {

private String bookName;

private String author;

 

public Book() {} //디폴트 생성자

 

//책 이름과 저자 이름을 매개변수로 받는 생성자

public Book(String bookName, String author) {

this.bookName = bookName;

this.author = author;

}

 

public String getBookName() {

return bookName;

}

 

public void setBookName(String bookName) {

this.bookName = bookName;

}

 

public String getAuthor() {

return author;

}

 

public void setAuthor(String author) {

this.author = author;

}

 

public void show() {

System.out.println(bookName+ ", "+ author);

}

 

}

 

package arrary;

 

public class BookArray {

 

public static void main(String[] args) {

Book[] book = new Book[5]; //Book 클래스형으로 객체 배열 생성

 

//인스턴스 생성 후 배열에 저장

book[0] = new Book("수학의 정석", "홍성대");

book[1] = new Book("하늘과 바람과 별과 시", "윤동주");

book[2] = new Book("소나기", "황순원");

book[3] = new Book("홍루몽", "조설근");

book[4] = new Book("토지", "박경리");

 

//Book 인스턴스를 저장한 메모리 공간 주소

for(int i = 0; i < book.length; i++) {

System.out.println(book[i]);

}

 

//Book 인스턴스 멤버

for(int i = 0; i < book.length; i++) {

book[i].show();

}

 

 

}

 

}

 

배열 복사하기

기존 배열과 배열 길이가 같거나 더 긴 배열을 만들고 for문을 사용하여 각 요소값을 반복해서 복사하는 방법과

System.arraycopy()메소드를 사용하는 방법으로 배열을 복사할 수 있다.

System.arraycopy(src, srcPos, dest, destPos, length)

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

 

향상된 for문과 배열

for(변수 : 배열) {
반복 실행문;
}

배열의 처음에서 끝까지 모든 요소를 참조할 때 사용하면 편리한 반복문이다.

배열 요소 값을 순서대로 하나씩 가져와서 변수에 대입한다.

따로 초기화와 종료 조건이 없기 때문에 모든 배열의 시작 요소부터 끝 요소까지 실행한다.

package arrary;

 

public class EnhancedForLoop {

 

public static void main(String[] args) {

String[] sa = {"HTML", "CSS", "java", "DB", "Cloud"};

 

for(String study : sa) {

System.out.println(study);

}

 

}

 

}

 

출력값

HTML

CSS

java

DB

Cloud

 

다차원 배열

수학에서 배우는 행렬

자료형[][] 배열이름 = new 자료형[행개수][열개수]
ex) int [][] arr = new int[2][3]

 

ArrayList

기본 배열을 사용하려면 배열 길이를 정하고 시작해야한다. 만약 학교에 학생이 100명을 배열에 담았다고 가정해보자.

학생이 100명이 넘어간다면, 코드를 수정해야한다. 그 이유는 배열을 사용하는 중에는 배열 길이를 변경할 수 없기 때문이다. 또는 중간에 학생 한 명이 자퇴를 했다고하면 배열은 중간에 있는 요소를 비워 둘 수 없으므로 배열 요소 위치를 변경해야한다. 이러한 경우가 비일비재하다면? 수정하기 힘들고 복잡할 것이다.

 

자바는 객체 배열을 좀 더 쉽게 사용할 수 있도록 객체 배열 클래스 ArrayList를 제공한다.

ArrayList 클래스는 객체 배열을 관리할 수 있는 멤버 변수와 메소드를 제공하므로 편리하게 사용할 수 있다.

 

ArrayList 클래스의 주요 메소드

boolean add(E e) : 요소 하나를 배열에 추가한다. E는 요소의 자료형을 의미

int size() : 배열에 추가된 요소 전체 개수를 반환

E get(int index_ : 배열의 index 위치에 있는 요소 값을 반환

boolean isEmpty() : 배열이 비어있는지 확인

 

ArrayList<E> 배열이름 = new ArrayList<E>();
ex) ArrayList<Book> library = new ArrayList<Book>();

※ArrayList는 java.util 패키지에 구현되어 있는 클래스이므로 임포트해줘야함.

 

package array;

 

public class Book {

private String name;

private String author;

 

public Book(){}

 

public Book(String name, String author) {

this.name = name;

this.author = author;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public String getAuthor() {

return author;

}

 

public void setAuthor(String author) {

this.author = author;

}

 

public void show() {

System.out.println(name + ", " + author);

 

}

 

}

 

package array;

import java.util.*;

public class BookTest {

 

public static void main(String[] args) {

ArrayList<Book> book = new ArrayList<Book>();

 

book.add(new Book("소나기", "황순원"));

book.add(new Book("토지","박경리"));

 

for(int i = 0; i < book.size(); i++) {

Book b1 = book.get(i);

b1.show();

}

 

for(Book b1 : book) {

b1.show();

}

 

}

 

}

728x90

'KDT > Java' 카테고리의 다른 글

240103 Java  (0) 2024.01.03
231228 Java  (0) 2023.12.28
231221 Java  (0) 2023.12.21
231220 Java  (0) 2023.12.20
231218 Java  (0) 2023.12.18