목록Java/Java의 정석 (20)
Hyunebee
람다식 메서드를 하나의 식처럼 표현한것 메서드를 람다식으로 표현하면서 메서드의 이름과 반환값이 없어지므로 익명함수라고도 합니다. 람다식의 장점 1. 코드를 간결하게 만들수 있다. 2. 가독성이 증가 3. 생산성이 증가 람다식의 단점 1. 재사용이 불가능하다. 2. 재귀호출에 사용하기에 부적절 하다. 3. 디버깅이 어렵다. 함수형 인터페이스 위에서 람다식 ≒ 메소드 같은 것처럼 설명했지만 메소드보다는 익명 클래스의 객체와 동등하다. interface CompareTool { public abstract int getMaxNum(int num1, int num2); } CompareTool cTool = new CompareTool() { @Override public int getMaxNum(int num..
람다식 쉽게 말해서 메서드를 하나의 식으로 표현한 것이다. Arrays.setAll(arr, (i) -> (int)(Math.random() * 5)+1); 이런식으로 보다 간단하게 사용할 수 있다. 람다식의 작성은 기존 반환타입 메서드이름(매개변수 선언){ -------------------내용----------------- } 람다식 반환타입 메서드이름(매개변수 선언){ -------------------내용----------------- } 함수형 인터페이스 자바에서 모든 메소드는 클래스 내에 포함되어야 하는데 람다식은 어떤 클래스에 포함될까?? 사실 람다식은 메소드가 아니라 익명 클래스 객체이다. 우리는 이 익명객체를 참조변수에 대입할 수 있다. 대신 조건이 있다. 참조형이니 클래스와 인터페이스가..

쓰레드의 스케쥴링 관련 메소드 static void sleep(long millis) static void sleep(long millis, int nanos) 지정된 시간동안 쓰레드를 일시정지 시킴, 지정한 시간이 지나면 자동으로 실행대기상태가 된다. void join() void join(long millis) void join(long millis, int nanos) 지정된 시간동안 쓰레드가 실행되도록 한다. 지정된 시간이 지나 작업이 종료되면 join()을 호출한 쓰레드로 다시 돌아와 실행을 계속한다. void interrupt() sleep()이나 join()에 의해 일시정지상태인 쓰레드를 깨워서 실행대기상태로 만든다. 해당 쓰레드에서는 Exception이 발생함으로써 일시정시에서 벗어나게 된..

싱글 쓰레드와 멀티쓰레드의 비교 왼쪽 그림의 경우와 오른쪽의 그림의 차이는 무엇일까. 멀티 쓰레드를 활용하면 단일 쓰레드를 사용하는 것보다 시간이 오래걸리게 된다. 그 이유는 쓰레드간의 문맥교환이 일어나기 때문이다. 단점이 있다면 장점도 있다. 이렇게 진행한다면 사용자로 하여금 두개의 작업이 동시에 일어나는것 처럼 느끼게 할 수 있다. 쓰레드의 우선순위 쓰레드 또한 우선순위를 지정해 줄 수 있다. 쓰레드가 수행하는 작업의 중요도에 따라 쓰레드의 우선순위를 서로 다르게 지정하여 특정 쓰레드의 작업시간을 늘려줄 수 있다. void setPriority(int newPriority) : 쓰레드의 우선순위를 지정 int getPriority : 우선 순위를 반환 Thread class를 보면 최대 최소 순위와 ..

Thread 쓰레드의 구현은 크게 2가지로 구분 -Thread의 클래스를 상속받아서 구현 -Runnable의 인터페이스를 구현 둘의 차이점 Runnable 인터페이스를 구현한 경우 Runnable을 구현한 클래스의 인스턴스를 생성한 다음, 이 인스턴스를 Thread클래스의 생성자의 매개변수로 제공한다. Thread 클래스의 문서이다. class ThreadEx1 { public static void main(String args[]) { ThreadEx1_1 t1 = new ThreadEx1_1(); Runnable r = new ThreadEx1_2(); Thread t2 = new Thread(r); // 생성자 Thread(Runnable target) t1.start(); t2.start(); }..
Enum 서로 관련된 상수를 편리하게 선언하기 위한 것 열거형 상수간의 비교에는 비교 연산자를 사용하지 못한다 이때 CompareTo()를 사용해 비교를 할 수 있다. ex) class Unit{ int x,y = 0; enum Direction{West, East, South, North} // 혈거형 선언 Direction direction; void init(){ direction = Direction.East; // East로 초기화 } } 열거형의 정의된 상수를 출력하려면 다음과 같이 실행해야 한다. Direction[] dArr = Direction.values(); for(Direction d : Direction.values()){ System.out.printf("%s=%d%n", d.n..
Generics 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일시 타입체크를 해주는 기능이다. 컴파일 시에 체크하기 때문에 객체의 타입 안전성을 높이고 형변환의 번거로움이 줄어든다. Generics은 클래스와 메서드에 선언할 수 있다. ex) 클래스 class init{ Object item; void setItem(Object item){ this.item = item; } Object getItem() { return item; } } class init{ // T는 타입변수 T item; void setItem(T item){ this.item = item; } T getItem() { return item; } } 아래 처럼 변경이 가능하다. T는 타입변수라고 하며 T이외에 다른 문..

HashSet Set인터페이스를 구현 Set의 대표적인 특징처럼 중복된 요소를 저장하지 않는다. 그리고 순서를 보장하지 않기 때문에 저장 순서를 유지하고자 한다면 LinkedHashSet을 사용한다. TreeSet TreeSet은 이진 검색 트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스이다. 이진 검색 트리는 정렬, 검색, 범위 검색에 높은 성능을 보이는 자료 구조이다. 지금은 더 향상된 레드-블랙 트리로 구현되어 있다. 이또한 Set인터페이스를 구현 중복된 요소를 저장하지 않고 순서를 보장하지 않는다. 이진 검색트리의 노드는 class TreeNode{ TreeNode left; TreeNode right; Object element; } 왼쪽 오른쪽 자식 노드와 객체를 저장하기위한 변수로..