컬렉션이란?
자료구조 개념이 내장되어 있는 클래스로 자바에서 제공하는 "자료구조"를 담당하는 "프레임워크"이다.
- 자료구조 : 방대한 데이터를 보다 효율적으로 관리(조회, 정렬, 추가, 수정, 삭제) 할 수 있도록 도와주는 개념
- 프레임워크 : 이미 만들어져있는 틀(뼈대) => 그냥 가져다 쓰면 됨
* 배열의 단점과 컬렉션의 장점
> 배열의 단점
1. 배열은 우선 크기를 지정해야됨!! 한번 지정된 크기를 변경할 수 없음!!
새로운 값을 더 추가하고자 한다면 새로운 크기의 배열을 만들고 기존꺼를 복사하는 코드를 직접 기술
2. 배열 중간 위치에 추가한다거나 삭제하는 경우 매번 값을 땡겨주는 복잡한 알고리즘을 직접 기술해야됨..
3. 한 공간에 한 타입의 데이터만 저장 가능
> 컬렉션의 장점
1. 크기 지정해줄 필요 없음!! 만일 지정했다고 하더라도 더 많은 데이터들이 들어오면 알아서 사이즈 늘려줌
크기의 제약이 없음
2. 중간에 값을 추가한다거나 삭제하는 경우 값을 땡겨주는 작업(알고리즘)을 직접 기술할 필요 없음!!
단지 메소드 호출만으로 알아서 내부적으로 진행될꺼임
3. 한 공간에 여러타입의 데이터 저장 가능!!
* 방대한 데이터들을 단지 보관만 해두고 조회만 할 경우 배열을 많이 사용
방대한 데이터를 보관, 추가, 삭제 등등 이런 과정들이 빈번할 경우 컬렉션을 많이 사용
Music Class
package com.kh.chap01_list.part01_basic.model.vo;
public class Music {
private String title;
private String artist;
public Music() {
}
public Music(String title, String artist) {
super();
this.title = title;
this.artist = artist;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
@Override
public String toString() {
return "Music [title=" + title + ", artist=" + artist + "]";
}
}
(List 계열) ArrayList 사용해보자~
package com.kh.chap01_list.part01_basic.run;
import java.util.ArrayList;
import java.util.List;
import com.kh.chap01_list.part01_basic.model.vo.Music;
public class ListRun {
public static void main(String[] args) {
ArrayList list = new ArrayList(3); // 크기 지정을 할 수도 있고 안할수도 있음!! 안하면 기본크기 10
System.out.println(list); // 안에 아무것도 없음 ! (비어있는 상태)[]
System.out.println(list.size());
// E -> Element : 리스트에 담길 데이터들 (요소)
// 1. add(E e) : 리스트 공간 끝에 전달될 데이터를 추가시켜주는 메소드
System.out.println("\n1. add(E e)");
list.add(new Music("Attention", "뉴진스"));
list.add(new Music("새삥", "지코"));
list.add(new Music("죽일놈", "다이나믹 듀오"));
list.add("가보자고");
// 지정된 크기보다 더 많이 넣어도 오류 안남 => 장점 1 : 크기의 제약 없음
// 다양한 타입의 데이터 담을 수 있음 => 장점 3 : 여러타입 보관 가능
System.out.println(list); // list 특징 : 순저유지 하면서 담김 (0번 인덱스부터 차곡차곡)
// 2. add(index, E e) : 직접 인덱스를 지정해서 해당 인덱스 위치에 데이터를 추가시켜주는 메소드
System.out.println("\n2. add(index, E e)");
list.add(1, new Music("진심이 담긴 노래", "케이시"));
// 중간 위치에 데이터 추가시 복잡한 알고리즘 직접 구현 안함 => 장점 2
System.out.println(list);
// 3. remove(int index) : 해당 인덱스위치의 데이터 삭제시켜주는 메소드
System.out.println("\n3. remove(int index)");
list.remove(1);
System.out.println(list);
// 4. set(int index, E e) : 해당 인덱스 위치에 데이터를 새로이 전달된 e로 수정시켜주는 메소드
System.out.println("\n4. set(int index, E e)");
list.set(1, new Music("헌삥", "지야코"));
System.out.println(list);
// 5. size() : 해당 리스트의 사이즈를 반환시켜주는 메소드 (즉, 몇개의 데이터 담겨있는지) 사이즈를 4로 설정해도 데이터가 안담겨있으면 0
System.out.println("\n5. size()");
System.out.println("리스트의 사이즈 : " + list.size()); // 배열과 비교해보자면 length 같은 느낌
// 6. get(int index) : 해당 인덱스 위치의 객체를 반환시켜주는 메소드
System.out.println("\n6. get(int index)");
Music m = (Music)list.get(0); // .get 의 반환형은 object 따라서 Music으로 강제 형변환 해야됨(제네릭 설정을 안했기 때문)
String s = (String)list.get(3);
System.out.println(m);
System.out.println(s);
System.out.println(list.get(1)); // 변수에 안넣기 때문에 형변환 필요 없음
// System.out.println(list.get(1).getTitle()); // 안된다. object타입이라 Music의 getTitle() 메소드 사용 불가
System.out.println(((Music)list.get(1)).getTitle()); // 따라서 Music 의 getTitle() 메소드 사용하기 위해 강제 형변환 필요
// 7. subList(int index1, int index2) : List => 추출해서 새로운 List 반환 : subString 같은거
System.out.println("\n7. subList(int index1, int index2)");
List sub = list.subList(0, 2); // 0 <= < 2
System.out.println(sub);
// 8. addAll(Collect c) : 컬렉션을 통째로 뒤에 추가시켜주는 메소드
System.out.println("\n8. addAll(Collect c)");
list.addAll(sub);
System.out.println(list);
// 9. isEmpty() : boolean => 컬렉션이 비어있는지 묻는 메소드
System.out.println("\n9. isEmpty()");
System.out.println(list.isEmpty());
// 10. clear() : 리스트 안에 있는 내용을 싹 비워주는 메소드
System.out.println("\n10. clear()");
// list.clear();
// System.out.println(list);
// System.out.println(list.isEmpty()); // true
// 반복문을 통해 순차적을 출력
System.out.println("===========================================");
// 1. for loop
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("===========================================");
// 2. 향상된 for문
for(Object o : list) { // o = list.get(0) => o = list.get(1) ...
System.out.println(o);
}
}
}
출력 결과
제네릭(Generic) 사용해보자
제네릭<> 을 사용하는 이유
1. 명시된 타입의 객체만 저장하도록 제한을 둘 수 있음
2. 컬렉션에 저장된 객체를 꺼내서 사용할 때 매번 형변환 하는 절차를 없앨 수 있다.
package com.kh.chap01_list.part01_basic.run;
import java.util.ArrayList;
import java.util.List;
import com.kh.chap01_list.part01_basic.model.vo.Music;
public class GenericListRun {
public static void main(String[] args) {
// <Music> 로 제네릭 설정함
ArrayList<Music> list = new ArrayList<Music>();
list.add(new Music("Attention", "뉴진스"));
list.add(new Music("새삥", "지코"));
// list.add("가보자고"); 제네릭 설정시 다른 타입 담기 불가
System.out.println(list);
list.add(1, new Music("진심이 담긴 노래", "케이시"));
System.out.println(list);
List<Music> sub = list.subList(0, 2);
System.out.println(sub);
list.addAll(sub);
Music m = list.get(0); // <Music> 으로 제네릭을 설정했기 때문에 강제형변환 필요없음, Music 클래스의 .get()메소드 사용가능
System.out.println(m);
System.out.println(list.get(0).getArtist());
for(Music o : list) { // o = list.get(0) => o = list.get(1)
System.out.println(o);
}
}
}
실행 결과
이 글의 마지막 실습예제를 ArrayList 컬렉션울 이용해서 다시 만들어 보자
[자바/JAVA] 프로그래밍 - 상속성 (Inheritance)
상속쓰기 전 Desktop Class package com.kh.chap01_beforeVSafter.before.model.vo; public class Desktop { private String brand; private String pCode; private String pName; private int price; private boolean allInOne; public Desktop() { } public Desktop(St
e1jong.tistory.com
실행 Class
ArrayList<Vehicle> list = new ArrayList<>();
list.add(new Car("벤틀리", 12.5, "세단", 4)); // 다형성 적용
list.add(new Ship("낚시배", 3, "어선", 1));
list.add(new Airplane("종이비행기", 0.01, "제트기", 10, 4));
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).information()); // 동적바인딩
}
이 글의 실습 예제를 ArrayList컬렉션울 이용해서 다시 만들어 보자
[자바/JAVA] 프로그래밍 - 객체 배열(Object Array) 실습 예제
Employee 클래스 생성 package com.hw1.model.vo; public class Employee { private int empNo; private String empName; private String dept; private String job; private int age; private char gender; private int salary; private double bonusPoint; private Str
e1jong.tistory.com
실행 Class
package com.hw1.run;
import java.util.ArrayList;
import com.hw1.model.vo.Employee;
public class ArrayListRun {
public static void main(String[] args) {
ArrayList<Employee> emp = new ArrayList<>();
emp.add(new Employee());
emp.add(new Employee(1, "홍길동", 19, 'M', "01022223333", "서울잠실"));
emp.add(new Employee(2, "강말순", "교육부", "강사", 20, 'F', 1000000, 0.01, "01011112222", "마곡"));
// for
for(int i = 0; i < emp.size(); i++) {
System.out.println("emp[" + i + "] : " + emp.get(i).information());
}
System.out.println("======================================================================");
/*
// 향상된 for 문
int count = 0;
for(Employee e : emp) {
System.out.println("emp[" + count++ + "] : " + e.information());
}
System.out.println("======================================================================");
*/
emp.set(0, new Employee(0, "이원종", "영업부", "회장", 25, 'M', 100000000, 0.5, "01012345678", "경기도 광명"));
emp.get(1).setDept("영업부");
emp.get(1).setJob("사장");
emp.get(1).setSalary(4000000);
emp.get(1).setBonusPoint(0.3);
for(int i = 0; i < emp.size()-1; i++) {
System.out.println("emp[" + i + "] : " + emp.get(i).information());
}
System.out.println("======================================================================");
/*
int total = 0;
for(int i = 0; i < emp.size(); i++) {
System.out.println(emp.get(i).getEmpName() + "의 연봉 : " + (int)(emp.get(i).getSalary() + emp.get(i).getSalary()* emp.get(i).getBonusPoint())*12 + "원");
total += (int)(emp.get(i).getSalary() + emp.get(i).getSalary()* emp.get(i).getBonusPoint())*12;
}
*/
int total1 = 0;
for(Employee e : emp) {
System.out.println(e.getEmpName() + "의 연봉 : " + (int)(e.getSalary() + (e.getSalary() * e.getBonusPoint()))*12 + "원");
total1 += (int)(e.getSalary() + (e.getSalary() * e.getBonusPoint()))*12;
}
System.out.println("======================================================================");
// System.out.println("직원들의 연봉의 평균 : " + total / emp.size() + "원");
System.out.println("직원들의 연봉의 평균 : " + total1 / emp.size() + "원");
}
}