본문 바로가기

프로그래밍/Java

Java_배열, 객체 배열

배열

배열이란 연관된 데이터를 모아서 통으로 관리하기 위해 사용하는 데이터 타입이다.

변수가 하나의 데이터를 저장하기 위한 것이라면 배열은 여러 개의 데이터를 하나의 변수에 저장하기 위한 것이라고 할 수 있다.

 

배열의 선언과 초기화

int[] arr1 = new int[10];

int[] arr2 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

→ 배열은 선언과 동시에 자료형에 따라 초기화된다. (정수는 0, 실수는 0.0, 객체는 null)

→ arr2처럼 필요에 따라 초기값을 지정할 수 있다.

 

 

- 배열 예제

Book 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package ch01;
 
public class Book {
 
    private int totalPage;
    private String title;
    private String author;
 
    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }
 
    public Book(int totalPage, String title, String author) {
        this(title, author);
        this.totalPage = totalPage;
    }
    
    public Book() {
        
    }
 
    public int getTotalPage() {
        return this.totalPage;
    }
    
    public String getTitle() {
        return this.title;
    }
    
    public String getAuthor() {
        return this.author;
    }
    
    
    public void showInfo() {
        System.out.println(">>> 책정보 <<<");
        System.out.println("제목 : "+title);
        System.out.println("저자 : "+author);
    }
}
cs

 

BookMainTest1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package ch01;
 
public class BookMainTest1 {
 
    // main 함수
    public static void main(String[] args) {
 
        // 연관된 하나의 데이터를 통으로 관리하고 싶다면 - 배열 (자료구조)
        Book[] books = new Book[10]; // 배열 선언 (메모리 공간 만들어 두기)
 
        books[0= new Book("플러터UI실전""김근호");
        books[1= new Book("무궁화 꽃이 피었습니다.""김진명");
        books[2= new Book("흐르는 강물처럼""파울로코엘료");
        books[3= new Book("리딩으로 리드하라""이지성");
        books[4= new Book("사피엔스""유발하라리");
        books[9= new Book("홍길동전""허균");
 
        System.out.println(books[0].getTitle());
        System.out.println(books[4].getAuthor());
 
        System.out.println("=====================");
 
        // books.length --> 배열의 길이(10)
        for (int i = 0; i < books.length; i++) {
            // i--> 0, 1, 2, 3, 4
            if (books[i] != null) { // 방어적 코드 작성
                System.out.println(books[i].getTitle());
            } else {
                break;
            }
        }
        
    } // end of main
 
// end of class
 
결과 화면
플러터UI실전
유발하라리
=====================
플러터UI실전
무궁화 꽃이 피었습니다.
흐르는 강물처럼
리딩으로 리드하라
사피엔스
cs

→ 생성한 배열 객체에 값을 할당하고 for 문과 if 문을 이용하여 저장한 값을 출력하는 예제이다.

배열의 길이가 10이고 저장한 값은 6개이므로 if(books[i] != null) 을 사용하여 NullPointerException이 발생하지 않게 방어적 코드를 작성하여 출력하였다.

 

MyBookStore 메인테스트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package ch01;
 
import java.util.Scanner;
 
/*
 * @author Teach
 * 북 객체를 관리하는 프로그램
 * C R U D ->구글링 정의 확인 
 */
 
public class MyBookStore {
 
    // main 함수
    public static void main(String[] args) {
 
        Scanner scn = new Scanner(System.in);
        // 배열은 먼저 배열의 길이를 지정해주어야 한다.
        Book[] books = new Book[100];
        boolean flag = true;
        int lastIndexNumber = 5;
 
        final String SAVE = "1";
        final String SEARCH_ALL = "2";
        final String SEARCH_BY_TITLE = "3";
        final String DELETE_ALL = "4";
        final String END = "0";
 
        // 실행에 흐름 만들어보기
        while (flag) {
            System.out.println("** 메뉴 선택 **");
            System.out.println("1. 저장 2. 전체조회 3. 선택조회 4. 전체삭제 0. 종료");
            String selectedNumber = scn.nextLine();
 
            if (selectedNumber.equals(SAVE)) {
                // 저장
                lastIndexNumber = save(scn, books, lastIndexNumber);
 
            } else if (selectedNumber.equals(SEARCH_ALL)) {
                // 전체 조회
                readAll(books);
 
            } else if (selectedNumber.equals(SEARCH_BY_TITLE)) {
                // 선택 조회
                readByTitle(scn, books);
 
            } else if (selectedNumber.equals(DELETE_ALL)) {
                // 전체 삭제
                deleteAll(books);
 
            } else if (selectedNumber.equals(END)) {
                // 종료
                System.out.println(">종료하기<");
 
                flag = false;
            } else {
                System.out.println("잘못된 입력 값입니다. \n 다시 선택해주세요.");
            }
        }
 
    } // end of main
 
    // 저장하기 기능
    public static int save(Scanner scn, Book[] books, int lastIndexNumber) {
        System.out.println(">저장하기<");
        System.out.println("책 제목을 입력하세요.\n");
        String bookTitle = scn.nextLine();
        System.out.println("책 저자 이름을 입력하세요.\n");
        String bookAuthor = scn.nextLine();
 
        books[lastIndexNumber] = new Book(bookTitle, bookAuthor);
        lastIndexNumber++;
        System.out.println(bookTitle + "책을 저장했습니다.");
        return lastIndexNumber;
    }
 
    // 전체 조회하기 기능
    public static void readAll(Book[] books) {
        System.out.println(">전체 조회하기<");
        for (int i = 0; i < books.length; i++) {
            // 타이틀, 이름
            if (books[i] != null) {
                System.out.println(books[i].getTitle() + ", " + books[i].getAuthor());
            }
        }
        System.out.println();
    }
 
    // 선택 조회하기 기능
    public static void readByTitle(Scanner scn, Book[] books) {
        System.out.println(">선택 조회하기<");
        System.out.println(">>책 제목을 입력해주세요<<");
        String bookTitle = scn.nextLine();
 
        boolean isFind = false;
        for (int i = 0; i < books.length; i++) {
            // 타이틀, 이름
            if (books[i] != null) {
                if (books[i].getTitle().equals(bookTitle)) {
                    // 찾았다
                    System.out.println(books[i].getTitle() + ", " + books[i].getAuthor());
                    isFind = true;
                    break;
                }
            }
        }
 
        if (isFind == false) {
            System.out.println("없는 책입니다.");
        }
    }
 
    // 전체 삭제하는 기능
    public static void deleteAll(Book[] books) {
        System.out.println(">전체 삭제하기<");
 
        for (int i = 0; i < books.length; i++) {
            // 타이틀, 이름
            if (books[i] != null) {
                books[i] = null;
            }
        }
    }
 
// end of class
cs

→ 스캐너로 사용자의 입력을 받아 각 기능을 수행하도록 구사하였다.

 

Book[] 객체 배열을 생성하고, boolean flag를 선언하여 종료 기능을 구사하도록 하고, int lastIndexNumber = 0로 선언하여 책 저장기능을 구사하도록 하였다.

 

final 상수를 선언하여 1번은 저장 기능, 2번은 전체조회 기능, 3번은 선택조회 기능, 4번은 전체삭제 기능, 0번은 종료 기능을 저장하였다.

 

→ 0번 종료 기능 : while문을 선언하여 조건식에 flag를 넣고 flag가 false가 되면 종료가 되도록 구사하였다.

 

if문을 사용하여 사용자의 입력값에 따라 기능을 수행하는 메서드를 호출하도록 하였다.

 

→ 1번 저장 기능 : 스캐너를 통해 책 제목과 저자 이름을 입력받고 new Book(bookTitle, bookAuthor)을 이용해 메모리에 올려주어 books[lastIndexNumber]에 저장하고 책을 더 저장할 수 있도록 하기 위해 lastIndexNumber++;을 한 다음 lastIndexNumber를 return 해주었다.

 

→ 2번 전체 조회 기능 : for문과 if문을 이용하여 books[i] 가 null이 아니면 저장된 책을 전부 출력하도록 하였다. (참조형의 초기화 값은 null이기 != null을 사용해야 함.)

 

3번 선택 조회 기능 : 스캐너를 통해 책 제목을 입력하면 제목이 bookTitle에 저장이 되고 for문과 if문을 통해 비어있지 않은 배열 중 .equals(bookTitle)을 이용하면 입력한 책 제목과 저장된 책 제목이 같으면 책 제목과 책 저자 이름을 출력하도록 하고 찾지 못하면 "없는 책입니다."로 출력하도록 하였다.

 

4번 전체 삭제 기능 : for문과 if문을 이용하여 비어있지 않은 배열을 books[i] = null; 을 사용하여 값을 삭제하면 된다.

 

 

<결과 화면>

'프로그래밍 > Java' 카테고리의 다른 글

Java_인터페이스  (0) 2023.02.14
Java_상속과 다형성  (0) 2023.02.14
Java_static변수와 메서드  (0) 2023.02.12
Java_this 사용법  (0) 2023.02.10
Java_접근 제어 지시자와 캡슐화  (0) 2023.02.09