[JAVA] JVM이란?
·
JAVA
자바는 JVM(Java Virtual Machine)이라는 가상머신 위에서 실행되는 언어입니다. 자바 소스 파일(.java)는 자바 컴파일러(javac)에 의해 자바 바이트코드(.class) 파일로 변환됩니다이 클래스 파일을 Class Loader가 읽어들여 JVM의 Runtime Data Area에 로딩하면서 JVM 실행이 시작됩니다. JVM 구조Class Loader클래스 파일(.class)을 JVM에 로딩로딩된 클래스를 링크하고 초기화런타임 시 동적으로 클래스를 로드 동작 과정:Loading: 클래스 파일을 찾아서 JVM 메모리로 로드Linking:Verification: 바이트코드 검증Preparation: static 변수 메모리 할당 및 기본값 설정Resolution: 심볼릭 참조를 실제 참..
[JAVA] Reflection 이란?
·
JAVA
오늘은 자바의 리플렉션(Reflection) 에 대해 자세히 알아보려 합니다.이전에 작성했던 JPA는 왜 기본 생성자가 필요할까? 라는 포스팅에서 리플렉션 개념을 간단히 언급한 적이 있었는데요,이번에는 그보다 조금 더 깊이, 그리고 조금 더 쉽게 정리해보려 합니다.ReflectionReflection은 자바에서 런타임 시에 클래스, 메서드, 필드, 어노테이션 등의 정보를 동적으로 조회하거나 수정할 수 있는 API입니다 자바는 컴파일 시점에 타입이 결정되는 정적 언어입니다. 이러한 자바에서는 모든 클래스와 인터페이스가 JVM에 의해 Class 객체로 관리됩니다. 우리가 작성한 코드는 컴파일러에 의해 .class 파일로 변환되고,이 바이트코드는 클래스 로더 를 통해 JVM의 메모리 영역에 로딩됩니다. .cl..
[JAVA] 애너테이션이란?? 커스텀 애너테이션 만들기
·
JAVA
안녕하세요. 블로거 절박한 개발자입니다.오늘은 자바의 애너테이션에 대해 알아보려 합니다. 기존에 제공되는 기본 애너테이션뿐만 아니라, 직접 커스텀 애너테이션을 만드는 방법까지 함께 정리해보겠습니다. 실제로 코드로 구현해보며 알아가보겠습니다.애너테이션프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨것입니다.주석처럼 프로그래밍 언어에 영향을 미치지 않으면서 다른 프로그램에게 유용한 정보를 제공할 수 있습니다. 컴파일러, 프레임워크(Spring, Hibernate), 또는 빌드 도구 등이 애너테이션 정보를 읽고 특정 동작을 수행합니다.@Override는 컴파일러에게 "이 메서드는 부모 클래스의 메서드를 오버라이드한다"는 정보를 알려주어 검증을 도와줍니다.선언적 프로그래밍 : ..
[JAVA] 스레드(Thread)에 더 자세히
·
JAVA
안녕하세요. 블로거 절박한 개발자입니다.이번에는 자바의 스레드에 좀 더 공부해보고자 합니다. 저번에 포스팅 했던 내용이 조금 부실했던거 같아서 새롭게 작성하고자 합니다.참조한 내용은 김영한님의 강의 자료입니다.. 제가 직접 영상을 보고 공부한게 아니라서 조금 다를 수 있습니다. 스레드의 생명 주기스레드는 다음과 같은 생명 주기를 같습니다.New : 스레드가 생성되었으나 시작되지 않은 상태 - start()를 호출하지 않은 상태Runnable : start() 호출 후, CPU를 할당받아 실행 중이거나, 실행 대기 중인 상태Blocked : 다른 스레드가 락(lock)을 가지고 있어서, 락이 풀릴 때까지 기다리는 상태 (synchronized 관련)Waiting : 무기한적으로 다른 스레드의 작업을 기다리..
Executor, Excutor의 기본 개념 및 사용법
·
JAVA
기존의 문제점Thread와 Runnable을 사용하는 방식은 단점이 존재한다.저수준의 API(쓰레드의 생성)에 의존값의 반환이 불가능매번 쓰레드 생성과 종료의 오버헤드 발생스레드 관리의 어려움스레드를 한번 생성하고 사용하면 다시 재사용이 불가능하다. 이 작업은 너무 많은 비용이 발생하는데또한  Runnalbe를 활용하기에 반환이 불가능하다.이걸 해결하고자 Callable과 Future 인터페이스 탄생이다.Callable기존의 Runnable 인터페이스의 단점을 보안하기 위해 탄생했다.Runnable()은 void run() 메서드를 가지기에 작업 수행 이후 리턴값이 불가능했다. 또한 예외처리가 불가능하다.Callable()은 call() 메서드를 통해 작업 수행 이후 작업 결과를 반환 및 예외를 던질 수..
자바 에서의 Thread 개념 및 사용법
·
JAVA
프로세스CPU 에서 실행 중인 프로그램(소프트웨어)로, CPU에게 메모리 공간을 할당받아 독립적으로 실행된다.독립적인 실행 환경을 가짐.서로 다른 프로세스는 독립적이지만, 상호작용이 가능함.운영체제에서 각 프로세스는 고유한 메모리 공간을 할당받아 실행됨.스레드프로세스안에서 실질적으로 작업을 처리하는 단위.JVM에 의해 관리된다.한개의 프로세스는 적어도 1개 이상을 가지고 있다.모든 쓰레드는 동일한 프로세스의 리소스(메모리, 파일 등)를 공유함.이로 인해 효율적인 자원 사용이 가능하지만, 여러 쓰레드가 동시에 리소스를 접근할 때 동기화 문제가 발생할 수 있음.JAVA에서는 Main 스레드로 시작하여 다수의 스레드를 추가 생성하면 멀티 스레드 환경이 될 수 있다.동기화란?더보기멀티스레드 환경에서 공유 자원에..
[자바] 함수형 인터페이스
·
JAVA
함수형 인터페이스함수형 인터페이스는 추상 메서드가 오직 1개만 정의된 인터페이스를 의미한다.함수형 인터페이스의 목적은 자바에서 람다를 이용하여 함수형 프로그래밍을 하기 위해서이다. 함수의 형태는 너무 많다. 매개변수의 갯수, 리턴의 존재여부 등 다양한 형태가 존재한다.함수형 프로그래밍을 하기위해서 개발자들이 전부 인터페이스를 각 각 만들어 사용하기에 너무 번거럽다.이를 해결하기 위해서 자바는 함수형 인터페이스 표준 API를 제공한다.함수형 인터페이스 종류1.Runnable 인터페이스 매개변수를 받지 않기 때문에, 외부에서 값을 받아서 실행Xrun() 메서드는 값을 반환하지 않으므로, 실행 후 별도의 결과를 돌려받지 않습니다.주로 실행 자체가 목적일 때 사용됩니다.독립된 실행: Runnable은 Threa..