// 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 강의를 참고했습니다