Java

    정적 팩토리 메서드

    정적 팩토리 메서드에 대해 알아보자 정적 팩토리 메서드는 팩토리 패턴에서 용어를 가져와 정의한 기법으로 객체 생성 메서드라고 정의한다. 정적 팩토리 메서드를 객체 생성 메서드라고 정의했는데 우리에겐 생성자가 있지 않은가? 그런데 왜 생성자를 통해 인스턴스를 생성하지 않고 static 메서드를 활용해서 생성할까? ‘이펙티브 자바’에서는 정적 팩토리 메서드에 대한 장점을 설명한다. 정적 팩토리 메서드를 사용했을 때의 장점 1. 이름을 가질 수 있다! new 키워드를 통해 인스턴스를 생성하는 생성자를 사용한 방법은 그저 단순히 인스턴스를 생성한다는 의미를 가질 뿐이지 이 로직이 어떤 의미를 가지는 지는 설명하지 못한다. 하지만, 정적 팩토리 메서드는 메서드가 이름을 가지기 때문에 생성 로직에 대한 의미를 나타..

    Garbage Collector 동작원리

    GC의 동작 원리에 대해 정리해 본 글입니다. Garbage Collector 힙 메모리 영역 중 더 이상사용하지 않는 자원을 찾아내어 해제하는 기능 프로그램의 실행 중간에 쓸모 없는 메모리를 알아서 수집/삭제 메인 쓰레드와 별개로 백그라운드로 데몬 쓰레드에서 GC를 수행 힙 메모리와 GC 힙 메모리는 JVM 메모리 영역 중의 하나로 new 키워드를 통해 동적으로 할당된 객체들을 저장하는 공간이다. 힙 메모리에 저장된 객체에 대해 GC가 돌면서 더이상 참도되지 않는 객체를 판별하고 제거한다. 힙 메모리는 모든 쓰레드가 공유하는 공간이고 JVM이 실행될 때 생성된다. 힙 영역은 대부분의 객체는 일회용이며 오래동안 메모리에 남아 있는 경우는 드물다는 조건하에 설계되었다. 따라서, 내부적으로 객체의 생존기간에..

    프로토 타입 패턴

    💡 객체를 생성하는 데 비용이 많이 들고, 비슷한 객체가 이미 있는 경우에 사용되는 생성 패턴 Original 객체를 새로운 객체에 복사하여 필요에 따라 수정하는 매커니즘을 제공 구조와 기본 개념 PrototypeRegistry는 interface인 Prototype 에만 의존 외부로 부터 주입된 Button 클래스의 clone()을 사용하여 Button 클래스를 생성 프로토타입 패턴은 객체를 생성하는데 시간과 노력이 많이 들고, 이미 유사한 객체가 존재하는 경우 사용 java의 clone()을 이용하기 때문에 생성하고자 하는 객체의 clone() 메소드를 오버라이드 해야 함 Java의 기본적인 clone()은 얕은 복사이므로! 예시 Student List를 DB에서 항상 같은 결과로 가져오는 프로그램이..

    String, StringBuilder, StringBuffer 사용 경우

    String을 이어 붙이는 방법들에 대해 알아보고, 어떤 방법이 효율적인지 생각해보자! String은 불변한다! String의 속성을 생각해보면 String은 불변(immutable)하다. 그런데 String에다+ 연산자를 사용해서 이어 붙여 사용하곤 한다. 분명 String은 불변한다고 했는데 왜 추가하면 추가하는대로 결과를 보여줄 수 있을까? 먼저, int 변수의 경우 primitive type 이기 때문에 메모리 상의 stack 공간에 값으로 저장된다. 그래서 int 변수의 값을 바꿀 수 있다. 하지만, String 변수의 경우 Reference type이므로 stack 공간에 실제 값이 저장된 heap 공간의 주소가 저장되어 있고, heap 공간 내의 Constant Pool에서 String을 저..