Lambda Java8 이후로 람다 표현식이 생겼고, 그 표현식을 구성하는데 사용되는 화살표 연산자가 생겨났다. 람다 이전의 자바는 Interface를 사용하거나 abstract 클래스를 사용하여 구현해야 되기 때문에 가독성 부분에서 문제가 발생한다. // 두 수를 더하는 람다식 (a, b) -> System.out.println(a+b) 위와 같은 식에서 일회용이기 때문에 재사용이 불가능하다. 하지만 한번만 쓰고 말 것이라면 굳이 함수를 만들지 않고 사용할 수 있으므로 편리하다. 위 식을 볼때 a,b는 int형인지 어떻게 알수 있을까? 다른 언어에서 내세운 특징인 컴파일러가 스스로 매개 타입 변수가 무엇인지를 알 수 있도록 하는 타입 추론 기능을 사용하였다. 함수형 인터페이스 추상 메소드를 딱 하나만 ..
제네릭 제네릭은 특정 타입을 지정하지 않고 사용자에 따라 타입이 지정되는 것을 말한다. 잘못된 타입이 사용되었을 때 그 문제를 컴파일 과정에서 제거할 수 있다. class A { T type; } public static void main(String[] args) throws IOException { A i = new A(); // int 자료형으로 변환 A s = new A(); // String 자료형으로 변환 } 위 코드에서 A 클래스는 어떤 형태가 들어오면 그에 따른 타입으로 변환된다. 그럴 때 제네릭에 대해 제한을 걸 수 있는데 그것이 바운디드 타입이다. class A{ // 타입을 Numaber 클래스에 있는 타입으로 제한이 가능 ... } public static void main(Stri..
Stream 스트림은 byte 형태로 데이터를 운반하는데 사용하는 연결 통로이다. 단, 단방향으로 이루어져 있기 때문에 하나의 스트림으로 입출력을 동시에 할 수는 없다. Java에서는 InputStream, OutputStream을 사용할 수 있다. Java의 Stream은 여러 개의 입력을 받고 출력을 하려고 해도 하나의 값만 출력한다. InputStream in = System.in; OutputStream out = System.out; int data = in.read(); out.write(data); out.flush(); out.close(); Buffer 버퍼는 내부의 고정값이 아닌 가변적인 값의 버퍼를 받아 입력받은 값을 저장해 두었다가 버퍼가 가득 차거나 개행 문자가 나오면 한 번에 전..
스케줄링 알고리즘 구현 1. FIFO(First In First Out) public class FIFO { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); Queue start = new LinkedList(); Queue time = new LinkedList(); for (int i = 0; i < n; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); start.add(In..
멀티쓰레드 프로그래밍 Thread 클래스 , Runnable 인터페이스 스레드를 작성하는 방법에는 2가지 방법이 있다. class MyThread extends Thread{ private int count = 0; @Override public void run(){ System.out.println("Thread Start"); for(int i = 0; i>100; i++){ count++; Thread.sleep(10); } System.out.println("Thread End and Count :" + count); } } class MyRunnable implements Runnable{ private int count = 0; @Override public void run(){ System...
인터페이스 인터페이스 정의 방법 public interface A{ public static final int num = 999; public abstract int add(int a, int b); } 인터페이스를 정의하기 위해선 일반 클래스 에서 정의하던 것에서 class를 interface로 바꾸어 주면 된다. 단, 내부의 필드는 public static final, 메서드는 public abstract 으로 지정해 주어야 된다. 모든 인터페이스에 적용이 되어야 하므로 생략이 가능하다. 인터페이스 구현 public class AA implements A{ @override public int add(int a, int b){ return a+b; } } 인터페이스를 가져와 사용하기 위해선 imple..
Package Java에서 package는 클래스를 모아 둔 것으로 특정 기능을 하기 위해 필요한 클래스들을 그룹화 한 것이다. package A class A{ } package B class B{ } package A public static void main(String args[]){ B b = new B(); // 호출 불가 } 위와 같은 상황일 때 main에서 B 클래스는 B 패키지에 있으므로 호출을 할 수 없다. Import Java에서 다른 패키지에 있는 클래스를 사용하기 위해서는 import문을 사용하여 해당 패키지에 있는 클래스를 가져다 사용할 수 있다. 단, 가져오려는 패키지의 클래스와 기존의 사용하던 클래스의 이름이 같을 경우 패키지 이름까지 명시 해야된다. package A imp..