최원종의 개발 블로그

Array(배열) 본문

Java/Java 객체지향

Array(배열)

chl6698 2026. 2. 27. 14:46

자바에서 자료구조란 데이터를 효율적으로 저장하고 관리, 처리하기 위한 조직화된 형식

데이터를 체계적으로 정리하여 검색,삽입,삭제,정렬 등의 작업을 빠르고 효과적으로 수행할 수 있도록 도움

 

배열(array)은 자바에서 자료구조에 포함

배열은 가장 기본적이고 단순한 자료구조로, 동일한 데이터 타입의 요소들을 연속적으로 저장하는 구조

 

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

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


배열 선언과 초기화

 

-배열 선언

int[] arr1 = new int[10];
// int arr2[] = new int[10];

배열

 

-ArrayTest1

package com.array;

public class ArrayTest1 {

    public static void main(String[] args) {

        // 배열이란? - 연관된 데이터 타입을 한번에 모아서 통으로 관리하기 위해 사용 할 수 있다.

        // 배열을 선언하는 문법
        // 규칙 1. - 배열은 반드시 몇 개의 데이터가 들어갈 지 크기를 지정해 주어야한다.
        int[] numbers1 = new int[3]; // 4바이트 상자 3개 확보
        int[] numbers2;
        numbers2 = new int[5];

        // 값을 직접 넣어 보자.
        numbers1[0] = 80;
        numbers1[1] = 90;
        numbers1[2] = 100;
        // numbers1 --> [][][]
        // numbers1[3] = 110;  [][][] [110]

        //int[] grades = new int[] {1,2,3}; // 배열 선언과 동시에 초기화 -> 배열에 길이가 3이 된다
        int[] grades2 = {1, 2, 3}; // 축약해서 사용 가능


        // 문제 1
        // 5개의 크기를 가지는 double 타입은 배열을 선언하시오
        // 단 값은 초기화 하지 마세요
        double[] dArray1 = new double[5];

        // 문제 2. 값을 0번째 ~ 3 인덱스 까지 값을 초기화 하세요
        dArray1[0] = 1.1;
        dArray1[1] = 2.1;
        dArray1[2] = 3.1;
        dArray1[3] = 3.1;
        System.out.println(dArray1[4]);

        // 문제 3
        // 3개의 길이는 가지는 String 타입에 배열을 선언해 보세요
        String[] sArray = new String[3];
        sArray[0] = "안녕";
        sArray[1] = "반가워";
        sArray[2] = "그래";
        System.out.println(sArray[0]);
        System.out.println(sArray[1]);
        System.out.println(sArray[2]);

    } // end of main

}

 

-ArrayTest2

package com.array;

public class ArrayTest2 {
    public static void main(String[] args) {
        char[] alphabet = new char[26];

        alphabet[0] = 'A';
        System.out.println(alphabet[0]);
        //인코딩
        //문자 --> 컴퓨터 --> 숫자(정수값)(문자표)--바꾸는 과정을 인코딩
        System.out.println((int) alphabet[0]);

        //반복문을 사용해서 alphabet[0] ->A, alphabet[1] -> B 담길 수 있도록 값을 초기화

        for (int i = 0; i < alphabet.length; i++) {
            alphabet[i] = (char) ('A' + i);
        }
        System.out.println((int) alphabet[0]);
    }
}




 

-ArrayTest3

package com.array;

public class ArrayTest3 {
    public static void main(String[] args) {

        String[] stringArray = new String[40];
        stringArray[0] = "가";
        stringArray[1] = "나";
        stringArray[2] = "다";

        for (int i = 0; i < stringArray.length; i++){
            System.out.println(stringArray[i]);
        }

//        System.out.println(stringArray[0]);
//        System.out.println(stringArray[1]);
//        System.out.println(stringArray[2]);
//        System.out.println(stringArray[3]);

        //System.out.println(stringArray.length); //length는 배열의 길이 출력
    }
}




 

-ArrayTest4

package com.array;

import java.util.Arrays;
import java.util.Random;

public class ArrayTest4 {
    public static void main(String[] args) {


        //난수 하나를 발생시켜주는 도구 준비
        Random random = new Random();

        //배열은 - 연관된 데이터 타입을 통으로 하나의 변수에 보관할 수 있게 해준다.
        //[][][][][][]
        //int n1 = random.nextInt(45) + 1;
        int[] intBox = new int[6];
        for (int i = 0; i < intBox.length; i++) {
            intBox[i] = random.nextInt(45) + 1;
        }
        //자바 개발자들이 미리 만들어 둔 정렬기능
        Arrays.sort(intBox);

        //반복문으로 수정
        for (int i = 0; i < intBox.length; i++) {
            System.out.println(intBox[i] + "\t");
        }
    }

}

 

-Book

package com.array;

public class Book {

    private String title;
    private int totalPage;
    private String author;

    public Book(String title, int totalPage, String author) {
        this.title = title;
        this.totalPage = totalPage;
        this.author = author;
    }

    public String getTitle() {
        return title;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public String getAuthor() {
        return author;
    }

    public void showInfo() {
        System.out.println(">> 책 정보 <<");
        System.out.println("제목 : " + title + "," + "저자 :" + author);
    }
}

 

 

-BookTest

package com.array;

public class BookTest {
    public static void main(String[] args) {
        Book[] books = new Book[10]; //메모리만 선언 객체 선언이 아님
        books[0] = new Book("플러터UI실전", 100, "김근호");
        books[1] = new Book("무궁화 꽃이 피었습니다", 100, "김진명");
        books[2] = new Book("흐르는 강물처럼", 100, "파울로코엘료");
        books[3] = new Book("리딩으로리드하라", 100, "이지성");
        books[9] = new Book("사피엔스", 100, "유발하라리");

//        System.out.println(books[2].getTitle());
//        System.out.println(books[2].getTotalPage());
//        System.out.println(books[2].getAuthor());

        for (int i = 0; i < books.length; i++) {
            //방어적 코드 작성
            if (books[i] != null) {
                System.out.println(books[i].getTitle());
            }
        }
        //NullPointerException --> 딱 2가지 이유로 발생됨
        //1. 객체를 생성하지 않았다
        //2. 주소값이 지정되지 않는다
        System.out.println("프로그램 정상 실행 종료");

        //배열은 보통
    }//end of main

    //문제. 배열안에 있는 모든 책 제목을 반복문을 통해서 출력하시오.

}//end of class

 

심화 과제 코드

-MyBookStore

package com.tenco.array;

import java.util.Scanner;

/**
 * chl6698@naver.com/최원종
 * 모든 프로그래밍에 기본은 C(Create) R(Read) U(Update) D(Delete)이다
 *
 */

public class MyBookStore {

    //현재 저장된 실제 데이터의 개수를 추적하는 공유 변수
    static int LAST_INDEX_NUMBER = 0;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //100개의 Book 객체를 담을 수 있는 메모리 공간(Heap)확보
        Book[] books = new Book[100]; //n -1크기 (99)

        //샘플 데이터 초기화
        books[0] = new Book("플러터UI실전", "김근호");
        books[1] = new Book("무궁화 꽃이 피었습니다", "김진명");
        books[2] = new Book("흐르는 강물처럼", "파울로코엘료");
        books[3] = new Book("리딩으로리드하라", "이지성");
        books[4] = new Book("사피엔스", "유발하라리");

        //샘플 데이터가 5개이므로 인덱스 관리 변수 (동기화)
        LAST_INDEX_NUMBER = 5;

        //메뉴 선택을 위한 상수 선언(가독성 향상)
        final String SAVE = "1";
        final String SEARCH_ALL = "2";
        final String SEARCH_BY_TITLE = "3";
        final String DELITE = "4";
        final String END = "5";

        while (true) {
            System.out.println("\n** 메뉴 선택 **");
            System.out.println("1.저장 2.전체조회 3.선택조회 4.삭제 5.프로그램 종료");

            //엔터키(개행문자)까지 읽어서 버퍼를 깨끗하게 비워줌
            String selectedNumber = sc.nextLine();

            //문자열 비교는 equals사용
            if (selectedNumber.equals(SAVE)) {
                save(books, sc);
            } else if (selectedNumber.equals(SEARCH_ALL)) {
                readAll(books);
//                System.out.println("------[전체 조회하기]------");
//                for (int i = 0; i < books.length; i++) {
//                    //null 체크를 하지 않으면 NullPointerException이 발생할 수 있음
//                    if (books[i] != null) {
//                        System.out.println((i + 1) + "." + books[i].getTitle() + " - " + books[i].getAuthor());
//                    }
//               }
            } else if (selectedNumber.equals(SEARCH_BY_TITLE)) {
                readByTitle(sc, books);

            } else if (selectedNumber.equals(DELITE)) {
                deleteAll(books);

            } else if (selectedNumber.equals(END)) {
                System.out.println(">>프로그램을 종료합니다<<");
                break; //while문 종료
            } else {
                System.out.println(" >>잘못된 선택입니다. 다시 입력해 주세요<<");
            }
        }//end of while

        System.out.println("정상적인 시스템 종료");
    }//end of main

    /**
     * 저장기능 (Create)
     */
    public static void save(Book[] books, Scanner sc) {
        //키보드로 값 받아서 변수에 저장
        //1. 책에 대한제목
        //2책에 저자
        //3.new Book(...,...)
        //4. 배열에 저장시켜 주어야 함
        //5. 방어적 코드( 배열에 크기 100개 - 100개이상 책 객체를 저장시킬 수 없다)

        System.out.println("------[도서 저장하기]------");
        //저장 전 공간 확인
        if (LAST_INDEX_NUMBER >= books.length) {
            System.out.println("저장 공간이 가득 찼습니다");
            return;
        }
        System.out.print("책 제목 입력 : ");
        String title = sc.next();
        System.out.print("책 저자 입력 : ");
        String author = sc.next();

        for (int i = 0; i < books.length; i++) {
            if (books[i] == null) {
                //저장 시 앞뒤 공백 제거해서 저장
                books[i] = new Book(title.trim(), author.trim());
                LAST_INDEX_NUMBER++; //데이터 개수 증가
                System.out.println(title + " 도서가 성공적으로 저장되었습니다.");
                break;
            }
        }

    }

    /**
     * 전체 조회 기능(Read)
     */
    public static void readAll(Book[] books) {
        System.out.println("------[전체 조회하기]------");
        for (int i = 0; i < books.length; i++) {
            //null 체크를 하지 않으면 NullPointerException이 발생할 수 있음
            if (books[i] != null) {
                System.out.println((i + 1) + "." + books[i].getTitle() + " - " + books[i].getAuthor());

            }
        }


    }

    /**
     * 선택 조회 (title 기준)
     */
    public static void readByTitle(Scanner sc, Book[] books) {
        System.out.println("-------[선택 조회하기(title)]-------");
        System.out.println("조회할 책 제목을 입력하세요: ");
        String targetTitle = sc.nextLine();
        // 0 ~ 100, 5 찾았으면 --> 반복문 돌릴 필요 없음
        //못 찾았으면 - 찾고자 하는책 제목이 없습니다
        boolean isFind = false;
        for (int i = 0; i < books.length; i++) {
            //방어적 코드 : 객체가 있는 칸에서만 비교 수행
            if (books[i] != null) {
                //targetTitle.trim( <--- .trime는 공백 제거가 됨 문자열 값에 "앞""뒤"에 공백만 제거해준다
                if (books[i].getTitle().equals(targetTitle.trim())) {
                    System.out.println("[검색결과]" + books[i].getTitle() + "," + books[i].getAuthor());
                    isFind = true;
                    break;
                }
            }
        }
    }

    /**
     * 전체 삭제 (delete)
     */
    public static void deleteAll(Book[] books) {
        //1.배열안에 들어가 있는 값들을 전체 null처리
        //2. 데이터를 다 지웠다면 카운터(LIST_INDEX_NUMBER) 값도 다시 0으로 만들어 주어야한다.
        System.out.println("------[전체 삭제하기]------");
        for (int i = 0; i < books.length; i++) {
            books[i] = null;
        }
        LAST_INDEX_NUMBER = 0;
        System.out.println("모든 도서 정보가 삭제되었습니다.");
    }


}//end of class

 

더보기
전체조회, 저장 기능
저장한 책까지 조회, 선택 조회, 삭제, 프로그램종료

 

'Java > Java 객체지향' 카테고리의 다른 글

메서드 오버로딩  (0) 2026.03.03
전화번호 관리하는 프로그램 만들기  (0) 2026.02.27
static함수  (1) 2026.02.26
static키워드 이해  (0) 2026.02.26
get, set 메서드  (0) 2026.02.26