
📖 JVM 구조JVM이란?JVM은 Java Virtual Machine의 약자로, 자바 가상 머신이라고 부른다. 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다. 또한, 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행하며, 다른 하드웨어와 다르게 레지스터 기반이 아닌 스택 기반으로 동작한다. 먼저, 자바 컴파일러에 의해 자바 소스 파일은 바이트 코드로 변환된다. 그리고 이러한 바이트 코드를 JVM에서 읽어들인, 어떤 운영체제에서든 프로그램을 실행할 수 있도록 만든다.만먁 자바 소스 파일은 리눅스에서 만들었고 윈도우에서 이 파일을 실행하고 싶다면, 윈도우용 JVM만 설치하면 된다. 이를 통해 JVM은 운영체제에 종속적이라는 특징..

📖 동시성과 병렬성동시성(논리적 개념)하나의 시스템이 여러 작업을 동시에 처리하는 것처럼 보이게 하는 것, 실질적으로는 한 번에 하나의 작업만을 처리한다. 병렬성(물리적 개념)여러 작업을 실제로 동시에 처리하는 것. 작업들은 각각이 독립적으로 실행되며 서로 영향을 주지 않는다. 📖 동시성 이슈 해결synchronized 키워드 사용synchronized 키워드는 자바에서 가장 기본적인 동기화 방식이다. 여러 스레드가 동시에 공유 자원에 접근하는 경우, 해당 메서드나 코드 블록에 synchronized를 사용하면 한 번에 하나의 스레드만 접근할 수 있도록 락을 건다.public class Counter { private int count = 0; public synchronized void ..
📖 Java에서 스레드를 만드는 방법Thread 클래스 상속public class MyThread extends Thread { public void run() { System.out.println("스레드 실행"); } public static void main(String[] args) { MyThread t = new MyThread(); // 스레드 객체 생성 t.start(); // run() 실행 (스레드 시작) }}✔️ Thread 클래스를 상속받고, run() 메서드를 오버라이딩✔️ start()를 호출하면 새로운 스레드에서 run()이 실행됨✔️ 간단한 방법이지만, 이미 다른 클래스를 상속 중이라면 사용 불가(다중 상속x) Ru..

📖 JCFJCF란?Java Collections Framework의 약어로, Java에서 데이터를 저장하는 기본적인 자료구조들을 한 곳에 모아 관리하고 편하게 사용하기 위해서 제공하는 것을 의미한다. 즉, 데이터를 담는 그릇들에 대한 정의를 모아놓은 프레임워크를 의미하며, 값의 성격이나 용도에 따라서 활용 방법에 따라 다양한 컨테이너를 제공한다. JCF의 계층 구조JCF의 상속 구조는 사용 용도에 따라 List, Set, Queue, Map 4가지로 요약할 수 있다. 📖 List 인터페이스List 인터페이스순서가 있는 데이터의 집합으로, 데이터의 중복을 허용한다. 구현체로는 LinkedList, Stack, Vector, ArrayList가 있다. ArrayList내부적으로 배열을 사용해 데이터를 저..
📖 람다Java 8부터 도입된 표현식으로 메서드처럼 별도의 이름을 가질 필요 없이(익명 함수) 한 줄의 표현으로 함수를 정의 하고 사용할 수 있다. 람다는 코드의 간결성을 높이고, 병렬 처리와 같은 기능을 보다 쉽게 구현하도록 한다.// 기존의 익명 클래스 방식Runnable r1 = new Runnable() { @Override public void run() { System.out.println("Hello, World!"); }};// 람다 표현식을 사용한 방식Runnable r2 = () -> System.out.println("Hello, World!"); 람다가 생긴 이유자바는 객체지향 언어지만, 코드가 길고 반복되는 경우가 많아 가독성이 떨어지는 문제가 있었다..

📖 String literal과 new String(””)의 차이둘의 차이는 저장되는 저장공간(메모리)의 차이이다.new 연산자를 사용하여 String을 생성하게 되면 객체로 생성이 되어 Heap 메모리 영역에 저장이 되고, 리터럴을 사용하여 String을 생성할 경우 String Constant Pool이라는 영역에 생성된다. String Constant Pool은 JVM의 메모리 구조 중의 하나로, 문자열 리터럴이 중복되지 않도록 하고 문자열에 대한 빠른 참조를 가능하게 한다.리터럴을 사용하여 생성할 때 Constant Pool에 같은 값이 존재한다면, 생성되는 객체는 이미 존재하고 있는 값을 참조하게 된다.String str1 = new String("Hello"); String str2 = "H..