1. 정적 팩토리 메서드란?정적 팩토리 메서드는 인스턴스를 생성자로 생성하지 않고, 별도의 객체 생성의 역할을 하는 정적 메소드를 사용해 인스턴스를 생성하는 방식입니다. ex)자바의 LocalTime 클래스내 정적 팩토리 메서드public static LocalTime of(int hour, int minute) { HOUR_OF_DAY.checkValidValue(hour); if (minute == 0) { return HOURS[hour]; } MINUTE_OF_HOUR.checkValidValue(minute); return new LocalTime(hour, minute, 0, 0);}위 예시 코드에서 본 LocalTime의 of 메서드처럼 생성자를 사용하지 않고 정적 메서드를 사용해 객..
1. 불변 객체란 무엇일까?불변 객체는 객체의 상태(내부의 값, 필드, 멤버 변수)가 변하지 않는 객체로 한 번 초기화 후 수정될 수 없기 때문에 예측 가능하고 안전한 코드 작성을 할 수 있게 도와줍니다. 대표적으로 자바의 String, Integer 등의 클래스가 불변으로 설계되어 있습니다. 지금부터는 불변 객체의 장점과 불변 객체를 구현하는 방법에 대해 알아보겠습니다. 2. 불변 객체의 장점스레드 안정성(Thread Safety)멀티스레드 환경에서 가변 객체를 여러 스레드가 동시에 수정하려 할 때 동기화를 적절히 처리하지 않으면 예상치 못한 동작이 발생할 수 있습니다. 하지만 불변객체는 상태가 변하지 않으므로 스레드 안정성을 보장할 수 있습니다. Side Effect를 최소화할 수 있다.객체의 공..
JVM은 메모리를 자동으로 관리해주기 때문에 개발자들이 걱정을 조금이나마 덜고 개발할 수 있는 장점이 있었습니다.하지만 GC를 수행하는 과정에서 Stop The World가 발생하게 되고 이 과정에서 애플리케이션이 중지되는 문제가 있습니다. 또한 자바가 발전하며 Heap사이즈가 커지며 지연현상이 커지게 되었고 이를 위한 다양한 GC 알고리즘들이 만들어지게 되었습니다. 지금부터 GC 알고리즘에 대해 알아보겠습니다. 1. Serial GC(잘 쓰이지 않음)GC를 싱글스레드로 진행하기 때문에 Stop-The-Word의 시간이 길어진다.Old 영역에서 Mark Sweep에 Compact 작업을 추가적으로 실행한다.CPU 코어가 1개일 때 사용하기 위해 개발되었다. java -XX:+UseSerialGC -ja..
1. GC(Garbage Collection)이란? 가비지 컬렉션은 자바에서 사용되는 메모리 관리 기법으로 프로그램이 동적으로 할당한 메모리를 자동으로 관리해 더 이상 사용되지 않는 객체를 주기적으로 해제하는 역할을 합니다.MyObject obj = new MyObject("안녕");obj = null; //obj는 더 이상 참조되지 않아 GC 대상이 된다MyObject obj2 = new MyObject("first");obj2 = new MyObject("second"); //first 객체는 더 이상 참조되지 않는다. c와 c++에서는 프로그래머가 직접 수동으로 메모리 할당과 해제를 일일이 해줘야 하지만 자바에서는 가비지 컬렉터가 메모리 관리를 해주기 때문에 메모리를 효율적으로 사용할 수 있고 메모..
1. Call by Value와 Call by Reference란?Call by Value란 값에 의한 호출을 의미합니다. 함수에 값을 전달할 때 값을 복사해서 전달하고, 전달한 값을 변경하여도 원본은 변경되지 않습니다. Call by Reference란 참조에 의한 호출을 의미합니다. 함수에 값을 전달할 때 참조 값을 전달하게 됩니다.2. 자바에서 Call by Value의 동작방식자바의 데이터 타입은 크게 두 가지로 나누어집니다.원시타입 - byte, short, int, float, long, double, char, boolean참조타입 - Class, interface, Array, Enum 등등메소드 파라미터로 원시 타입과 참조 타입을 전달하며 일어나는 동작 방식을 보며 자바가 어떻게 Call..
1. 래퍼 클래스란?자바에서 자료형은 기본형(Primitive Type)과 참조형(Reference Type)으로 나누어집니다. 프로그래밍을 하다 기본형의 데이터를 객체로 표현해야 하는 경우가 생기는데 이럴 때 기본형을 객체로 다루기 위해 사용하는 클래스를 래퍼클래스(Wrapper Class)라고 합니다. 지금부터 래퍼클래스에 대해 자세히 알아봅시다. 2. 래퍼 클래스가 생긴 이유?기본형(Primitive Type)은 객체가 아니기 때문에 다음과 같은 한계점이 존재합니다.객체가 아니다 : 객체가 아니기 때문에 객체지향의 장점을 살릴 수 없다(메소드 제공 불가)null 값을 가질 수 없다 : 기본형은 항상 값을 가지기 때문에 null 표현을 할 수 없다.이런 단점을 해결하기 위해 기본형을 객체로 감싸서 ..
1. ENUM의 탄생 이전열거 타입을 제공하기 이전에는 다음 코드처럼 상수를 사용해 사용하곤 했습니다.public class Grade { public static final String BASIC = "BASIC"; public static final String GOLD = "GOLD"; public static final String PLATINUM = "PLATINUM";}하지만 약간의 문제가 발생하기 시작하는데 문자열 상수를 사용할 경우 개발자가 실수로 Grade 안에 있는 상수를 사용하지 않고 직접 문자열을 사용해도 막을 방법이 없다는 것이었습니다.public int discount(String grade, int price)int vip = discountService.discount("VV..
JVM이란 무엇인가? JVM(Java Virtual Machine)은 자바를 실행하기 위한 가상기계로 프로그램을 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것으로 자바 어플리케이션을 클래스 로더를 통해 읽어들여서 자바 API와 함께 실행하는 역할을 합니다. Write once, run anywhere(한 번 작성하면 어디서든 실행된다.) JAVA언어로 작성된 애플리케이션은 JVM을 거쳐서 운영체제와 상호작용하게 됩니다. JVM은 바이트코드(컴파일된 자바 코드)를 하드웨어/OS 환경에 알맞게 변경해주는 역할을 해주고, 이를 통해서 운영체제로부터 독립적으로 프로그램을 작성할 수 있는 장점이 있습니다.단 JVM은 운영체제에 종속적이기 때문에 해당 운영체제에서 실행가능한 JVM이 필요합니다..
스트링은 왜 불변(immutable)으로 설계되었을까?기본적으로 자바에서는 String 객체의 값은 변경할 수 없다. 그렇다면 왜 String은 불변하게 만들었을까?String이 불변인 이유는 크게 3가지로 볼 수 있다. 1. String 객체의 캐싱 기능과 성능문자열 객체는 널리 사용되고 재사용될 가능성이 매우 높다. JAVA는 String 리터럴을 캐싱하고 재사용해 많은 힙공간을 절약할 수 있다. 예를 들어 아래같은 코드를 실행했을 때ex 1) String str1 = new String("hello");String str2 = new String("hello"); 메모리상에 2개의 인스턴스가 생성되게 된다. 하지만 리터럴 방식을 이용하면 Heap의 String pool이라는 공간에 String ..
자바에는 String, StringBuffer, StringBuilder클래스가 존재한다 String 클래스는 자바에서 가장 많이 쓰이는 만큼제대로 알아둘 필요가 있다. String은 변경 불가능한(immutable)클래스이다public final class String implements java.io.Serializable, Comparable { private final byte[] value; .......}String 클래스에는 문자열을 저장하기 위해 참조변수 byte[] value를 인스턴스 변수로 정의해 놓고 있다.인스턴스 생성 시 생성자 매개변수로 입력받는 문자열은 인스턴스 변수에 문자열 배열로 저장이된다.한번 생성된 String 문자열은 읽어 올 수만 있고 변경할 수는 없다.ex)S..