[JAVA]20일차(컬렉션 프레임워크(Collection Framework) 개요/스택(Stack))

정효진·2021년 8월 11일
0

Developer Study

목록 보기
36/47
post-thumbnail

8월11일(수)

Test140~Test151

◼ 컬렉션 프레임워크(Collection Framework)

자바의 정석 p.578
★★★★★자바에서 아주 중요한 개념!!!★★★★★

적용 예)
웹브라우저에서 '뒤로가기'기능!
Ctrl + z 기능
앱에서 되돌리기 기능

▪ 컬렉션 프레임워크(Collection Framework) 개요

/*
○ 컬렉션 프레임워크(Collection Framework)
	== 컬렉션(Collection) + 프레임워크(Framwork)
	   ------------------   --------------------
	          |             ★ 환경, 틀, 약속 ★
                  |
		집합 → 수집품, 소장품, (물건 또는 사람들의) 무리, 더미, 수집, 수거
		      -----------------------------------------------------------
				    모아놓은 것들...모여있는 것들...


	==> 컬렉션 프레임 워크는 자바에서 내세울 수 있는 자료 구조

▪ 자료

현실 세계로부터 단순한 관찰이나 측정을 통해 수집된
사실이나 개념의 값들 또는 그 값들의 집합.

가공되지 않은 데이터 / 관찰된 팩트 즉, 사실을 수집해서 모아 놓은 것
ex) 극장에 방문된 사람 인원들 월요일 몇명 화요일 몇명 그냥 카운트

+ 정보

가공된 데이터 / 그 자료를 특정 목적에 맞게 가공해서 판단의 근거로 사용될 수 있도록 의미와 가치를 부여한 것
ex) 주말에 방문한 사람들 통계해서 주말에 사람 많다.

▪ 자료구조

자료 처리를 위한 자료의 표현, 저장, 관계, 관리 및
이용에 관한 방법 등의 개념을 이해하여 프로그램에 사용하고
컴퓨터에 의해 처리되는 과정에서 적절한 자료의 표현, 구성, 저장 및
처리를 위한 알고리즘의 작성 및 선택과 이용 방법을 연구하는 분야

▪ 컬렉션 프레임워크(Collection Framwork)

컬렉션(모아놓은 데이터들)의 표현과 조작을 위한 통일된 아키텍처로
컬렉션 프레임워크를 구성하는 요소는 다음과 같다.

1. 인터페이스(Interface)
기본적으로 컬렉션에 필요한 데이터 관리 기능을 제공한다.
예를 들어, list 는 추가, 삭제, 검색 등의 기능을 제공하는
컬렉션 인터페이스가 존재하며 각 컬렉션마다 고유의 인터페이스가 정의되어 있다.

2. 구현(Implementation)
인터페이스를 구현한 클래스로 각 컬렉션을 실제 어떤 자료구조를 이용하여 표현했느냐에 따라 컬렉션의 종류가 달라지게 된다.

3. 알고리즘(Algorithms)
각 컬렉션들마다 유용하게 사용할 수 있는 메소드를 의미한다.

※ 자바 컬렉션은 견고한 컬렉션 프레임워크 기반 위에 정의되어 있으므로
각 컬렉션 종류마다 제공되는 메소드의 일관성이 있기 때문에
한 가지 컬렉션을 익혀두면 다른 컬렉션을 사용하는데 용이하다.

List 인터페이스
Set 인터페이스
Map 인터페이스

◼ 스택(Stack)

운영체제에서 메모리관리는 다 스택으로 함
가장 먼저 들어간게 나중에 나옴!
나중에 들어간게 먼저 나온다.

Stack 클래스는 오브젝트 후입선출(LIFO, Last Input First Output) 구조의 Stack을 나타낸다.
이는 벡터(Vector)를 스택으로 처리하는 5개의 메소드로
벡터(Vector) 클래스를 확장하게 된다.

통상의 push() 메소드와 pop() 메소드가 제공되는 것 외에
스택의 선두 항목으로 peek() 을 실시하는 메소드,
스택이 비어있는지의 여부를 확인하는 메소드 isEmpty(),
스택에서 항목을 찾아서 선두로부터 몇 번째인지를 찾아내는 메소드 등이 제공된다.

스택이 처음으로 작성되었을 때, 항목은 존재하지 않는다.

  • boolean empty()
    스택이 비어있는지 확인한다.
  • E Object peek()
    스택의 맨 위의 객체를 스택에서 제거하지 않고 반환한다.
    - E Object pop()
    스택의 맨 위의 객체를 반환하고 스택에서 제거한다.
  • E Object push(E item)
    객체를 스택 자료구조에 저장한다.
  • int search(Object o)
    스택의 맨 위에서부터 파라미터 값으로 넘겨받은 객체까지의 거리를 반환한다.
    맨 위의 객체의 경우 1을 반환하고 그 아래 객체는 2를 반화하는 형식.

제네릭, 제네릭표현식

<E> (->엘리먼트) <K, V> (->웹자료형) 

▪ 스택(Stack) 코드 설명- add()/.isEmpty()/pop()📝

import java.util.Stack;

public class Test150
{
	public static void main(String[] args)
	{
		//Stack 자료구조 생성
		//Stack<String> myStack = new Stack<String>();   //String이면 132번에 형변환 안해줘도댐
		Stack<Object> myStack = new Stack<Object>();

		String str1 = "바나나";
		String str2 = "딸기";
		String str3 = "복숭아";
		String str4 = "수박";

		// myStack 이라는 Stack 자료구조 안에 str1 ~ str4 까지 담아내기
		// add(), push()
		myStack.add(str1);
		myStack.add(str2);
		myStack.add(str3);
		myStack.add(str4);

		// peek() : 스택 맨 위의 객체 반환.(뭐 다 라고 알려주고) 제거하지 ㅇ낳는다.
		String val1 = (String)myStack.peek();      //-- 형 변환 check~!!!     
												   //myStack은 Object형식인데 String 에 담겠다 -> 업캐스팅이 일어남!
		System.out.println("val1 : " + val1);
		//--==>> val1 : 수박

		String val2 = (String)myStack.peek();
		System.out.println("val2 : " + val2);
		//--==>> val2 : 수박

		String val3 = (String)myStack.peek();
		System.out.println("val3 : " + val3);
		//--==>> val2 : 수박

		// peek() 는 제거하지 않으니까 계속 같은값만 반환!

		
		String value = "";
		// myStack 이라는 이름을 가진 Stack 자료구조에
		// 데이터가 비어있는 상황이 아니라면...(즉, 값이 들어있는 상태라면...)
		//  is Empty()
		// Stack 안에 있는 값 모두 반환!

		// 바나나
		// 딸기
		// 복숭아
		// 수박
		while (!myStack.isEmpty())     // !false → true
		{
			// pop() : 스택 맨 위의 객체 반환. 제거한다.
			value = (String)myStack.pop();      // 바나나(데려오고 제거) 딸기 복숭아 수박(여기까지오면 다 제거됨) ->isEmpty
			System.out.println("value: " + value);
		}
		//--==>> value: 수박
		//		 value: 복숭아
		//		 value: 딸기
		//		 value: 바나나

	}
}

▪ 스택(Stack) 코드 설명- push()/.Empty()/pop()📝

import java.util.Stack;

public class Test151
{
	// 정적 문자열 배열 선언 및 초기화
	private static final String[] colors = {"검정", "노랑", "초록", "파랑", "빨강", "연두"};
	
	//사용자 정의 생성자
		public Test151()
		{
			// st라는 Stack 자료구조 생성
			// 제네릭을 활용하여 자료구조에 담기는 데이터 표현 → <String>
			Stack<String> st = new Stack<String>();

			// st 라는 Stack 자료구조에 데이터 담기
			//st = colors;  (X)

			for(String color : colors)
			{
				st.push(color);
			}

			st.push("보라");
			
			//st.push(10);  //->넣는걸 String이라고 정해놔서 못넣는다
			//st.push(10.0); 
			//--==>> 에러 발생(컴파일 에러)
			//-- 제네릭 표현식을 통해 선언하고 있는
			//   String 이 아닌 다른 자료형(int 나 double) 을
			//	 스택에 push()하려고 했기 때문...




			// 출력 메소드 호출
			popStack(st);
		}

		//출력 메소드
		private void popStack(Stack<String> st)
		{
			System.out.print("pop : ");
			while (!st.empty())  //add 랑 push랑 같은거처럼 empty랑 isempty 같음!
				System.out.print(st.pop() + " ");
			System.out.println();
		}
		

	public static void main(String[] args)
	{ 
		new Test151();
	}
}

/*
pop : 보라 연두 빨강 파랑 초록 노랑 검정
계속하려면 아무 키나 누르십시오 . . .

*/
profile
개발새발

0개의 댓글