
C/C++ 등 컴퓨터의 OS와 CPU에 의존적인 언어를 Native Code, Java와 같이 독립적인 운영체제에서 동작하는 언어를 Managed Code라 합니다.JVM은 운영체제에 의존하지 않고 Java를 수행할 수 있도록 도와주는 가상 컴퓨터 입니다. 이로 인해,

C/C++ 등 컴퓨터의 OS와 CPU에 의존적인 언어를 Native Code, Java와 같이 독립적인 운영체제에서 동작하는 언어를 Managed Code라 합니다.JVM은 운영체제에 의존하지 않고 Java를 수행할 수 있도록 도와주는 가상 컴퓨터 입니다. 이로 인해,

JNI는 Java Application이 C/C++로 작성된 네이티브 코드와 상호작용할 수 있도록 제공되는 인터페이스입니다. Java가 운영체제 고유의 기능에 접근하거나, Java에서 기본적으로 제공하지 않는 기능을 수행해야 할 경우 JNI를 통해 네이티브 코드를 호출

GC (Garbage Collection) GC란? Garbage Collection은 동적으로 할당된 메모리 중 필요 없게 된 객체(Garbage)를 자동으로 정리하는 메모리 관리 기법입니다. 이를 통해, 메모리 누수를 방지하고 효율적인 메모리 관리를 지원합니다.

Minor GC는 Young Generation 영역에서 발생하는 가비지 컬렉션을 말합니다. Young Generation은 상대적으로 작은 크기로 설계되어, GC 작업이 Old Generation보다 빠르게 수행됩니다. 이를 통해, 애플리케이션의 성능에 미치는 영향을

Java는 GC를 통해 메모리를 자동으로 관리하는 기능을 제공합니다. 이는 개발자에게 메모리 할당 및 해제 작업의 복잡성을 덜어주는 큰 이점을 제공합니다. 하지만, 다음과 같은 사항들로 인해 GC 동작을 이해하고 효율적인 메모리 관리와 JVM 튜닝을 통해 GC를 최적화

Java의 자료형은 크게 기본 자료형(Primitive Type)과 참조 자료형(Wrapper Type)을 나뉩니다. 오늘은 이 두 자료형에 대해 알아보도록 하겠습니다.기본 자료형은 메모리에서 직접 값을 저장하는 자료형을 말합니다. Java에서 제공하는 8가지 기본 자

객체지향 프로그래밍이란 프로그램을 여러 개의 독립된 객체로 구성하고, 객체 간의 상호 작용을 통해 기능을 수행하는 프로그래밍 패러다임입니다. 이러한 패러다임은 유지보수성과 확장성이 뛰어나며 코드의 재사용성을 높일 수 있다는 장점이 있습니다. 이에 대한, 핵심 개념으로

클래스는 객체를 생성하기 위한 설계도입니다. 이는 속성(필드)과 동작(메서드)를 포함하고 있으며 객체 지향 프로그래밍의 기본 단위입니다. 다음 예시와 같이 사용할 수 있습니다.추상 클래스는 공통 기능을 포함하면서도 일부 메서드를 구현하지 않은 클래스입니다. 직접 인스턴

Java에서 equlas()와 hashCode()는 객체의 동등성을 비교할 때 사용하는 메소드 입니다. equals()는 두 객체가 논리적으로 동일한지 비교하고, hashCode()는 객체를 빠르게 검색하기 위해 해시값을 반환합니다. Java의 Object 클래스는 기

String, StringBuilder, StringBuffer는 Java에서 문자열을 다루기 위해 자주 사용되는 클래스입니다. 사용하기에 앞서 차이를 명확히 이해하는 것이 중요합니다. 이들에 대한 특징과 차이를 살펴보도록 하겠습니다.String은 불변 객체로 한 번

Collection은 Java에서 데이터 구조를 다루기 위한 표준화된 인터페이스와 클래스를 제공하는 라이브러리입니다. 주요 인터페이스는 List, Set, Map으로 나뉘며 서로 다른 특징과 내부 구현 방식을 가집니다. List 인터페이스의 구현체로 ArrayList와

ConcurrentHashMap은 HashMap과 동일한 방식으로 동작하지만, 멀티 스레드 환경에서도 안전하게 사용할 수 있도록 동기화를 제공하는 클래스입니다. ConcurrentHashMap이 가지는 특징은 다음과 같습니다.Java 7 이하 버전에서는 내부적으로 여러

Java에서는 멀티 스레딩 환경에서 동기화를 보장하기 위해 여러 기법을 제공합니다. 대표적으로 synchronized, volatie, Lock 인터페이스가 존재합니다. 왜, 동기화를 보장해야 하나요? 멀티 스레드 환경은 하나의 프로세스 내에서 여러 개의 스레도가 병렬

SOLID는 객체지향 프로그래밍에서 유지보수성과 확장성을 높이기 위한 5가지 설계 원칙으로 단일 책임 원칙, 개방-폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존성 역전 원칙이 있습니다.실제로, 뉴쓱이라는 프로젝트에서 레디스 기반의 카운팅 시스템을 구축하

제네릭은 데이터 타입을 일반화해서, 컴파일 시점에 타입을 체크할 수 있도록 해주는 문법입니다. 타입 안정성을 확보하고, 형변환 없이 다양한 타입에 재사용할 수 있도록 설계되었습니다.제네릭이 없던 시절에는 컬렉션에 여러 타입을 섞어 담을 수 있었고, 값을 꺼낼 때마다 개

어노테이션은 자바에서 메타데이터를 코드에 추가하는 문법입니다. 컴파일러나 런타임 프로세서가 추가적인 처리를 할 수 있도록 정보를 제공하기 위해 사용합니다. Spring은 이 어노테이션을 기반으로 DI, AOP, 트랜잭션 관리 등 다양한 기능을 제공하여 생산성을 높입니다

static은 클래스에 속한 멤버를 의미합니다. 객체를 생성하지 않고도 클래스 이름만으로 접근 가능하며, 클래스 로딩 시 Method 영역에 딱 한 번 저장되어 모든 인스턴스가 공유합니다.non-static은 인스턴스에 속한 멤버를 의미합니다. 각 객체마다 별도로 존재

직렬화는 자바 객체를 바이트 스트림으로 변환하는 과정입니다. 이 과정 덕분에 객체를 파일로 저장하거나, 네트워크로 전송할 수 있습니다.자바에서는 ObjectOutputStream 클래스를 사용하여 아래와 같이 직렬화를 수행합니다.static 필드는 Method Area