본문 바로가기
728x90
반응형

study/Java31

Queue에 대해 알아보자 이번 시간에는 queue에 대하여 알아보려 합니다. Queue는 ‘대기줄’이라는 뜻을 가진 영어 단어입니다. Java의 Queue 인터페이스는 선입선출(FIFO: First In First Out) 형태로 자료를 보관하고 꺼내는 버퍼입니다. 음식점, 은행 같은 곳에서 줄을 설 때 먼저 온 사람부터 서비스를 받을 수 있는 것처럼, 가장 먼저 저장(push)된 데이터가 가장 먼저 인출(pop)됩니다. Queue는 주로 linkedlist 형태로 구현되며, queue에서 자주 사용되는 메소드는 다음과 같습니다. 메소드 설명 boolean add(E e) 해당 큐의 맨 뒤에 전달된 요소를 삽입함. 만약 삽입에 성공하면 true를 반환하고, 큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateExcept.. 2021. 8. 28. 15:57
Stack(push/pop) 이번 시간에는 stack에 대하여 알아보려 합니다. Stack은 ‘쌓아 올림’, ‘더미’ 라는 뜻을 가진 단어입니다. 선형 메모리 공간에 데이터를 쌓아 저장하면서 후입선출(LIFO)의 시멘틱을 따르는 자료 구조입니다. 맨 처음 들어간 데이터가 바닥에 쌓이고, 맨 마지막에 저장된(push) 데이터가 제일 먼저 인출되어(pop) 삽입/삭제/수정이 가능합니다. 프링*스 과자를 생각하면 이해하기 쉬울 것 같네요. 통에 과자를 넣을 때, 맨 나중에 들어간 과자를 맨 처음 먹게 될 것입니다. 스택도 같은 원리입니다. 맨 위 데이터를 top이라고, 맨 아래는 bottom이라고 부르며, 보통의 경우 bottom의 값은 0으로 고정됩니다. stack에서 자주 사용되는 메소드는 다음과 같습니다. 메소드 설명 boolean.. 2021. 8. 27. 15:51
Hashmap / Treemap 이번 시간에는 map 구조, 그 중 가장 많이 쓰이는 hashmap과 treemap에 대해 알아보려고 합니다. Map 인터페이스를 구현한 Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(key-value 방식)을 사용합니다. 여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 합니다. Map 컬렉션 클래스의 공통된 특징 2가지가 다음과 같습니다. 1. 요소의 저장 순서를 유지하지 않습니다. 2. 키는 중복을 허용하지 않지만, 값의 중복은 허용합니다. 해시 알고리즘(hash algorithm)이란 해시 함수(hash function)를 사용하여 데이터를 해시 테이블(hash table)에 저장하고, 다시 그것을 검색하는 알고리즘입니다. 자바에서 해시 알고리즘을 이용한 .. 2021. 8. 26. 15:46
Doubly-linkedlist에 대해 알아보자 지난 시간에 살펴본 Linkedlist에는 치명적인 단점이 하나 있습니다. Linkedlist를 사용하면 노드에 저장되는 다음 값의 메모리 주소를 바꾸어 연결을 수정하는 방식으로 효율적인 값 추가 및 제거가 가능합니다. 하지만 리스트의 다음 값으로는 넘어가기 쉽지만, 이전 값을 찾아 접근하기 어렵습니다. Doubly-Linkedlist(이중 연결 리스트)는 이런 단점을 해결하기 위해 탄생했습니다. Doubly-Linkedlist는 다음에 올 값의 메모리 주소와 함께, 이전 값의 메모리 주소를 저장해서, 앞뒤로 탐색이 가능합니다. 처음부터 시작해서 next를 이용해서 탐색하고, 후반부 절반의 엘리먼트는 마지막 노드부터 previous를 이용해서 조회합니다. 값을 추가할 때도 linkedlist와 마찬가지로.. 2021. 8. 25. 15:39
Linkedlist에 대해 알아보자 지난 시간에 살펴본 Arraylist에는 치명적인 단점이 하나 있습니다. 놀이기구를 타려고 줄을 서 있는데, 한 명이 새치기를 하게 되면 그 뒤에 서 있던 모든 사람이 한 칸씩 뒤로 순서가 밀리는 비효율이 발생하게 됩니다. 이처럼, 배열 사이에 새로운 값을 추가해 넣으려면 너무 많은 메모리 낭비가 발생합니다. Linkedlist(연결 리스트)는 이런 단점을 해결하기 위해 탄생했습니다. (가독성을 위해 줄을 맞추긴 했지만) 저장된 요소가 비순차적으로 분포할 수 있고, 이들을 링크로 연결합니다. 저장할 값과 함께 뒤에 올 값의 메모리 번호를 노드에 저장하여, 두 요소를 굳이 붙여 놓지 않아도 다음 값의 메모리 번호만 잊지 않는다면 서로를 소환해서 연결할 수 있습니다. 새로운 값의 추가나 제거도 Arrayli.. 2021. 8. 24. 15:30
컬렉션 프레임워크: Arraylist 자료구조 시즌에서는 컬렉션 프레임워크와 인터페이스에 대해 간단히 소개하고 arraylist에 대해 알아보려고 합니다. 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합입니다. 컬렉션 프레임워크는 자바의 인터페이스(interface)를 사용하여 구현됩니다. 그리고 자바 컬렉션 프레임워크를 구성하는 주요 인터페이스를 다음과 같이 분류할 수 있습니다. 이 중 이번 시즌에서는 가장 사용 빈도가 높은 Arraylist, linkedlist, stack, queue, hashmap 위주로 알아보려 합니다. 인터페이스 설명 구현 클래스 List l 순서가 있는 데이터의 집합 l 데이터의 중복을 허용함 Vector, Arr.. 2021. 8. 23. 15:25
기본형/참조형 매개변수 메서드의 매개변수 타입이 기본형(우리가 흔히 알고있는 int, String 이런 것들)이라면, 변수의 값을 읽어 오기(read-only)만 할 수 있습니다. 메서드를 호출할 때 매개변수로 지정한 값 자체를 복사해오기 때문입니다. 하지만 참조형인 경우, 변수의 값을 읽기도 가능하지만 변경도 가능(read & write)합니다. 메서드를 호출할 때 인스턴스 주소가 복사되기 때문입니다. 예제 두 개를 통해서 알아보도록 하겠습니다. class Data{ int x; } public class Parameter { public static void main(String[] args) { Data d = new Data(); d.x = 10; System.out.println("main:x="+ d.x); Syst.. 2021. 8. 22. 15:17
JVM의 메모리 구조 이번 시간에는 JVM의 메모리 구조에 대해 알아볼까 합니다. JVM(java virtual machine)은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고, 이를 용도에 따라 여러 영역으로 관리합니다. 이번 레터에서는 구조적인 측면보다는 실행되는 과정에서 JVM이 시스템의 메모리 리소스를 관리하는 방법에 대해 좀 더 무게를 두고 알아보겠습니다. JVM의 구조를 도식화하면 위와 같이 생겼습니다. 1. 메서드 영역 : 프로그램 실행 중 클래스가 사용되면, 그 클래스의 *.class 파일을 읽고 분석하여, 그 클래스에 대한 정보를 저장합니다. 클래스 변수도 이 영역에 생성됩니다. 2. 힙(Heap): 프로그램 실행 중 생성되는 인스턴스와 인스턴스 변수는 모두 힙에 생성됩니다. 3. 호출스택(Ca.. 2021. 8. 21. 15:14
자바 Java 메서드 (3) – 메서드의 호출 이번 시간에는 작성한 메서드를 호출하여 사용하는 방법에 대해 알아볼까 합니다. 메서드에 선언된 매개 변수가 있는지 없는지에 따라, 메서드 호출은 이와 같이 두 가지 방식으로 나뉩니다. 계산기를 호출하는 예제를 통해 메서드가 호출되는 방식에 대해 더 구체적으로 알아보겠습니다. public class Main { public static void main(String[] args) { Calculator mycal = new Calculator(); mycal.power(); System.out.println("계산기가 켜졌습니다."); long result1 = mycal.add(5,3); long result2 = mycal.subtract(5,3); long result3 = mycal.multiply.. 2021. 8. 20. 19:09
728x90
반응형