본문 바로가기
JAVA

[컬렉션프레임워크] 배열리스트

by amoomar 2022. 1. 11.
반응형

 

 

이번 포스팅에서는 컬렉션프레임워크의 기초 이론종류, 리스트의 기본 이론과 배열 리스트의 사용방법 및 예제 그리고 Generic에 대해 다루었다.

 

 

 

 

 


 

 

 

 

 

1. 컬렉션 프레임워크의 개요

 

프레임이란 뼈대, 틀을 의미한다. 이는 제작시 제작자들의 편의성을 좋게 하며 이로 인해 제작자들의 실력이 상향평준화 되는데 긍정적인 영향을 미친다. 코딩은 커뮤니케이션이 중시되기에 모두가 같이 사용할 수 있도록 하는 사용법이 가장 중시되며, 해당 단원 공부를 통해 컬렉션을 사용하는 방법에 대해 알아갈 수 있다.

 

코딩을 공부할때 학습하는 대분류는 아래와 같이 두가지로 구분할 수 있다.

  1. 자료구조 
    • 배열
    • 컬렉션
  2. 알고리즘
    • 교환(int imp)
    • 최대값 찾기
    • 정렬 : 버블, 삽입, 선택, 퀵 ..

 

 

 

 

 


 

 

 

 

 

2. 동적배열

 : 크기가 고정되지 않은 배열을 의미한다. 리스트, 맵, set, 스택, 큐 등이 있다.

 

 

 

 

 

 


 

 

 

 

 

 

3. 리스트 : List

 

1) List란

: 배열이 기존에 가진 한계를 극복한 컬렉션을 담고 있으며, 노드가 연결되어있는 것을 리스트라고 한다.

 

여기서 노드는 한칸짜리 배열이라고 할 수 있다. 본인의 값을 담고 있으며 다음 배열의 주소값만 담고 있는 것. 즉, 내 값과 다음 칸의 주소값만 갖고 있다.

 

 

 

 

 


 

 

 

 

2) 배열과 List의 차이

배열 List
- 접근이 용이하다
- 크기(배열의 길이)를 정확히 알고 있다
- 검색이 비교적 유리하다
- 삽입과 삭제가 불리하다
- 접근이 불리하다
- 크기(배열의 길이)를 정확히 알지 못한다
- 검색 불리(100번 인덱스=? -> 100번 호출해야 알 수 있다)
- 삽입과 삭제가 유리하다

 

*배열의 3요소 : 관련이 있고, 크기(자료형:타입)가 같아야하며, 길이를 알고 있어야한다.*

 

 

 

 

 

 

 


 

 

 

 

 

 

 

3) 리스트의 사용과 메서드

: 리스트는 배열리스트와 연결리스트로 구분된다 그 중 배열 리스트에 대한 내용이다

아래 서식을 참고하면 리스트의 사용과 자주쓰이는 메서드에 대해 알 수 있다.

package class05;

import java.util.ArrayList; //ctrl + shift + O를 통해 임폴트 생성

class A{ //클래스 A 생성 !27번라인참고!
	@Override
	public String toString() {
		return "a클래스";
	} 
}

public class Teat01 {

	public static void main(String[] args) {
		
		ArrayList al = new ArrayList(3); //괄호 안에 길이를 작성
		al.add(10);
		al.add(20);
		al.add(30);
		al.add(40);	 
		al.add("apple");
		//배열의 한계(지정된 길이)극복! + 자료형을 다양하게 담을 수 있음
		
		//add메서드는 총 두개 : 오버로딩 되어있음
		//al.add(index, element); ?번 index에 ?라는 element(값)을 담으라는 뜻
		al.add(0, 100); 
		al.add(new A()); //클래스도 담을 수 있다!
		
		//toString이 자동 overriding이 되어있으므로, 담긴 값이 출력됨
		System.out.println(al); 
								
//		al.clear(); -> 삭제메서드 : 배열을 통째로 삭제 / 초기화의 개념
		
//		al.get(index); -> index의 값을 조회할때 get메서드 사용
		System.out.println(al.get(3));
		
		if(al.isEmpty()) {
			System.out.println("비어있음");
		}else {
			System.out.println("안비어있음");
		}
		
//		al.remove(index); -> 삭제메서드 : 해당 index의 값을 지워라
		al.remove(1);
		System.out.println(al);
		
		//리스트의 length를 나타낸다. 길이가 줄어날 수도, 늘어날 수 있다
		//(최소값이 0이라 반복문이 실행 안될수도)
		System.out.println(al.size()); 
	}
}

출력결과

 

 

 

 

 


 

 

 

 

 

4) 실습예제

:배열리스트에 9까지의 홀수를 랜덤으로 담고, 10을 나눈 값을 출력하라

package class05;

import java.util.ArrayList;
import java.util.Random;

public class Test02 {

	public static void main(String[] args) {
		
		ArrayList al = new ArrayList();
		Random r = new Random();
		
		while(al.size()<5) { //al.size는 0임을 알 것
			int rNum=r.nextInt(9)+1;
			
			if(rNum%2==0) { //홀수만 출력한다는 조건식
				continue; //짝수면 반복문 처음으로 가!
			}
			al.add(rNum);
		}
		System.out.println(al);
		
		for(int i=0; i<al.size(); i++) {
			System.out.print(10/(int)al.get(i) + " "); //형변환 필요
		}
		System.out.println(); //띄어쓰기 목적
		
		//for each문 사용시에는 아래와 같이 출력할 수 있다!
		for(Object v:al){
			System.out.print(10/(int)v + " ");
		}
		
	}
}

 

 

 

 

 

 


 

 

 

 

 

4. 제네릭 : Generic

 

1) Generic의 기본 설명

: 타입을 정의하는 것, 저장될 데이터들의 타입을 일반화 하는 것

ArrayList<Point> al = new ArrayList<Point>(); //<>에는 클래스만 들어갈 수 있다
ArrayList<Integer> al = new ArrayList<Integer>(); //정수만 담을수 있도록

//"컬렉션 al아! 나 <지정 클래스>타입만 저장할거야!"

 

 

 

 


 

 

 

 

 

5. 전체내용예제

 

: 배열리스트를 사용하여 자판기 축소ver 만들기

package class05;

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

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

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

	public void buy() {
		if(cnt>0) {
			System.out.println(name + "구매 완료");
			System.out.println();
			cnt--;
		}else {
			System.out.println("재고 없음");
		}
	}

	@Override
	public String toString() {
		return name + " " + cnt + "개 " + price + "원";
	}

}

public class Test04 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		ArrayList <Drink> al = new ArrayList <Drink> ();
		int choice; //사용자의 입력

		al.add(new Drink("봉봉", 10, 1000));
		al.add(new Drink("주스", 0, 2000));
		al.add(new Drink("커피", 2, 1500));

		while(true) {

			//목록 자동 조회
			int i=0;
			while(i<al.size()) {
				System.out.println("=======목록=======");
				for(Drink v: al) {
					System.out.print((i+1)+". ");
					i++;
					System.out.println(v);
				}
			}
			System.out.println();

			// 음료 선택
			System.out.println("음료 선택 : ");
			choice = sc.nextInt();

			if(choice==1) {
				al.get(0).buy();
			}else if(choice==2) {
				al.get(1).buy();
			}else if(choice==3) {
				al.get(2).buy();
			}else { //유효성 검사
				System.out.println("해당 없음");
			}


		} //while(true) 닫는 괄호

	}
}

[출력화면 : -> 입력]

=======목록=======
1. 봉봉 10개 1000원
2. 주스 0개 2000원
3. 커피 2개 1500원

음료 선택 : 
4
해당 없음
=======목록=======
1. 봉봉 10개 1000원
2. 주스 0개 2000원
3. 커피 2개 1500원

음료 선택 : 
2
재고 없음
=======목록=======
1. 봉봉 10개 1000원
2. 주스 0개 2000원
3. 커피 2개 1500원

음료 선택 : 
1
봉봉구매 완료

=======목록=======
1. 봉봉 9개 1000원
2. 주스 0개 2000원
3. 커피 2개 1500원

반응형