개요JVM의 메모리 영역 구성 요소중 하나인 자바가상머신 스택에 대한 이해를 위해 예제를 통해 각 구역에 데이터가 할당되고 해제되는것을 javap 명령어를 통해 알아본다. *해당 포스팅에서 나오는 상수풀은 런타임 상수풀이 아니라 클래스 상수풀이다. JVM이 클래스 로드시에 클래스 상수풀 내의 파일이 런타임 상수풀에 적재된다.실습 코드 준비 및 컴파일public class BytecodeExample { public static void main(String[] args) { int a = 5; int b = 10; int result = addAndMultiply(a, b); System.out.println(result); } publ..
목차 개요JVM의 메모리 구조 이해를 위한 글로 두 메서드의 실행 차이점을 알아본다.Java 9 이전보다 최근들어서는 자바로 쓰인 라이브러리의 종류도 많아져 잘 사용하지 않기에 사용이 적다. 이펙티브 자바에서도 최대한 네이티브 메서드의 실행을 지양하고 있다. 하지만 해당 내용이 JVM 의 구조를 이해하기에 도움이 되기에 간단히 적어본다. 자바 네이티브 인터페이스(Java Native Interface, JNI) -> 자바 프로그램이 네이티브 메서드를 호출하는 기술네이티브 메서드 -> C나 C++같은 네이티브 프로그래밍 언어로 작성한 메서드네이티브 메모리 -> 자바가 실행되고 있는 운영체제의 메모리, 운영체제에 의해 관리되기에 자바 힙보다 확장성이 좋다.*네이티브 메모리는 네이티브 메서드의 실행에만 국..
목차 개요 스프링 그리고 Java를 사용하다 보면 null 값 핸들링이 무척 중요하다는 사실을 깨닫고 적절한 처리에 대해 고민을 하게 된다. 특히 NullPointerException의 발생 또한 자주 접하게 된다. Java에서는 이러한 문제를 해결하기 위해 Optional 클래스를 도입했다. Optional (Java Platform SE 8 ) A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value. Additional methods that depend on the presence or a..
목차 개요 카카오테크캠퍼스 백엔드 과정 강의를 듣다가 HAS-A 관계와 IS-A관계에 관한 내용이 나와서 또 다른 관계는 없을까 라는 생각에 공부해보게 되었다. 객체지향 프로그래밍에서는 클래스 간의 상호작용과 협력을 나타내는 여러 가지 관계가 존재한다. 이 글에서는 이러한 관계들을 알아보고, 코드의 재사용성과 응집도, 그리고 유지 보수성을 높이는 데 도움이 되는 설계 원칙을 소개한다. IS-A 관계 (상속) - 강한 결합 IS-A 관계는 클래스 간의 상속 관계를 의미한다. 하위 클래스가 상위 클래스의 특별한 종류로 간주되며, 상위 클래스의 속성과 메서드를 물려받는다. 이 관계를 통해 코드의 재사용성을 높일 수 있고, 상속 계층을 통해 객체 간의 일반화와 특수화를 구조화할 수 있다. HAS-A 관계 (연관..
목차 개요 자바에서 문자열을 조작할 때 주로 사용되는 클래스들인 String, StringBuffer, StringBuilder의 차이점과 특성에 대해 알아보자. 이 세 가지 클래스는 각각 다른 상황에서 사용하기 적합하며, 그 중 String 클래스를 사용할 때 오버헤드가 발생하는 이유에 대해 설명하고 StringBuffer와 StringBuilder의 차이를 알아보자. String에서 오버헤드가 발생하는 이유 String 클래스의 특성을 이해할 필요가 있는데 String은 불변(immutable) 객체로, 생성된 후에 변경할 수 없다. 따라서 문자열 조작이 필요한 경우, 항상 새로운 String 객체가 생성된다. 이로 인해 빈번한 문자열 연산이 발생하는 경우, 메모리에 많은 임시 객체가 생성되어 성능에..
목차 개요 본 포스팅은 클래스 내부에 생성자가 하나라도 선언되지 않았을시에 자바 인터프리터에서 기본 생성자(Default constructor)를 생성해주는 인터프리터 기능에 대한 레퍼런스 자료이다. https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8.9 Chapter 8. Classes class Point { int x, y, useCount; Point(int x, int y) { this.x = x; this.y = y; } static final Point origin = new Point(0, 0); } class Test { public static void main(String[] args) { Point p = new..