Java/study

컬렉션 프레임워크

Clearing 2022. 6. 23. 17:56
728x90

자바에서 컬렉션 프레임워크란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는

클래스의 집합을 의미한다. 즉, 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여

클래스로 구현해 놓은 것이다. 그로 인해 제작자의 편의성이 증가하고 유지보수가 용이해지며

제작자들의 실력이 상향 평준화 될 수 있다.

 

컬렉션 프레임워크의 인터페이스로는 List, Map, Set, Stack, Queue,... 등이 있다.

그중 List를 상속 받는 ArrayList(배열 리스트)는 Collection 프레임워크의 일부이며 스캐너와 랜덤처럼

java.util 패키지에 소속되어 있다. 배열리스트는 index를 사용하는 구조로 탐색을 자주 하는

프로그램과 주로 사용된다. 기존의 배열의 경우 자료형이나 크기가 정해져 있어야 했지만 배열 리스트의

경우에는 자료형이나 개수의 제약 없이 요소를 계속하여 추가할 수 있다.

배열 리스트의 정보를 확인하기 위해 출력을 하게되면 주소값이 아닌 배열의 정보가 출력되는 것을 확인할 수 있는데

이는 컬렉션을 상속받은 배열리스트의 toString()이 이미 오버 라이딩되어 있다는 것을 나타낸다.

 

배열 리스트에는 add(), clear(), remove(), size(),... 등등 수많은 메서드가 존재하여 메서드 구조 자체를 파악한다기 보단

이들을 어느 용도에 맞게 사용해야 하는지 사용법을 익히는 것이 중요하다.

또한 컬렉션을 사용할 때 제네릭(<>)과 함께 사용하게 되면 컬렉션에 저장될 데이터들의 타입(자료형)을 강제하여

오류를 줄일 수 있으며 모든 컬렉션에는 제네릭을 추가해서 사용한다

 

컬렉션<제네릭> 식별자 = new 컬렉션<제네릭>(); 과 같은 형태로 사용된다.

 

ArrayList를 이용한 자판기 프로그램

package class05;

import java.util.ArrayList;
import java.util.Scanner;

class Drink{
	String name;
	int price;
	int cnt;

	void use() {
		if(this.check()) {			
			if(this.cnt>0) {
				this.cnt--;
				System.out.println(this.name+" 구매 남은재고: "+this.cnt);
			}
		} else {
			System.out.println("남은 재고가 없습니다.");
		}	
	}
	void use(int num) {
		if(this.check()) {			
			if(this.cnt-num>0) {
				this.cnt-=num;
				System.out.println(this.name+" 구매 남은재고: "+this.cnt);
			}
		} else {
			System.out.println("남은 재고가 없습니다.");
		}	
	}
	

	boolean check() {
		if(this.cnt<=0) {
			return false;
		} else {
			return true;
		}
	}

	@Override
	public String toString() {
		return this.name+ " "+this.price+"원 ["+cnt+"]";
	}

	Drink(String name,int price){
		this(name,price,0);
	}
	Drink(String name,int price, int cnt){
		this.name=name;
		this.price=price;
		this.cnt=cnt;
	}
}

public class Test06 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<Drink> data = new ArrayList<Drink>();
		
		data.add(new Drink("콜라",900,10));
		data.add(new Drink("사이다",800));
		data.add(new Drink("포카리",700,10));

		while(true) {

			System.out.println("1. 메뉴출력");
			System.out.println("2. 메뉴선택");
			System.out.println("3. 종료");
			System.out.print("입력: ");

			int num = sc.nextInt();

			if(num==1) {
				System.out.println("====menu====");	
				for(int i=0;i<data.size();i++) {
					System.out.print((i+1)+"."+data.get(i).name+" ");
				}
				System.out.println();
				System.out.println();
			} else if(num==2) {
				while(true) {
					System.out.print("menu 입력: ");
					int menu = sc.nextInt();				
					if(menu<1 || menu>data.size()) {
						System.out.println("1, 2, 3번 중에 선택해주세요");
						System.out.println();
						continue;
					}
					data.get(menu-1).use();
					System.out.println();
					break;
				}
			} else if(num==3) {
				break;
			}  else {
				System.out.println("1, 2, 3번 중에 선택해주세요");
			}
		}
	}
}

 

 

728x90

'Java > study' 카테고리의 다른 글

예외(Exception)와 예외처리  (0) 2022.06.24
컬렉션 프레임워크 - Map  (0) 2022.06.24
추상클래스와 인터페이스  (0) 2022.06.22
동적 바인딩  (0) 2022.06.22
타입캐스팅  (0) 2022.06.21