자바 소스 파일(.java)을 JVM으로 실행하는 과정을 이해해보자! 1. JVM이란 무엇인가? > JVM은 JAVA Virtial Machine의 약자로 자바 바이트코드(.class)를 OS에 맞게 해석해주는 역할을 하는 가상머신이다. JVM은 자바의 플랫폼 독립

1. primitive 타입 종류와 값의 범위 그리고 기본 값 ➡️ primitive Type이란? 기본 자료형 혹은 원시 자료형이라고 불리는 프리미티브 타입은 값을 할당할 때 변수의 주소 값에 그 자체로 저장되는 데이터 타입이다. 해당 데이터 타입은 값이 할당되면 앞서 다루었던 JVM의 Runtime Data Area 영역 중 Stack영역에 값이 저장...

메모리 관리의 핵심인 가비지 컬렉션(GC)의 동작 원리
1. 클래스 정의하는 방법 > 클래스(Class)는 객체 지향 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 일종의 틀이다. Java에서는 클래스를 class 키워드를 사용하여 정의하며 클래스에는 필드(변수), 메소드(함수), 생성자 등을 포함할 수 있다. 2. 객체 만드는 방법 (new 키워드 이해하기) 클래스는 설계도일 ...
✏️ 객체지향 생활 체조 원칙 한 메서드에 오직 한 단계의 들여쓰기만 한다. else 표현을 사용하지 않는다. 모든 원시 값과 문자열을 포장한다. 한 줄에 점을 하나만 사용한다. 이름을 줄여 쓰지 않는다. 모든 엔티티를 작게 유지한다. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. 일급 컬렉션을 사용한다. getter/setter/propert...

1. 자바 상속의 특징 > 상속이란 상위클래스에서 정의한 필드와 메서드를 하위클래스도 동일하게 사용할 수 있게 물려받는 것이다. 👉 특징 재사용성 : 상속은 기존 클래스(부모 클래스)의 코드를 재사용하여 새로운 클래스를 만들 수 있도록 한다. is-a 관계 : 상속은 부모 클래스와 자식 클래스 간에 'is-a'관계를 형성한다. ex) 고양이 Cat은 동...

1. package 키워드 > 패키지란 많은 클래스들을 체계적으로 관리하기 위해 존재한다. 폴더를 만들어서 파일을 저장하듯, 패키지를 만들어서 클래스를 저장/관리 한다. Java 파일의 논리적 그룹화를 위해 사용한다. 소스 파일의 최상단에 위치하며, 파일이 속하는 패키지를 정의한다. 패키지를 사용하면 클래스의 충돌을 방지하고, 모듈화 및 관리 용이성이 향...
1. 인터페이스 1) 인터페이스란? > 인터페이스는 일종의 추상클래스와 비슷한 개념으로, 추상 메서드만을 가질 수 있는 구조다. 하지만 추상 클래스보다 추상화 정도가 높다. 즉, 인터페이스는 일반 메서드나 멤버 변수를 가질 수 없으며, 오직 추상 메서드(자바 8 이후부터는 예외적으로 default, static, private 메서드 포함)를 가질 수 있...
1. 자바에서 예외 처리 방법 🖥️ try, catch, finally try: 예외가 발생할 수 있는 코드 감싸는 블록 catch: try 블록에서 예외가 발생했을 때 실행되는 블록 finally: 예외 발생 여부와 상관없이 항상 실행되는 블록으로, 주로 자원 해제에 사용 위 코드에서 divide 메서드는 두 수를 나누는 기능을 한다. 만약 두 번째 ...
1. enum 정의하는 방법 1) Enum이란? > 열거형(enumerated type)이라고 부르며 서로 연관된 상수들의 집합이다. 기존에 상수를 사용하면서 발생했던 문제를 개선하고자 jdk1.5 부터 추가 된 기능이다. 아래의 예시들을 보며 이해해보자. 2) Enum 이전과 후의 상수 표현 👉 변수를 상수로 상수는 변하지 않는 수이다. 변수에 고정...
1. 애노테이션이란? > 사전적 의미로 주석을 의미하며 프로그램에 대한 데이터를 제공하는 메타데이터의 한 형태이다. 📢 애노테이션의 용도 ✅ 컴파일러에 정보 제공 컴파일러가 코드의 오류를 체크하거나 특정 경고 메시지를 억제하는데 사용한다. ex) @Override (컴파일러가 부모 클래스의 메서드를 올바르게 오버라이딩 했는지 검사), @Supp...
1. 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O 1) 스트림(Stream) > 스트림은 데이터를 연속적으로 읽고 쓰는 개념이다. 자바에서 Input/Output은 스트림을 통해 이루어진다. 스트림은* 단방향*으로 동작하고 아래와 같이 두가지로 나뉜다. 입력 스트림 : 데이터를 읽어오는 통로 출력 스트림 : ...
IO와 NIO의 차이점을 다루면서 Blocking과 Non-Blocking에 대해 간단히 알아보았다. 하지만 동기와 비동기의 개념과 혼동되어 4가지에 대해 정리해보려고 한다. 호출한 함수 : caller -> A 호출된 함수 : callee -> B 1. Blocking vs Non-Blocking A 함수가 B 함수를 호출했을 때, A가 실행을 멈추고...
1. 제네릭이란? > 제네릭(Generic)은 다양한 타입의 객체를 다룰 수 있도록 클래스나 메서드에 타입 매개변수를 적용하는 기능이다. 쉽게 말하자면 하나의 값이 여러개의 데이터 타입들을 가질 수 있어 재사용성을 높일 수 있는 프로그래밍 방식이라고 할 수 있다. 제네릭을 사용하는 이유 컴파일 시 타입 검사를 수행하여 런타임에는 안전한 코드를 실행할 수 ...
🌟 process란? > 사용자가 작성한 프로그램이 OS로부터 필요한 자원(메모리 공간)을 할당 받아 실행 중인 것이다. 🌟 thread란? > 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 1개 이상의 쓰레드가 존재한다. 두 개 이상의 쓰레드를 가지는 프로세스를 멀티 쓰레드 프로세스라고 한다. 경량 프로세스라고도 불리...
1. 람다식이란❓ 익명 함수를 간결하게 표현하는 방법이다. 즉, 이름 없는 함수를 표현하는 문법이다. 자바에서는 객체 지향 언어의 특성상 메서드는 항상 클래스 내부에 정의되어야 했다. 하지만 Java 8부터 도입된 람다식 덕분에 메서드를 "값처럼" 전달할 수 있게 되었