자바 컴파일과정 들어가기전 > 자바는 OS에 독립적인 특징을 가지고 있습니다. 그게 가능한 이유는 JVM(Java Vitual Machine) 덕분인데요. 그렇다면 JVM(Java Vitual Machine)의 어떠한 기능 때문에, OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보도록 하겠습니다. 자바 컴파일 순서 개발자가 자바 ...
Call by value와 Call by reference 상당히 기본적인 질문이지만, 헷갈리기 쉬운 주제다. call by value > 값에 의한 호출 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시공간이 생성됨 (종료 시 해당 공간 사라짐) call by value 호출 방식은 함수 호출 시 전달되는 변수 값을 복사해서 함수...
String, StringBuffer, StringBuilder | 분류 | String | StringBuffer | StringBuilder | | ------ | --------- | ------------------------------- | -------------------- | | 변경 ...
자바 가상 머신(Java Virtual Machine) 시스템 메모리를 관리하면서, 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경을 제공함 JVM은, 다른 프로그램을 실행시키는 것이 목적이다. 갖춘 기능으로는 크게 2가지로 말할 수 있다. 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 하는 것 프로그램 메모리를 관리하고 최적...
들어가기 전 C/C++ 프로그래밍을 할 때 메모리 누수(Memory Leak)를 막기 위해 객체를 생성한 후 사용자하지 않는 객체의 메모리를 프로그래머가 직접 해제 해주어야 했습니다. 하지만, JAVA에서는 JVM(Java Virtual Machine)이 구성된 JRE(Java Runtime Environment)가 제공되며, 그 구성 요소 중 하나인 G...
📌 Casting 캐스팅은 OOP의 다형성과 관련이 있다. 자바에서의 데이터형은 크게 2가지로 [기본형, 참조형] 이 있다. 기본형 : boolean, int, short, byte,double, long, float, char 참조형 : 만들기 나름! 캐스팅의 목적은 단순히 데이터를 바꾸기 위한 목적이 아닌 코드를 작성하는 프로그래머가 데이터 정보에...
📌 Boxing >자바는 int, long, boolean 같은 변수의 기본 자료형(Primitive Type)을 제공한다. 하지만 이런 기본자료형은 컬렉션(Collection)이나 지네릭(Generic)에서 제한적으로 사용가능하다. 따라서 자바는 각 기본 자료형에 대응되는 래퍼 클래스(Wrapper Class) 제공하고 있다. 기본적인 박싱 동작 반...
📌 Thread 📍 개요 앞서 운영체제를 하면서 쓰레드에 대해 포스팅을 했었다. 하지만, 다시 한 번 상기해보자. 실제로 동시에 처리될 수 있는 프로세스의 개수는 CPU 코어의 개수와 동일한데, 이보다 많은 개수의 프로세스가 존재하기 때문에 모두 함께 동시에 처리할 수는 없다. 각 코어들은 아주 짧은 시간동안 여러 프로세스를 번갈아가며 처리하는 방...
Java의 멀티스레딩 환경에서 동기화는 필수적입니다. 오늘은 Java의 고유락에 대해 깊게 알아보자 고유락 (Intrinsic Lock)이란? Java에서의 고유락은 모든 객체가 갖고 있는 내장 락을 지칭한다다. synchronized 키워드를 사용하여 이 락을 활용하면, 여러 스레드가 동시에 데이터에 액세스하는 것을 방지할 수 있다. 고유락 사용 방...
Java 직렬화 > 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술 > 즉, 직렬화란 현재 데이터(structure, object)의 상태를 영속적으로 저장하거나 다른 환경으로 전달(네트워크 통신 등)하기 위해 어떠한 정해진 포맷으로 변환하는 과정 각자 PC의 OS...
Error & Exception Error와 Exception은 같다고 생각할 수도 있지만 사실 큰 차이가 있습니다. 오류(Error)는 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미합니다. 개발자가 미리 예측하여 방지할 수 없습니다. 반면 예외(Exception)는 개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에...
Java 8버전 이상부터는 Stream API를 지원한다 자바에서도 8버전 이상부터 람다를 사용한 함수형 프로그래밍이 가능해졌다. 기존에 존재하던 Collection과 Stream은 무슨 차이가 있을까? 바로 '데이터 계산 시점'이다. > 먼저, 어부가 어류 중에서도 고등어를 잡고 싶어서 그물로 고등어를 잡았습니다. 이 행위를 filter라고 하고,...
[Java] Record Java 14버전부터 도입되고 16부터 정식 스펙에 포함된 Record는 class처럼 타입으로 사용이 가능하다. 객체를 생성할 때 보통 아래와 같이 개발자가 만들어야한다. 클래스 Person 을 만든다. 필드 name, age를 생성한다. 생성자를 만든다. getter를 구현한다. 보통 Entity나 DTO 구현에 있어서 ...
Interned String in Java 자바(Java)의 문자열(String)은 불변(immutable)하다. String의 함수를 호출을 하면 해당 객체를 직접 수정하는 것이 아니라, 함수의 결과로 해당 객체가 아닌 다른 객체를 반환한다. String 객체는 불변 객체이기 때문에 동일한 객체가 공유될 수 있는 특징을 가지고 있습니다. 이 특징을 잘...
[Java] 컴포지션(Composition) 우선 상속(Inheritance)이란, 하위 클래스가 상위 클래스의 특성을 재정의 한 것을 말한다. 부모 클래스의 메서드를 오버라이딩하여 자식에 맞게 재사용하는 등, 상당히 많이 쓰이는 개념이면서 활용도도 높다. 하지만 장점만 존재하는 것은 아니다. 상속을 제대로 사용하지 않으면 유연성을 해칠 수 있다. 구...