[Programming]/[Language]

[Java] Ch6. 배열과 ArrayList / K-Digital Credit Java / 객체 지향 프로그래밍 기초 / Summary

김파고띠 2022. 3. 19. 14:06

// 01. 배열이란 - 1 & 02. 배열이란 - 2 

 

| 배열이란?

동일한 자료형의 순차적(연속된) 자료 구조

 

배열 선언하기

int[] arr = new int[10];

int arr[] = new int[10];

 

메모리 구조

Fixed Length

물리적인 위치와 논리적인 위치가 동일하다

배열의 개수는 ( 길이 - 1 )

Ex) Length가 5이면, 배열의 인덱스 번호는 0~4

 

[ 메모리 구조 그림1 ]

배열 길이(Length)

10개

총 = 40바이트 ( = 4바이트 X 10 ) / 배열 전체 바이트

4바이트                

 

ArrayList?

배열에서 원소를 추가하거나 위치를 바꿀 때

나머지 원소를 다 옮기거나 해야되는 것을

이미 구현한, JDK 안에 있음

 

/// ArrayTest.java ///

 

package array;

 

public class ArrayTest{

public static void main(String[] args){

 

// 배열 생성

int[] arr = new int[10];

 

// 출력

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

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

}

 

// 숫자 할당

for( int i = 0, num = 1 ; i < arr.length ; i++, num++ ){

arr[i] = num;

}

 

// 토탈 값

int total = 0;

 

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

total += int[i];

}

 

// 곱하기 토탈 값

double[] dArr = new double[5];

 

double mtotal = 1;

int count = 0;

 

dArr[0] = 1.1; count++;

dArr[1] = 2.1; count++;

dArr[2] = 3.1; count++;

 

for ( int i = 0; i < count; i++){

mtotal *= dArr[i];

}

/*

설명 = 배열 길이를 5로 설정을 하고, 할당을 3개만 하면

나머지는 0.0으로 초기화가 됌

그렇기 때문에 count을 이용해서 할당된 원소만

카운트할 수 있도록 조건식에 쓴 것임

 

}

 

}

 

| 배열 문제

문자 배열을 생성하고 출력해보세요

대문자를 A-Z까지 배열에 저장하고 이를 다시 출력하는 프로그램을 만들자

 

/// CharArrayTest.java ///

 

package array;

 

public class CharArrayTest{

public static void main(String[] args){

 

char[] alphabets = new char[26];

char ch = ‘A’;

 

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

alphabets[i] = ch++;

 

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

System.out.println( alphabets[i] + “,” + (int)alphabets[i] );

}

 

}

}

 

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

 

// 03. 객체 배열 - 1 & 04. 배열이란 - 2

 

| 기본 자료형 배열과 참조 자료형 배열 ( 객체 배열 )



int[] arr = new int[10];

배열 길이 (length) : 10개

배열 전체 바이트 : 40바이트 ( 10 X 4 )

 

4바이트                  



Book[] library = new Book[5];

 

library[0]
null
library[1]
null
library[2]
null
library[3]
null
library[4]
null



| arraycopy

Form)

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

 

| 객체 배열 복사

얕은 복사

복사 시 인스터스 생성이 아닌, 주소만 복사를 한 것

객체 array가 똑같은 것을 가리키는 것

 

깊은 복사

인스터스를 따로 쓰는 것

System.arraycopy를 쓰면 안되고 일일이 생성해서 복사해야함

 

| 향상된 for문 (enhance for)

배열 요소의 처음부터 끝까지 모든 요소를 참조 할 때 편리한 반복문

Form)

 

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



/// Book.java ///

package array;

 

public class Book{

 

private String title;

private String author;

 

public Book() {};

 

public Book(String title, String author){

this.title = title;

this.author = author;

}

 

public String getTitile(){

return title;

}

 

public void setTitle(){

this.title = title;

}

 

public String getAuthor(){

return author;

}

 

public void setAuthor(){

this.author = author;

}

 

public void showBookInfo(){

System.out.println(title + “,” + author);

}

 

}

 

/// BookArrayTest.java ///

 

package array;

 

public class BookArrayTest{

 

public static void main(String[] args){

 

Book library = new Book[5];

 

library[0] = new Book(“해리포터1”, “롤링");

library[1] = new Book(“해리포터2”, “롤링");

library[2] = new Book(“해리포터3”, “롤링");

library[3] = new Book(“해리포터4”, “롤링");

library[4] = new Book(“해리포터5”, “롤링");

 

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

// 배열의 주소값을 보여주는

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

// showBookInfo() 메서드에 나온 title, author을 보여주는

library[i].showBookInfo();

}

}

}

 

/// ArrayTest.java ///

 

package array;

 

public class ArrayTest{

 

public static void main(String[] args){

 

int[] arr1 = { 10, 20, 30, 40, 50 } ;

int[] arr2 = { 1, 2, 3, 4, 5 } ;

 

System.arraycopy(arr1, 0, arr2, 1, 3);

 

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

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

}

 

}

}

 

/// ObjectCopy.java ///

// 얕은 복사

 

package array;

 

public class ObjectCopy{

 

public static void main(String[] args){

 

Book library = new Book[5];

Book copyLibrary = new Book[5];

 

library[0] = new Book(“해리포터1”, “롤링");

library[1] = new Book(“해리포터2”, “롤링");

library[2] = new Book(“해리포터3”, “롤링");

library[3] = new Book(“해리포터4”, “롤링");

library[4] = new Book(“해리포터5”, “롤링");

 

System.arraycopy(library, 0, copyLibrary, 0, 5);

 

// Enhanced for loop, checking if copying is done

for( Book book : copyLibrary ){

book.showBookInfo();

}

 

// Changing library[0]’s title, author

library[0].setTitle(“반지의 제왕");

library[0].setTitle(“톨킨");

 

for ( Book book : library ) {

book.show.BookInfo();

}

 

// Line to divide library array and its copy array

System.out.println(“---------------”);

 

for ( Book book : copylibrary ) {

book.show.BookInfo();

}

 

}

}

 

/// ObjectCopy2.java ///

// 깊은 복사

 

package array;

 

public class ObjectCopy{

 

public static void main(String[] args){

 

Book library = new Book[5];

Book copyLibrary = new Book[5];

 

library[0] = new Book(“해리포터1”, “롤링");

library[1] = new Book(“해리포터2”, “롤링");

library[2] = new Book(“해리포터3”, “롤링");

library[3] = new Book(“해리포터4”, “롤링");

library[4] = new Book(“해리포터5”, “롤링");

 

copyLibrary[0] = new Book();

copyLibrary[1] = new Book();

copyLibrary[2] = new Book();

copyLibrary[3] = new Book();

copyLibrary[4] = new Book();

 

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

copyLibrary[i].setTitle(library[i].getTitle());

copyLibrary[i].setAuthor(library[i].getAuthor());

}

 

library[0].setTitle(“반지의 제왕");

library[0].setTitle(“톨킨");

 

for ( Book book : library ) {

book.show.BookInfo();

}

 

System.out.println(“---------------”);

 

for ( Book book : copylibrary ) {

book.show.BookInfo();



}

}

 

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

 

// 05. 다차원 배열

 

| 다차원 배열

2차원 이상의 배열

지도, 게임, 평면이나 공간ㅇ을 구현할 때 사용

행을 기준으로 열을 돌린다 ( arr[0][1] > 0행 1열 )

메모리에서는 1차원으로 만들어진다 ( But 주소값은 옆이긴 함 )

Ex)

int[  ][  ] arr = new int[2][3];

int : 자료형

arr : 배열 이름

앞 [ ] : 행 개수

뒤 [ ] : 열 개수

 

arr[0][0] arr[0][1] arr[0][2]
arr[1][0] arr[1][1] arr[1][2]

 

/// TwoDimension.java ///

 

package array;

 

public class TwoDimension{

 

public static void main(String[] args){

 

int[ ][ ] arr = { { 1,2,3 }, { 4,5,6 } } ;

 

// arr의 행의 개수

System.out.println(arr.length);

// arr[0] 행의 열의 개수

System.out.println(arr[0].length);

// arr[1] 행의 열의 개수

System.out.println(arr[1].length);

 

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

for ( int j = 0 ; j < arr[i].length ; j++){

System.out.println(arr[i][j] + “ ”);

}

System.out.println();

}

}

}

 

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

 

// 06. Arraylist 사용하기 - 1 & 07. Arraylist 사용하기 - 2

 

| ArrayList 클래스

자바에서 제공되는 객체 배열이 구현된 클래스

객체 배열을 사용하는데 필요한 여러 메서드들이 구현되어 있음

주요 메서드

 

  • ArrayList에서 String은 생성 없이 바로 쓸 수 있지만

다른 것들(Ex_참조자료형)등은 생성해야함

 

메서드 설명
boolean add[E e] 요소 하나를 배열에 추가합니다. E는 요소의 자료형을 의미합니다
int size( ) 배열에 추가된 요소 전체 개수를 반환합니다
E get(int index) 배열의 index 위치에 있는 요소 값을 반환합니다
E remove(int index) 배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반환합니다
boolean isEmpty( ) 배열이 비어 있는지 확인합니다

 

 

/// ArrayListTest.java ///

 

package array;

 

public class ArrayListTest{

 

public static void main(String[] args){

 

ArrayList<String> list = new ArrayList<String>();

 

list.add(“aaa”);

list.add(“bbb”);

list.add(“ccc”);

 

//

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

String str = list.get(i);

System.out.println(str);

}

 

// Enhanced for loop을 이용한 방법

for ( Object s : list ){

System.out.println(s);

}

}

}

 

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

 

| 코딩해보기 - 학생의 수강과목 학점 출력하기

Lee 학생은 두 과목을 수강, Kim 학생은 세 과목을 수강

각 학생의 학점과 총점을 다음과 같이 출력해보자

 

Student 클래스에 ArrayList 멤버변수를 하나 가지고

각 학생이 수강하는 과목을 관리하도록 합니다

 

출력문:

학생 Lee님의 외국어 과목의 성적은 100점 입니다.

학생 Lee님의 수학 과목의 성적은 90점 입니다.

학생 Lee님의 총점은 190점 입니다

—----------------------------------------

학생 Lee님의 외국어 과목의 성적은 100점 입니다.

학생 Lee님의 수학 과목의 성적은 90점 입니다.

학생 Lee님의 영어 과목의 성적은 80점 입니다.

학생 Lee님의 총점은 270점 입니다

 

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

 

// 08.코딩해보세요

 

| ArrayList를 활용한 응용 프로그램

 

어느 학교에 학생이 3명 있습니다. 각 학생마다 읽은 책을 기록하고 있습니다.

Student 클래스를 만들고 각 학생마다 읽은 책을

Student 클래스 내에 ArrayList를 생성하여 관리하도록 합니다.

다음과 같이 출력 되도록 Student, Book, StudentTest 클래스를 만들어 실행하세요

 

Lee 학생이 읽은 책은 : 태백산맥 1 태백산맥2 입니다

Kim 학생이 읽은 책은 : 토지1 토지2 토지3 입니다

Cho 학생이 읽은 책은 : 해리포터1 해리포터2 해리포터3 해리포터4 해리포터5 해리포터6 입니다

 

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

—-----------—-----------—-----------—-----------—-----------—-----------—-----------—-----------

 

이 정리 내용은 패스트 캠퍼스, K-Digital Credit Java 강의를 참고했습니다