[Java & SpringBoot로 시작하는 웹 프로그래밍] 3주차 학습 - 1 (배열과 ArrayList)

진문장·2021년 8월 18일

배열과 ArrayList

배열이란?

  • 동일한 자료형의 순차적 자료 구조
  • 배열 선언하기
int[] arr = new int[10];
int arr[] = new int[10];

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

  • 배열을 선언할때 기본 자료형 뿐만 아니라 참조 자료형 즉 객체를 배열로 선언할 수 있다.
/* 기본 자료형 */
int[] arr = new int[10];
/* 참조 자료형 */
Book[] library = new Book[5];

객체 배열 복사

  • 얕은 복사(shallow copy): 주소값을 복사하여 같은 배열을 공유한다. 그럼으로 메모리를 새로 할당하는 것이 아니고 같은 배열을 공유함으로 수정하면 수정된 내용된 원본 배열에 반영된다.
int[] arr1 = {1,2,3};
int[] arr2 = arr1;

arr2[0] = 99;

Sysytem.out.println("arr1[0]: " + arr1[0]); // 99 출력
  • 깊은 복사(deep copy): 해당 배열의 값을 복사한다. 그럼으로 메모리를 새로 할당하게 되고 만약 배열을 수정한다 해도 원본 배열이 변경된지 않는다.
int[] arr1 = {1,2,3};
int arr2 = new int[3];

System.arraycopy(arr1,0,arr2,0,3); // 배열 deep copy
arr2[0] = 99;

Sysytem.out.println("arr1[0]: " + arr1[0]); // 1 출력

향상된 for문(enhanced for)

  • 배열 요소의 처음부터 끝까지 모든 요소를 참조 할 때 편리한 반복문
for(변수: 배열) {
  반복 실행문;
}

EX)

for(int element: arr1) {
  Sysytem.out.println(element);
}

다차원 배열

  • 2차원 이상의 배열
  • 지도, 행렬, 게임, 평면이나 공간을 구현할 때 사용
int[][] arr = new int[2][3];

ArrayList 클래스

  • 자바에서 제공되는 객체 배열이 구현된 클래스
  • 객체 배열을 사용하는데 필요한 여러 메서드들이 구현되어 있음
  • 주요 메서드
    • add(E e): 요소 하나를 배열에 추가합니다. E는 요소의 자료형을 의미합니다.
    • size(): 배열에 전체 개수를 반환합니다.
    • get(int index): 배열의 index 위치에 있는 요소 값을 반환합니다.
    • remove(int index): 배열의 index 위치에 있는 요소 값을 제거하고 그값을 반환합니다.
    • isEmpty(): 배열이 비어 있는지 확인합니다.

학생의 수강과목 학점 출력하기

  • Lee 학생은 두 과목을 수강하고, kim 학생은 세 과목을 수강합니다.
    각 학생의 학점과 총점을 다음과 같이 출력해봅시다.
Student lee = new Student("Lee");
lee.addSubject(new Subject("국어",100));
lee.addSubject(new Subject("수학",90));

Student kim = new Student("Kim");
kim.addSubject(new Subject("국어",100));
kim.addSubject(new Subject("수학",90));
kim.addSubject(new Subject("영어",80));

lee.display();
System.out.println("==================");
kim.display();
class Student {
    final private String name;
    final private List<Subject> subjects;

    public Student(String name) {
        this.name = name;
        this.subjects = new ArrayList<>();
    }

    public void addSubject(Subject subject) {
        subjects.add(subject);
    }

    public void display() {
        int totalScore = 0;
        for (Subject subject : subjects) {
            System.out.println("학생 " + name + "님의 " + subject.getName() + " 과목의 성적은" + subject.getScore() + "점 입니다.");
            totalScore += subject.getScore();
        }
        System.out.println("학생 " + name + "님의 총점은 " + totalScore + "점 입니다.");
    }
}

class Subject {
    final private String name;
    final private int score;

    public Subject(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }
}

0개의 댓글