
Java 8 Bye PermGem, Hi Metaspace 자바 8 이후로는 JVM에서 PermGen 영역이 완전히 사라지고 Metaspace란 영역으로 대체되었다. Permanent Generation PermGem은 Permanent Generation의 약자로 클래스의 메타 데이터(클래스 명, 필드 정보, 메서드 정보)들을 별도의 Heap 공간에 저장하는 영역이다. Java는 이 곳에서 클래스의 메타 데이터를 읽어 객체를 생성할 수 있었다. PermGem은 OS, JVM에 따라 각기 다른 default 크기를 가지고 있었으며, 이는 매우 적은 크기였다. 클래스 로딩이 잦다보면 PermGem이 부족하여 java.lang.OutOfMemoryError: PermGen space 에러가 발생하곤 했었다...
Lombok은 Java 라이브러리로 개발을 하면서 기계적으로 작성하게 되는 Getter, Setter, ToString 등의 메서드 작성 코드를 어노테이션으로 대신해 코드 다이어트를 도와준다. Lombok을 사용하여 아래의 장점을 얻을 수 있다. 💡 어노테이션 기반의 코드 자동 생성을 통한 생산성 증가 💡 코드 다이어트를 통한 코드 가독성 및 유지보수성 증가 🔔 과거에는 Lombok을 사용하려면 모든 팀원이 Lombok을 설치해야하는 번거로움이 있었지만, 현재는 IntelliJ의 기본 플러그인으로 설정되어 있기 때문에 바로 사용이 가능하다. 기본 Java 코드와 Lombok을 사용한 코드의 차이를 직접 확인해보자. 기존의 코드 public class Car { private String seqNumber..

자바의 예외는 크게 Error, Checked Exception, Unchecked Exception 세 가지로 분류된다. Error 에러는 시스템에 비정상적인 상황이 생길 경우 발생한다. 시스템 레벨에서 발생하는 오류이기 때문에 개발자가 예측하기 어렵고 처리할 수도 없다. 대표적인 에러로는 OutOfMemory, StackOverFlow 등이 있다. Exception 예외(Exception)는 개발자가 만든 어플리케이션에서 잘못된 상황이 발생했을 경우를 의미한다. 예외는 프로그램에 오류이기 때문에 복구가 가능한 수준이며 예외에 대한 예방 또한 가능하다. Checked Exception Unchecked Exception 처리 여부 반드시 예외를 처리해야 함 명시적인 처리를 강제하지 않음 확인 시점 Co..
Immutable Object (불변 객체) 먼저 아래 예제 코드를 통하여 불변 객체와 가변 객체란 무엇인지 확인해보자. // 객체 상태가 public 이므로 외부에서 값 수정 가능 class Student { public int id; public String name; public Student(int id, String name) { this.id = id; this.name = name; } } // Setter 로 객체 데이터 값 수정 가능 class Student { private int id; private String name; public void setId(int id) { this.id = id; } public void setName(String name) { this.name = ..