[Java] 배열과 ArrayList - ArrayList 사용하기

나영원·2020년 8월 27일
0

Java_basic

목록 보기
37/60

ArrayList 클래스

ArrayList는 자바에서 제공되는 객체 배열이 구현된 클래스로 객체 배열을 사용하는데 필요한 여러 메서드들이 구현되 어있어서 사용하는데 편의를 제공합니다

주요 메서드 알아보기
배열을 입력하고 값을 출력해보기.

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		//1번
		ArrayList<String> list = new ArrayList<String>();
		//2번
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		//3번
		for(int i=0; i<list.size();i++) {
			String str = list.get(i);
			System.out.println(str);
		}
		System.out.println("===========");
		//4번
		for(String s : list) {
			System.out.println(s);
		}

}
}
//결과물
aaa
bbb
ccc

==========
aaa
bbb
ccc
  • 1번 : ArrayList 클래스를 사용하기 위해 list인스턴스를 생성합니다. <>에는 자료형이 들어가는데 생략하면 자료형에 상관 없이 값을 입력할 수 있지만 형변환을 해줘야 합니다.

  • 2번 : .add 메서들 사용해 list 배열에 값을 입력합니다. String은 생성할 필요없이 바로입력이 가능하지만 다른 객체는 생성후 입력해야합니다.

  • 3번 : for문을 통해 배열 값을 하나씩 출력하는데 범위를 .size를 통해 현재배열에 크기인 3을 지정해줍니다. .length와의 차이점은 .size는 현재 배열의 크기를 뜻하고 .length는 전체 배열이 길이를 뜻합니다. 만약 list[10]이었다면 sieze에서는 입력된 값의 크기인 3이 되지만 length는 여전히 10을 유지합니다.

  • 4번 : 향상된 for문을 이용해서 값을 출력해보고 결과값을 확인하면 두개의 방법 모두 배열의 값을 출력했음을 확인할 수 있습니다.

  • 그외에 메서드는 Java docs를 통해서 읽어보고 찾아가면서 해보시면됩니다.

<>의값(자료형)을 생략했을 때

	public static void main(String[] args) {
		//1번
		ArrayList list = new ArrayList();
		//2번
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		//3번
		for(int i=0; i<list.size();i++) {
			String str = (String)list.get(i);
			System.out.println(str);
		}
		System.out.println("===========");
		//4번
		for(Object s : list) {
			System.out.println(s);
		}

}

1번 : 자료형을 지정해주는 을 생략해보기 위해 지워줍니다.
3번 : list.get에 자료형을 지정되지 않아 에러가 발생하기에 (String)을 입력합니다.
4번 : String s : list에서 String이 아닌 모든 자료형을 포괄하는 Object로 수정해주고 실행하면 같은 결과값이 나옵니다.
예제
학생의 수강과목 학점 출력하기
Lee 학생은 두 과목을 수강하고, Kim 학생은 세 과목을 수강합니다.
Student클래스에 ArrayList 멤버변수를 하나 가지고 각 학생이 수강하는 과목을 관리하도록 합니다.
각 학생의 학점과 총점을 아래와 같이 출력해봅시다.

//1번
public class Subject {
	
	public String name;
	public int score;
	//2번
	public Subject(String name, int score) {

		this.name=name;
		this.score=score;
	}
	//3번
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
}
  • 1번 : 각 과목 역할을 할 Subject 클래스를 만들고 멤버변수로 name과 score를 선언해줍니다.

  • 2번 : Subject 생성자를 만들어 name과 score를 입력할 수 있게 만듭니다.

  • 3번 : name과 score를 활용할 수 있게 get/set 메서드를 각각 만들어 줍니다.

import java.util.ArrayList;
	//1번
public class Student {
	
	public int studentId;
	public String studentName;
	ArrayList<Subject> subjectList;
	//2번
	public Student(int studentId, String studentName) {
		
		this.studentId = studentId;
		this.studentName= studentName;
		
		subjectList = new ArrayList<Subject>();
	}
	//3번
	public void addSubjcet(String name, int score) {
		
		Subject subject = new Subject(name, score);
		
		subjectList.add(subject);
	}
	//4번
	public void showInfo() {
	   int	total = 0;
		
	 for(Subject subject : subjectList) {
		 total = 0;
		 
		 total += subject.getScore();
		 System.out.println(studentName + "학생의 "+subject.getName() +"과목의 점수는 "+subject.getScore()+"입니다.");
	 }
	   System.out.println(studentName + "학생의 "+"총점은" + total+"입니다");
	}
}
  • 1번 : Student클래스를 만들고 studentId, studentName와 를 담는 ArrayList subjectList를 멤버 변수로 선언합니다.

  • 2번 : Student 생성자를 만들어 studentId와 score를 입력할 수 있게 하고 Subject가 생성 될때 함게 ArrayList도 생성 될 수 있도록 생성자를 함께 작성합니다.

  • 3번 : 과목을 추가할 수 있는 addSubject 메서드를 만들고 name과 score를 입력하는데 그게 Subject생성자에 name과 score로 입력되도록 작성합니다. 그후 .add메서드를 통해 생성된 Subject가 ArrayList인 subjectList에 추가되도록 합니다.

  • 4번 : 정보를 출력하는 showInfo메서드를 작성합니다. 향상된 for문을 사용해 subject안에 subjectList 배열에 내용들이 하나씩 담기게 해서 total에 더해주면서 총점을 구하고 출력문을 통해 각 subject안에 name과 score을 get메서들 통해서 가져와서 출력합니다.

  
public class StudentTest {

	public static void main(String[] args) {
		//1번
		Student Lee = new Student(1001, "Lee");
		
		Lee.addSubjcet("국어", 100);
		Lee.addSubjcet("수학", 90);
		//2번
		Student Kim = new Student(1001, "Kim");
		
		Kim.addSubjcet("국어", 100);
		Kim.addSubjcet("수학", 90);
		Kim.addSubjcet("영어", 80);
		//3번
		Lee.showInfo();
		System.out.println("===============");
		Kim.showInfo();
	}

}

//결과물
Lee학생의 국어과목의 점수는 100입니다.
Lee학생의 수학과목의 점수는 90입니다.
Lee학생의 총점은90입니다
===============
Kim학생의 국어과목의 점수는 100입니다.
Kim학생의 수학과목의 점수는 90입니다.
Kim학생의 영어과목의 점수는 80입니다.
Kim학생의 총점은80입니다
1: Lee학생의 인스턴스를 생성하고 addSubject를 통해 각 과목의 이름과 점수를 입력합니다
2: 위와 마찬가지로 KIm학생의 인스턴스를 생성하고 과목이름과 점수를 입력합니다.
3번 정보출력을 위해 showInfo메서드를 사용하면 결과물과 같은 출력문이 출력됩니다.
profile
배우는 개발 일기

0개의 댓글