본문 바로가기

JAVA

(72)
JAVA(2022.06.10) - 제네릭(Generic) Generic 매개변수화 타입을 사용하여 구현한다 다만, 생성자의 경우 E를 사용하지 않는다 ex) 매개변수 타입 사용 //클래스 생성 public class LinkedList //메소드1 public void A(E obj){} //메소드2 public E B(){} ex) 매개변수를 사용하여 배열 정의 E[] arr1 = (E[]) new Object[size];
JAVA(2022.06.09) - 시간복잡도 시간복잡도 - 시간 복잡도에서는 모든 상수를 삭제한다 - 시간 복잡도가 log 함수를 포함할 경우 밑은 무시한다 - Input은 항상 0보다 크다 - 입력값이 많을 수록 더 많은 작업을 한다 Big - O O(1) input값과 상관없이 일정함 O(n) input값과 비례하여 시간복잡도가 증가함 O(n^2) n개의 데이터를 받았을 때, 각각의 요소에서 n번씩 루트를 돌릴 때의 시간복잡도
JAVA(2022.06.08) - 람다식 람다(lamda) 익명 함수(Anonymous functions)를 지칭한다 함수를 단순하게 표현하기 위해 사용된다 사용방법 (매개변수목록) -> {함수몸체 } 타입을 추론할 수 있을 경우, 타입 생략 가능 매개변수가 하나일때 괄호 생략 가능 하나의 명령문으로 이루어졌을 때 중괄호 생략 가능 return문으로 이루어졌을 때 중괄호 생략 불가 ex1) 람다식을 통해 간단하게 표현하기 //기존코드 new Object() int min(int x, int y) { return x x < y ? x:y; ex2) return문은 중괄호 생략불가 //기존코드 int add(int x, int y) { return x+y; } //람다식(return문이기 때문에..
JAVA(2022.06.07) - 데몬 쓰레드 일반 쓰레드의 작업을 돕는 보조적인 쓰레드 일반 쓰레드가 모두 종료되면 데몬 쓰레드는 강제종료가 아닌, Runnable 상태로 돌아간다 > 매우 중요함 가비지 컬렉션, 워드 프로세서 자동저장, 화면 자동갱신 등에서 사용됨 setDaemon(true) 메소드를 사용하여야 하고, 스레드가 실행되기 전에만 호출해야 예외가 발생하지 않는다 무한루프와 조건문을 통해 대기하도록 만들고 조건 충족 시 작업 후 다시 대기하도록 만든다 코드예시 // Runnable을 구현하는 DaemonThread클래스를 작성 public class DaemonThread implements Runnable { // 무한루프안에서 0.5초씩 쉬면서 데몬쓰레드가 실행중입니다를 출력하도록 run()메소드를 작성 @Override publi..
JAVA(2022.06.06) - 쓰레드와 상태제어(wait, notify) wait와 notify는 동기화된 블록 안에서 사용해야 한다 wait()를 만나게 되면 MonitoringLock을 가지고 있는 경우 권한을 놓고 대기한다 ex) public class ThreadB extends Thread{ // 해당 쓰레드가 실행되면 자기 자신의 모니터링 락을 획득 // 5번 반복하면서 0.5초씩 쉬면서 total에 값을 누적 // 그후에 notify()메소드를 호출하여 wiat하고 있는 쓰레드를 깨움 int total; @Override public void run(){ synchronized(this){ for(int i=0; i
JAVA(2022.06.05) - 쓰레드와 상태제어(join) join Thread가 종료될 때까지 기다려야 할 때 Thread.join()을 사용한다 ex) public class MyThread5 extends Thread{ public void run(){ for(int i = 0; i < 5; i++){ System.out.println("MyThread5 : "+ i); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } // run } public class JoinExam { public static void main(String[] args) { MyThread5 thread = new MyThread5(); // Thread 시작 thread.st..
JAVA(2022.06.04) - 쓰레드와 상태제어 쓰레드를 실행하면 Runnable상태와 Running 상태가 된다 실행되는 쓰레드에서 sleep(), wait() 를 만나게 되면 쓰레드는 Blocked 상태가 된다 sleep() 메서드는 특정시간이 지나면 Blocked 상태를 스스로 빠져나와 Runnable이나 Running 상태가 된다 wait() 메서드는 notify()나 notifyAll() 메서드를 호출하기 전에 Blocked 상태에서 해제되지 않는다 notify() notifyAll() 메서드는 wait()메서드로 일시 정지 된 쓰레드를 Runnable상태로 만든다 wait() 메서드는 호출되면 MonitoringLock이 해제되므로 대기 중인것이 실행된다 쓰레드의 run() 메서드가 종료되면 Dead 상태가 된다 yield() 메서드는 다른..
JAVA(2022.06.03) - 메소드 동기화 - 멀티 쓰레드 환경에서 여러 쓰레드가 동시에 변수에 접근하는 것을 막기 위해 메소드 동기화(Synchronization)를 사용 - 쓰레드의 실행순서를 지정해야 할 때도 사용 방법 - 메소드 앞에 synchronized를 붙인다 - 메소드에 synchronized가 붙어있으면, 먼저 호출된 메소드가 monitoring Lock을 얻는다 - monitoring Lock을 얻은 메소드는 wait()를 만나거나 실행이 종료될 때 까지 우선권을 얻고 계속 출력된다 - 동기화 되지 않은 메소드들은 synchronized메소드들이 실행되더라도 관계없이 실행된다 - 대기시간이 길어지는 것을 대비하여 메소드 전체가 아닌 문제를 발생시킬 부분에만 synchronzied블록을 사용한다 ex) //다른 A메소드가 moni..