배열
배열이란 연관된 데이터를 모아서 통으로 관리하기 위해 사용하는 데이터 타입이다.
변수가 하나의 데이터를 저장하기 위한 것이라면 배열은 여러 개의 데이터를 하나의 변수에 저장하기 위한 것이라고 할 수 있다.
배열의 선언과 초기화
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 |