본문 바로가기

분류 전체보기846

JDK 동적 프록시, CGLIB JDK 동적 프록시 JDK 동적 프록시는 Java에서 리플렉션을 활용하여 인터페이스를 구현한 클래스의 프록시를 런타임에 동적으로 생성하는 기술이다. 이를 통해 메서드 호출 등의 작업을 프록시 객체를 통해 중간에서 처리할 수 있다. JDK 동적 프록시의 한계점 인터페이스만 프록시 가능 : JDK 동적 프록시는 인터페이스를 구현한 클래스에만 적용할 수 있으며, 클래스의 메서드에는 적용할 수 없다. final 메서드와 private 메서드 : final로 선언된 메서드나 private 메서드는 프록시로 래핑할 수 없다. 생성자 호출 : JDK 동적 프록시는 생성자 호출을 가로채지 못하므로, 객체 생성 시 특별한 작업을 수행할 수 없다. JDK 동적 프록시의 구현 원리와 기술 JDK 동적 프록시는 ‘java.l.. 2023. 9. 8.
상속보다 합성을 이용하는 이유 상속의 단점 상속의 단점은 다음과 같다. 캡슐화가 깨지고 결합도가 높아진다. 상위 클래스와 하위 클래스의 관계가 컴파일 시점에 결정되어 구현에 의존한다. 하위 클래스는 상위 클래스의 구조를 알고 있어야 사용이 가능하다. super를 사용하면 상위클래스의 구현이 노출되고, 강하게 결합된다. 유연성 및 확장성이 떨어진다. 상위 클래스에 변경점이 생기면 하위 클래스도 변경이 될 수 있다. 다중상속에 의한 문제가 발생할 수 있다. 자바는 다중 상속이 불가하다. 클래스 폭팔 문제가 발생할 수도 있다. 클래스를 몇단으로 상속해서 해결하거나, 조합의 수만큼 새로운 클래스를 만들어야 된다. 합성으로 해결 합성을 이용하면 의존하는 객체를 교체하는 것이 쉬워져서 설계가 유연해진다. 상속은 클래스를 통해 강하게 결합되지만,.. 2023. 9. 6.
[OS] CPU Scheduling CPU and I/O Bursts CPU 버스트 : CPU만 연속적으로 사용 I/O 버스트 : I/O를 실행하고 있을 때 프로그램은 CPU 버스트 + I/O 버스트 조합으로 구성되어 있지만, 프로그램마다 그 빈도는 다르다. CPU 버스트 시간 분포 여러 종류의 job(=process)이 섞여 있기 때문에 CPU 스케줄링이 필요하다. Interactive job 에게 적절한 response 제공 요망 CPU와 I/O 장치 등 시스템 자원을 골구루 효율적으로 사용 프로세스의 특성 분류 프로세스는 특성에 따라 다음 두 가지로 나뉜다. I/O-bound process CPU를 잡고 계산하는 시간 보다 I/O에 많은 시간이 필요한 job (many short CPU burst) CPU-bound process 계.. 2023. 9. 4.
[OS] Process Management 프로세스 생성(Process Creation) Copy-On-Write(COW) 기법 - Write가 발생했을 때 Copy한다.ㄹ 부모 프로세스(Parent Process)가 자식 프로세스(Children Process) 생성 프로세스의 트리(계층 구조) 형성 프로세스는 자원을 필요로 한다. 운영체제로부터 받는다. 부모와 공유한다. 자원의 공유 부모와 자식이 모든 자원을 공유하는 모델 일부를 공유하는 모델 전혀 공유하지 않는 모델 수행(Execution) 부모와 자식은 공존하며 수행되는 모델 자식이 종료(terminate)될 때 까지 부모가 기다리는(wait) 모델 주소 공간(Address Space) 자식은 부모의 공간을 복사함(binary and OS data) 자식은 그 공간에 새로운 프로그램을 올.. 2023. 9. 3.
[OS] Process 프로세스란? 프로세스는 실행중인 프로그램을 말한다. 프로세스의 문맥(context) CPU 수행 상태를 나타내는 하드웨어 문맥 Program Counter 각종 register 프로세스의 주소 공간 code, data, stack 프로세스 관련 커널 자료 구조 PCB(Process Control Block) Kernel stack 프로세스의 문맥이란 CPU가 프로세스를 실행하면서 필요한 내용들로, 프로세스 중단 시 보존되고 다시 복구되어야 하는 프로세스의 모든 실행 정보 프로세스의 상태(Process State) 프로세스는 상태(state)가 변경되며 수행된다. running cpu를 잡고 instruction을 수행중인 상태 ready cpu를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고) bl.. 2023. 9. 1.
스레드를 무한정 만든다면? 상황 가정 public class Main { public static void main(String[] args) { while (true) { Test test = new Test(); test.start(); } } private static class Test extends Thread { @Override public void run() { try { Thread.sleep(Long.MAX_VALUE); } catch (InterruptedException e) { throw new RuntimeException(e); } } } } 스레드를 무한정 생성해 sleep 시켜본다. 이때 무슨 상황이 발생할까? 결과 Exception in thread "main" java.lang.OutOfMemor.. 2023. 8. 31.