1๏ธโฃ Deque(๋ฑ, Double Ended Queue)
Deque(๋ฑ, Double Ended Queue)๋ ์์ชฝ ๋์์ ์ฝ์ ๊ณผ ์ญ์ ๋ฅผ ํ ์ ์๋ ์๋ฃ ๊ตฌ์กฐ์ ๋๋ค.
Java์์๋ java.util
ํจํค์ง์์ ์ ๊ณตํ๋ Deque
์ธํฐํ์ด์ค์ ์ด๋ฅผ ๊ตฌํํ ํด๋์ค์ธ ArrayDeque
์ LinkedList
๋ฅผ ํตํด ์ฌ์ฉํ ์ ์์ต๋๋ค.
Deque
๋ ํ(Queue)์ ์คํ(Stack)์ ๊ธฐ๋ฅ์ ๋ชจ๋ ํฌํจํ๊ณ ์์ต๋๋ค.
1๏ธโฃ ๋ฐํฌ ๊ธฐ๋ณธ ๊ตฌ์กฐ
-
๋ฐํฌ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ์๋ฐฉํฅ์์ ์ฝ์ ์ญ์ ๊ฐ๋ฅํ ๊ตฌ์กฐ
-
์ผ๋ถ ๊ธฐ๋ฅ์ ์ ํํ์ฌ ์ฉ๋์ ๋ง๊ฒ ๋ณํ ๊ฐ๋ฅ
-
add
๋remove
๊ณ์ด์ ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค.- ๋๋ฌธ์ ์์ธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
-
offer
์ด๋poll
๊ณ์ด์null
์ด๋false
๋ฅผ ๋ฐํํฉ๋๋ค.- ๋๋ฌธ์
return
๊ฐ (๋ฐํ๊ฐ)์ ๋ฐ์์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ๋๋ฌธ์
2๏ธโฃ Deque์ ์ฃผ์ ๋ฉ์๋.
1๏ธโฃ ์ฝ์ ์ฐ์ฐ.
-
addFirst(E e)
: ์ง์ ๋ ์์๋ฅผ ๋ฑ์ ์์ชฝ์ ์ถ๊ฐํฉ๋๋ค. -
addLast(E e)
: ์ง์ ๋ ์์๋ฅผ ๋ฑ์ ๋ค์ชฝ์ ์ถ๊ฐํฉ๋๋ค. -
offerFirst(E e)
: ์ง์ ๋ ์์๋ฅผ ๋ฑ์ ์์ชฝ์ ์ถ๊ฐํฉ๋๋ค. -
offerLast(E e)
: ์ง์ ๋ ์์๋ฅผ ๋ฑ์ ๋ค์ชฝ์ ์ถ๊ฐํฉ๋๋ค.
2๏ธโฃ ์ญ์ ์ฐ์ฐ.
-
removeFirst()
: ๋ฑ์ ์์ชฝ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํฉ๋๋ค. -
removeLast()
: ๋ฑ์ ๋ค์ชฝ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํฉ๋๋ค. -
pollFirst()
: ๋ฑ์ ์์ชฝ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํฉ๋๋ค. -
pollLast()
: ๋ฑ์ ๋ค์ชฝ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํฉ๋๋ค.
3๏ธโฃ ์กฐํ ์ฐ์ฐ.
-
getFirst()
: ๋ฑ์ ์์ชฝ์ ์๋ ์์๋ฅผ ๋ฐํํฉ๋๋ค. -
getLast()
: ๋ฑ์ ๋ค์ชฝ์ ์๋ ์์๋ฅผ ๋ฐํํฉ๋๋ค. -
peekFirst()
: ๋ฑ์ ์์ชฝ์ ์๋ ์์๋ฅผ ๋ฐํํฉ๋๋ค. -
peekLast()
: ๋ฑ์ ๋ค์ชฝ์ ์๋ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
4๏ธโฃ ๊ธฐํ ์ฐ์ฐ.
-
size()
: ๋ฑ์ ์๋ ์์์ ์๋ฅผ ๋ฐํํฉ๋๋ค. -
isEmpty()
: ๋ฑ์ด ๋น์ด ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
3๏ธโฃ ์๊ฐ ๋ณต์ก๋.
Deque
์ธํฐํ์ด์ค์ ์๊ฐ ๋ณต์ก๋๋ ์ด๋ฅผ ๊ตฌํํ ํด๋์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
Java์์๋ ์ฃผ๋ก ArrayDeque
์ LinkedList
๋ฅผ ์ฌ์ฉํ์ฌ Deque
๋ฅผ ๊ตฌํํฉ๋๋ค.
1๏ธโฃ ArrayDeque
- ์ฝ์ ๊ณผ ์ญ์ ์ฐ์ฐ (์๊ณผ ๋ค ๋ชจ๋): ํ๊ท ์ ์ผ๋ก O(1)
- ์กฐํ ์ฐ์ฐ (์๊ณผ ๋ค ๋ชจ๋): O(1)
-
ArrayDeque
๋ ๋ฐฐ์ด์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋๊ธฐ ๋๋ฌธ์, ๋ฐฐ์ด์ด ๊ฝ ์ฐจ๋ฉด ์๋์ผ๋ก ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ์ง๋ง, ์ด ๊ณผ์ ์ amortized O(1)๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
2๏ธโฃ LinkedList
- ์ฝ์ ๊ณผ ์ญ์ ์ฐ์ฐ (์๊ณผ ๋ค ๋ชจ๋): O(1)
- ์กฐํ ์ฐ์ฐ (์๊ณผ ๋ค ๋ชจ๋): O(1)
-
LinkedList
๋ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํ๋์ด ์์ด ๊ฐ ๋ ธ๋๊ฐ ์ด์ ๊ณผ ๋ค์ ๋ ธ๋์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
LinkedList๋ ๊ฐ ๋
ธ๋๊ฐ ์ด์ ๋
ธ๋์ ๋ค์ ๋
ธ๋์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด ์ฝ์
๊ณผ ์ญ์ ๊ฐ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
ํ์ง๋ง ํ์์๋ O(n)์ ์๊ฐ์ด ์์๋ฉ๋๋ค.
ArrayDeque๋ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ด๋ถ์ ์ผ๋ก ๊ตฌํ๋๊ธฐ ๋๋ฌธ์ ์ฝ์
๊ณผ ์ญ์ ์์๋ ํ๊ท ์ ์ผ๋ก O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฉฐ,
ํนํ ํ์ ๋์์์ ์ฐ์ฐ์ด ๋น ๋ฆ
๋๋ค.
๋ค๋ง, ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด์ด ๊ฐ๋ ์ฐจ๋ฉด ํฌ๊ธฐ๋ฅผ ์กฐ์ ํด์ผ ํ๋ฏ๋ก ์ต์ ์ ๊ฒฝ์ฐ O(n)์ ์๊ฐ ๋ณต์ก๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
Deque ๋ ๋ค์ํ ์ํฉ์์ ์ ์ฐํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ ์ ์ฉํ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
ํนํ ์์ชฝ ๋์์์ ๋น ๋ฅธ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ์ฉํฉ๋๋ค.
3๏ธโฃ ์ง์ Deque ์ธํฐํ์ด์ค ๊ตฌํ.
๊ฐ๋จํ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ Deque
๋ฅผ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.
import java.util.ArrayList;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class SimpleArrayDeque<E> {
private static final int DEFALT_CAPACITY = 10;
private E[] elements;
private int head;
private int tail;
private int size;
public SimpleArrayDeque() {
elements = (E[]) new Object[DEFALT_CAPACITY];
head = 0;
tail = 0;
size = 0;
}
public void addFirst(E e) {
if (size == elements.length) {
resize();
}
head = (head - 1 + elements.length) % elements.length;
elements[head] = e;
size++;
}
public void addLast(E e) {
if (size == elements.length) {
resize();
}
elements[tail] = e;
tail = (tail + 1) % elements.length;
size++;
}
public E removeFirst() {
if (size == 0) {
throw new NoSuchElementException();
}
E element = elements[head];
elements[head] = null; // for garbege collection
head = (head + 1);
size--;
return element;
}
public E removeLast() {
if (size == 0) {
throw new NoSuchElementException();
}
tail = (tail - 1 + elements.length) % elements.length;
E element = elements[tail];
elements[tail] = null; // for garbage collection
size--;
return element;
}
public E getFirst() {
if (size == 0) {
throw new NoSuchElementException();
}
return elements[head];
}
public E getLast() {
if (size == 0) {
throw new NoSuchElementException();
}
return elements[(tail - 1 + elements.length) % elements.length];
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
private void resize() {
int newCapacity = elements.length * 2;
E[] newElements = (E[]) new Object[newCapacity];
for (int i = 0; i < size; i++) {
newElements[i] = elements[(head + i) % elements.length];
}
elements = newElements;
head = 0;
tail = size;
}
public ArrayList<E> toArrayList() {
return IntStream.range(0, size)
.mapToObj(i -> elements[(head + i) % elements.length])
.collect(Collectors.toCollection(ArrayList::new));
}
}
// Main
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
SimpleArrayDeque<Integer> deque = new SimpleArrayDeque<>();
deque.addFirst(1);
deque.addLast(2);
deque.addFirst(0);
deque.addLast(3);
ArrayList<Integer> dequeList = deque.toArrayList();
System.out.println("=== dequeList === ");
System.out.println(dequeList);
System.out.println("First element: " + deque.getFirst());
System.out.println("Last element: " + deque.getLast());
System.out.println("=== dequeList === ");
dequeList = deque.toArrayList();
System.out.println(dequeList);
System.out.println("Removed first element: " + deque.removeFirst());
System.out.println("Remove last element: " + deque.removeLast());
System.out.println("=== dequeList === ");
dequeList = deque.toArrayList();
System.out.println(dequeList);
System.out.println("Deque size: " + deque.size());
System.out.println("Is deque empty? " + deque.isEmpty());
System.out.println("=== dequeList === ");
dequeList = deque.toArrayList();
System.out.println(dequeList);
}
}
/*
=== ์ถ๋ ฅ ===
=== dequeList ===
[0, 1, 2, 3]
First element: 0
Last element: 3
=== dequeList ===
[0, 1, 2, 3]
Removed first element: 0
Remove last element: 3
=== dequeList ===
[1, 2]
Deque size: 2
Is deque empty? false
=== dequeList ===
[1, 2]
*/
4๏ธโฃ ์ ๋ ฅ ์ ํ Deque(Input-Restricted Deque).
์ ๋ ฅ ์ ํ Deque(Input-Restricted Deque)์ ๋ฑ์ ํ์ชฝ ๋์์๋ง ์ฝ์ ์ด ๊ฐ๋ฅํ๊ณ , ์์ชฝ ๋์์ ์ญ์ ๊ฐ ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
import java.util.ArrayList;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class InputRestrictedDeque<E> {
private static final int DEFAULT_CAPACITY = 10;
private E[] elements;
private int head;
private int tail;
private int size;
@SuppressWarnings("unchecked")
public InputRestrictedDeque() {
elements = (E[]) new Object[DEFAULT_CAPACITY];
head = 0;
tail = 0;
size = 0;
}
public void addLast(E e) {
if (size == elements.length) {
resize();
}
elements[tail] = e;
tail = (tail + 1) % elements.length;
size++;
}
public E removeFirst() {
if (size == 0) {
throw new NoSuchElementException();
}
E element = elements[head];
elements[head] = null; // for garbage collection
head = (head + 1) % elements.length;
size--;
return element;
}
public E removeLast() {
if (size == 0) {
throw new NoSuchElementException();
}
tail = (tail - 1 + elements.length) % elements.length;
E element = elements[tail];
elements[tail] = null; // for gatbage collection
size--;
return element;
}
public E getFirst() {
if (size == 0) {
throw new NoSuchElementException();
}
return elements[head];
}
public E getLast() {
if (size == 0) {
throw new NoSuchElementException();
}
return elements[(tail - 1 + elements.length) % elements.length];
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
private void resize() {
int newCapacity = elements.length * 2;
@SuppressWarnings("unchecked")
E[] newElements = (E[]) new Object[newCapacity];
for (int i = 0; i < size; i++) {
newElements[i] = elements[(head + i) % elements.length];
}
elements = newElements;
head = 0;
tail = size;
}
public ArrayList<E> toArrayList() {
return IntStream.range(0, size)
.mapToObj(i -> elements[(head + i) % elements.length])
.collect(Collectors.toCollection(ArrayList::new));
}
}
// Main
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
InputRestrictedDeque<Integer> deque = new InputRestrictedDeque<>();
deque.addLast(1);
deque.addLast(2);
deque.addLast(3);
ArrayList<Integer> dequeList = deque.toArrayList();
System.out.println("=== dequeList ===");
System.out.println(dequeList);
System.out.println("First element: " + deque.getFirst());
System.out.println("Last element: " + deque.getLast());
System.out.println("=== dequeList ===");
dequeList = deque.toArrayList();
System.out.println(dequeList);
System.out.println("Remove first element: " + deque.removeFirst());
System.out.println("Remove last elment: " + deque.removeLast());
System.out.println("=== dequeList ===");
dequeList = deque.toArrayList();
System.out.println(dequeList);
System.out.println("Deque size: " + deque.size());
System.out.println("Is deque empty? " + deque.isEmpty());
}
}
/*
=== ์ถ๋ ฅ ===
=== dequeList ===
[1, 2, 3]
First element: 1
Last element: 3
=== dequeList ===
[1, 2, 3]
Remove first element: 1
Remove last elment: 3
=== dequeList ===
[2]
Deque size: 1
Is deque empty? false
*/
1๏ธโฃ ์ฝ๋ ์ค๋ช .
-
๋ฐฐ์ด ์ด๊ธฐํ :
DEFAULT_CAPACITY
ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ด๊ธฐํํ๊ณ ,head
,tail
,size
๋ณ์๋ฅผ ์ด๊ธฐํํฉ๋๋ค. -
์ฝ์ ์ฐ์ฐ(
addLast
) : ์์๋ฅผ ๋ฑ์ ๋ง์ง๋ง ์ ์ถ๊ฐํฉ๋๋ค. ๋ฐฐ์ด์ด ๊ฐ๋ ์ฐจ๋ฉด ํฌ๊ธฐ๋ฅผ ๋ ๋ฐฐ๋ก ๋๋ฆฝ๋๋ค. -
์ญ์ ์ฐ์ฐ(
removeFirst
,removeLaste
) : ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๋ฅผ ๊ฐ๊ฐ ์ ๊ฑฐํฉ๋๋ค. -
์กฐํ ์ฐ์ฐ(
getFirst
,getLast
) : ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๋ฅผ ๋ฐํํฉ๋๋ค. -
๊ธฐํ ๋ฉ์๋ :
size
์isEmpty
๋ฉ์๋๋ ๋ฑ์ ํฌ๊ธฐ์ ๋ฑ์ด ๋น์ด ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค. -
๋ฐฐ์ด ํฌ๊ธฐ ์กฐ์ (
resize
) : ๋ฐฐ์ด์ด ๊ฐ๋ ์ฐฐ ๋ ํธ์ถ๋๋ฉฐ, ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ ๋ฐฐ๋ก ๋๋ฆฌ๊ณ ์์๋ฅผ ์ ๋ฐฐ์ด๋ก ๋ณต์ฌํฉ๋๋ค.
์ด ์์ ์์๋ ์์๋ฅผ ๋ฑ์ ๋์๋ง ์ฝ์ ํ ์ ์๋ ์ ๋ ฅ ์ ํ ๋ฑ์ ๊ตฌํํ์ต๋๋ค.
ํ์์ ๋ฐ๋ผ ์ด ๊ตฌํ์ ํ์ฅํ๊ฑฐ๋ ์์ ํ์ฌ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
5๏ธโฃ ์ถ๋ ฅ ์ ํ Deque(Output-Restricted Deque).
์ถ๋ ฅ ์ ํ Deque(Output-Restricted Deque)์ ์์ชฝ ๋์์ ์ฝ์ ์ด ๊ฐ๋ฅํ์ง๋ง, ํ์ชฝ ๋์์๋ง ์ญ์ ๊ฐ ๊ฐ๋ฅํ ์๋ฃ ๊ตฌ์กฐ์ ๋๋ค.
์ด ๊ตฌ์กฐ๋ ์์ชฝ ๋์์ ์์๋ฅผ ์ถ๊ฐํ ์ ์์ง๋ง, ์ญ์ ๋ ํ์ชฝ ๋์์๋ง ํ ์ ์์ต๋๋ค.
import java.util.ArrayList;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class OutputRestrictedDeque<E> {
private static final int DEFAULT_CAPACITY = 10;
private E[] elements;
private int head;
private int tail;
private int size;
@SuppressWarnings("unchecked")
public OutputRestrictedDeque() {
elements = (E[]) new Object[DEFAULT_CAPACITY];
head = 0;
tail = 0;
size = 0;
}
public void addFirst(E e) {
if (size == elements.length) {
resize();
}
head = (head - 1 + elements.length) % elements.length;
elements[head] = e;
size++;
}
public void addLast(E e) {
if (size == elements.length) {
resize();
}
elements[tail] = e;
tail = (tail + 1) % elements.length;
size++;
}
public E removeFirst() {
if (size == 0) {
throw new NoSuchElementException();
}
E element = elements[head];;
elements[head] = null; // for garbage collection
head = (head + 1) % elements.length;
size--;
return element;
}
public E getFirst() {
if (size == 0) {
throw new NoSuchElementException();
}
return elements[head];
}
public E getLast() {
if (size == 0) {
throw new NoSuchElementException();
}
return elements[(tail - 1 + elements.length) % elements.length];
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
private void resize() {
int newCapacity = elements.length * 2;
@SuppressWarnings("unchecked")
E[] newElements = (E[]) new Object[newCapacity];
for (int i = 0; i < size; i++) {
newElements[i] = elements[(head + 1) % elements.length];
}
elements = newElements;
head = 0;
tail = size;
}
public ArrayList<E> toArrayList() {
return IntStream.range(0, size)
.mapToObj(i -> elements[(head + i) % elements.length])
.collect(Collectors.toCollection(ArrayList::new));
}
}
// Main
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
OutputRestrictedDeque<Integer> deque = new OutputRestrictedDeque<>();
deque.addFirst(1);
deque.addLast(2);
deque.addFirst(0);
deque.addLast(3);
ArrayList<Integer> dequeList = deque.toArrayList();
System.out.println("=== dequeList === ");
System.out.println(dequeList);
System.out.println("First element: " + deque.getFirst());
System.out.println("Last element: " + deque.getLast());
System.out.println("=== dequeList === ");
dequeList = deque.toArrayList();
System.out.println(dequeList);
System.out.println("Remove first element: " + deque.removeFirst());
System.out.println("=== dequeList === ");
dequeList = deque.toArrayList();
System.out.println(dequeList);
System.out.println("Deque size: " + deque.size());
System.out.println("Is deque empty? " + deque.isEmpty());
System.out.println("=== dequeList === ");
dequeList = deque.toArrayList();
System.out.println(dequeList);
}
}
/*
=== ์ถ๋ ฅ ===
=== dequeList ===
[0, 1, 2, 3]
First element: 0
Last element: 3
=== dequeList ===
[0, 1, 2, 3]
Remove first element: 0
=== dequeList ===
[1, 2, 3]
Deque size: 3
Is deque empty? false
=== dequeList ===
[1, 2, 3]
*/
1๏ธโฃ ์ฝ๋ ์ค๋ช .
-
๋ฐฐ์ด ์ด๊ธฐํ :
DEFAULT_CAPACITY
ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ด๊ธฐํํ๊ณ ,head
,tail
,size
๋ณ์๋ฅผ ์ด๊ธฐํ ํฉ๋๋ค. -
์ฝ์ ์ฐ์ฐ(
addFirst
,addLast
) : ์์๋ฅผ ๋ฑ์ ์ฒซ ๋ฒ์งธ ๋๋ ๋ง์ง๋ง์ ์ถ๊ฐํฉ๋๋ค. ๋ฐฐ์ด์ด ๊ฐ๋ ์ฐจ๋ฉด ํฌ๊ธฐ๋ฅผ ๋ ๋ฐฐ๋ก ๋๋ฆฝ๋๋ค. -
์ญ์ ์ฐ์ฐ(
removeFirst
) : ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ถ๋ ฅ ์ ํ ๋ฑ์์๋ ์ฒซ ๋ฒ์งธ ์์๋ง ์ ๊ฑฐํ ์ ์์ต๋๋ค. -
์กฐํ ์ฐ์ฐ(
getFirst
,getLast
) : ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๋ฅผ ๋ฐํํฉ๋๋ค. -
๊ธฐํ ๋ฉ์๋ :
size
์isEmpty
๋ฉ์๋๋ ๋ฑ์ ํฌ๊ธฐ์ ๋ฑ์ด ๋น์ด ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค. -
๋ฐฐ์ด ํฌ๊ธฐ ์กฐ์ (
resize
) : ๋ฐฐ์ด์ด ๊ฐ๋ ์ฐฐ ๋ ํธ์ถ๋๋ฉฐ, ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ ๋ฐฐ๋ก ๋๋ฆฌ๊ณ ์์๋ฅผ ์ ๋ฐฐ์ด๋ก ๋ณต์ฌํฉ๋๋ค.
์ด ์์ ์์๋ ์์๋ฅผ ๋ฑ์ ์์ชฝ ๋์์ ์ฝ์ ํ ์ ์๊ณ , ์ฒซ ๋ฒ์งธ ์์๋ง ์ ๊ฑฐํ ์ ์๋ ์ถ๋ ฅ ์ ํ ๋ฑ์ ๊ตฌํํ์ต๋๋ค.
ํ์์ ๋ฐ๋ผ ์ด ๊ตฌํ์ ํ์ฅํ๊ฑฐ๋ ์์ ํ์ฌ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.