자바로 Queue를 직접 구현해봤다. 큐는 자료구조로, FIFO(First-in, First-out)의 특성을 가지고 있다. 두가지 방법을 사용해서 구현했다. 배열과 Node(연결 리스트) 방법 두가지다. 배열을 이용하여 구현 ArrayQueue.class public class ArrayQueue { private int[] arr; private int size; public ArrayQueue() { arr = new int[20]; } public int getSize() { return size; } public void setSize(int size) { this.size = size; if(size 1) { for(int i=1; i
LinkedList ArrayList와는 하나의 큰 배열을 사용하는 방식이다. 이와는 다르게 LinkedList는 각각의 노드를 연결하는 방식을 사용한다. 연결 리스트로 구현되어 있고 각각의 데이터는 노드(Node)로 구성되어 연결되어 있는 구조다. 각 노드는 데이터와 다음 노드의 값을 가지고 있다. LinkedList의 장점은 데이터 삽입/삭제가 용이하다는 점이다. 원하는 위치 어디에서나 삽입/삭제 시에 변경되는 노드만 다시 연결해주면 되기 때문에 빠른 연산이 가능하다. LinkedList에서의 삽입 과정 LinkedList에서의 삭제 과정 그래서 데이터의 삽입/삭제가 자주 발생하는 경우에 LinkedList를 사용하는 것이 좋다. 그러나, LinkedList는 순차접근만 가능하기 때문에 인덱스를 이용..
1. JVM이란? JVM은 자바 가상 머신으로 Java Virtual Machine의 줄임말이다. Java는 운영체제(OS)에 구애받지 않고 실행할 수 있는데 , JVM이 그 역할을 한다. 자바 프로그램은 컴퓨터가 이해할 수 있는 언어(기계어)인 바이너리코드가 아닌 바이트코드(가상 머신이 이해할 수 있는 코드)로 되어 있다. 여기서 JVM의 필요성을 알 수 있다. 기계어는 cpu의 제조사마다 달라서 하나의 언어가 아니다. 다 다른 컴퓨터 환경에서 실행하려면 각각의 제조사에 맞는 기계어를 알고 있어야 한다. 그렇지만 개발자가 모든 종류의 cpu의 기계어를 알고 있기에 매우 번거롭다. 그래서 JVM이 자바 프로그램을 다양한 cpu 환경에서 이식성 문제 없이 실행할 수 있도록 도와주는 역할을 하는 것이다. 이..
Stream (스트림) 스트림은 자바8부터 추가된 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. 데이터 컬렉션 반복을 멋지게 처리하는 기능이라고 생각하면 이해가 쉽다. Iterator와 비슷한 역할을 하지만 람다식으로 처리하기 때문에 코드를 좀 더 간결하게 할 수 있으며, 내부 반복자를 사용하므로 병렬처리가 쉽다는 점에서 차이가 있다. Iterator를 이용해 ArrayList의 요소를 모두 처리하기 위한 방법은 다음과 같다. ArrayList arrayList = new ArrayList(Arrays.asList(1,2,3)); Iterator iter = arrayList.iterator(); while(iter.hasNext()) { int num = iter..
자바를 사용하다보면 abstract 와 interface 의 기능과 차이가 헷갈릴 때가 많다. 그래서 정리를 해보고자 글을 쓰게 되었다. abstract (추상클래스) 추상클래스는 0개/하나 이상의 추상메소드를 가지고 있다. 추상메소드는 추상메소드는 함수의 바디가 아직 구현되어 있지 않은 abstract로 정의된 메소드를 말한다. public abstract class Car { /* 추상 메소드 */ public abstract void drive(); public abstract void stop(); /* 일반 메소드 */ public void startCar() { System.out.println("시동을 켭니다"); } } public class AICar extends Car{ @Overri..