java

익명(anonymous) 객체는 이름이 없는 객체를 말한다. 익명 자식 객체 생성 기본적으로 사용하는 방식 class Child extends Parent { } class A{ Parent filed = new Child(); // 필드에 자식 객체를 대입 void method(){ Parent localVar = new Child(); // 로컬 변수에 자식 객체를 대입 } }자식 클래스가 재사용되지 않고, 오로지 해당 필드와 변수의 초기값으로만 사용할 경우라면 익명 자식 객체를 생성해서 초기값으로 대입하는 것이 좋은 방법이다. 부모클래스 [필드|변수] = new 부모클래스("매개값", "..."){ // 필드 // 메소드 };Person.java package anonymous; public cla..
람다식 람다식이란? 자바8부터는 객체 지향 프로그래밍과 함수적 프로그래밍을 혼합할 수 있게 람다식을 제공한다. 람다식은 익명 함수(anonymous function)를 생성하기 위한 식으로 객체 지향 언어보다는 함수 지향 언어에 가깝다. 람다식 -> 매개 변수를 가진 코드 블록 -> 익명 구현 객체 Runnable 인터페이스의 익명 객체를 생성하는 전형적인 코드 방식 Runnable runnable = new Runnable(){ public void run(){ ... } }; Runnable runnable = ()-> { ... }; 람다식은 "(매개변수) -> {실행코드}" 형태로 작성된다. 런타임 시에 인터페이스의 익명 구현 객체로 생성된다. 어떤 인터페이스를 구현할 것인가는 대입되는 인터페이스..
eclipse.ini을 통해 이클립스를 최적화해보자 이클립스를 처음 설치하고 실행하다보면 Heap 메모리 사이즈가 적게 설정이 된다. 그렇기 때문에 이클립스를 사용하다보면 시스템 과부하나 메모리 부족현상을 경험할 수 있을 것이다. 이클립스를 사용할 때 메모리를 충분히 늘려주고 사용하는 것이 정신겅강에 좋다. eclipse 메모리 설정방법 eclipse가 설치된 폴더에 eclipse.ini 이라는 파일이 존재한다. 이 파일의 용도는 eclipse 툴의 설정파일이라고 생각하면 된다. 힙사이즈를 늘려주려면 이 eclipse.ini 파일 끝에 옵션을 추가하면 된다. (-Xms204m -Xmx5096m) eclipse.ini (내이클립스 설정 파일) -startup plugins/org.eclipse.equino..
Comparable과 Comparator Comparable, Comparator 항상 헷갈리는 부분이다. 예전에 포스팅을 했지만 항상 까먹기 때문에,,, 책에 나온김에 다시 한번 정리할겸 포스팅을 한다. (https://cornswrold.tistory.com/23)TreeSet, TreeMap은 정렬을 위해 java.lang.Comparable 구현한 객체를 요구한다. 우리가 아는 Wrapper 객체는 모두 Comparable 인터페이스를 구현하고 있다.(Integer, Double, String ..)Comparable에는 compareTo() 메소드가 존재하고 적절하게 오버라이딩하여 정렬을 할 수 있게 한다. 리턴타입메소드설명 intcompareTo(T o)객체가 같으면 0 리턴 주어진 객체보다 ..
콜백 방식의 작업 완료 통보 자바스크립트를 조금해보면 콜백방식이 익숙할 것이다. 자바에서도 스레드 작업이 완료되면 특정 메소드를 자동 실행할 수 있는 콜백 방식을 이용할 수 있다.블로킹 방식 콜백방식ExecutorService는 콜백을 위한 기능을 제공하지 않는다. Runnable 클래스를 작성할 때 콜백 기능을 구현할 수 있는데 java.nio.channels.CompletionHandler를 이용해서 구현할 수 있다.(NIO 패키지 안에 존재, 비동기 통신에서 콜백 객체를 만들때 사용된다.) CompletionHandler callback = new CompletionHandler(){ @Override public void completed(V result, K attachment){} // 작업이..
블로킹 방식의 작업 완료 통보_2 작업 처리 결과를 외부 객체에 저장 스레드가 작업 처리를 완료하고 외부 Result 객체에 저장하면, 애플리케이션에서 Result 객체를 사용하여 작업을 진행할 수 있다. (대개 Result 객체는 공유객체가 되어, 두 개 이상의 스레드 작업을 취합할 목적으로 이용된다.)ExecutorService.submit(Runnable task, V result) 에서 V가 Result 타입이 된다. class Task implements Runnable{ Result result; Task(Result result){this.result = result;} @Override public void run(){ // 작업내용, result 저장 } } class Result{ //..
블로킹 방식의 작업 완료 통보_1 ExecutorService의 submit() 메소드는 Runnable, Callable 작업을 스레드 풀의 작업 큐에 저장하고 즉시 Future 객체를 리턴한다.Future 객체는 작업이 완료될 때까지 기다렸다가(블로킹되었다가) 최종 결과를 얻는데 사용된다. (그래서 Future 객체를 지연 완료(pending completion)객체라고 한다.)Future의 get() 메소드를 호출하면 스레드가 작업을 완료할 때까지 블로킹되었다가 작업을 완료하면 처리 결과를 리턴한다. (블로킹을 사용하는 작업 완료 통보 방식) 주의할 점은 Future의 get() 메소드는 스레드가 작업이 완료될때까지 블로킹되므로 다른 코드를 실행할 수 없다는 것이다. 따라서 get() 메소드를 호출..
2019.03.14 - [프로그래밍 노트/JAVA] - [JAVA] 블로킹 방식의 작업 완료 통보_1 (스레드풀_2) 2019.03.16 - [프로그래밍 노트/JAVA] - [JAVA] 블로킹 방식의 작업 완료 통보_2 (스레드풀_3) 2019.03.16 - [프로그래밍 노트/JAVA] - [JAVA] 콜백 방식의 작업 완료 통보 (스레드풀_4) 스레드풀 병렬 작업 처리가 많아지면 스레드 수가 증가되고 그에 따른 스레드 생성과 스케줄링으로 인해 CPU가 바빠져서 메모리 사용량이 늘어난다. (애플리케이션 성능 저하) 따라서 스레드의 폭증을 막으려면 스레드풀(ThreadPool)을 사용해야 한다. 스레드 풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 큐(Queue)에 들어오는 작업들을 ..
스레드 그룹 스레드 그룹(ThreadGroup)은 관련된 스레드를 묶어서 관리할 목적으로 이용된다. JVM이 실행되면 system 스레드 그룹을 만들고, JVM 운영에 필요한 스레드들을 생성해서 system 스레드 그룹에 포함시킨다. 그리고 system의 하위 스레드 그룹으로 main을 만들고 메인 스레드를 main 스레드 그룹에 포함시킨다. 모든 스레드는 그룹을 갖으며 스레드 그룹을 명시적으로 선언하지 않으면 자신을 생성한 스레드와 같은 그룹에 속한다. public class ThreadInfoExample { public static void main(String[] args) { AutoSaveThread autoSaveThread = new AutoSaveThread(); autoSaveThrea..
스레드간 협업(wait, notify, notifyAll) 경우에 따라 두 스레드가 교대로 번갈아가며 실행해야 할 경우가 있다. (정확한 교대작업이 필요한 경우, 한 스레드가 작업이 끝나며 상대방 스레드의 일시정지를 풀어주고 자신은 일시정지로 만들어야 한다.)공유객체 를 사용하여 두 스레드가 작업할 내용을 각각 동기화 메소드로 구분해 놓은 후 한 스레드가 작업이 완료되면 notify()메서드를 호출한다.notify() => 일시 정지 상태에 있는 다른 스레드를 실행 대기 상태로 만듬 wait() => 스레드를 일시 정지 상태로 만듬위 두 메서드는 Thread 클래스가 아닌 Object 클래스에 선언된 메소드이므로 모든 공유 객체에서 호출이 가능하다. (동기화블록에서만 사용 가능) 스레드 작업 내용을 동기..
깡냉쓰
'java' 태그의 글 목록 (5 Page)