C, C++에서와는 다르게 JAVA에서는 GC(가비지 컬렉터) 덕분에 메모리 관리에서 어느정도 벗어나 프로그래밍에 더욱 집중할 수 있다. 하지만, 그렇다고 해서 JAVA는 메모리 관리를 하지 않아도 된다고 오해해서는 절대 안된다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { this.elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push() { ensureCapacity(); elements[size++] = e; } public ..
제목에서 느낄 수 있듯이 객체를 생성하는데도 컴퓨터 자원이 필요하기 때문에 이를 최소화하기 위한 아이템이다. 제목 그대로 불필요한 객체를 매번 생성하는 것이 아니라 하나의 객체를 재사용 함으로써 더 빠르고 세련된 코드를 짤 수 있다. (불변 객체는 언제든 재사용할 수 있다.) String s = new String("ch4njun"); String s = "ch4njun"; 위 코드에서 첫 번째 코드는 절대 하지 말아야할 극단적인 예시이다. 생성자를 통해 만들려는 객체는 인자로 넘긴 "ch4njun"과 기능적으로 완벽하게 동일한 객체이기 때문이다. 첫 번째 코드를 사용할 때마다 새로운 String 객체를 만드는데 모두 "ch4njun"과 동일한 기능을 가지는 객체가 된다. 즉 첫 번째 코드가 호출됨으로써..
이번 포스팅은 제목에서 무슨말을 하려 하는지 충분히 이해가 되리라 생각한다. 그럼 간단하게 인스턴스화를 막아야하는 상황에는 어떠한 것이 있는지 살펴보도록 하자. 정적 메서드와 정적 필드만 담은 클래스를 구성하고자 할 때 인스턴스화를 막을 수 있다. 정적 메서드와 정적 필드만 포함되어 있다면 이러한 코드들은 인스턴스를 생성하지 않아도 이미 메모리에 올라가있는 상태로 사용할 수 있다. 따라서 인스턴스화할 이유가 없는 것이다. (이 방법 자체가 객체 지향적으로 사고하지 않는 것이기 때문에 추천하진 않지만 쓰임새가 분명히 존재한다.) 예를 들면 아래 상황에서 위와 같이 정적 메서드와 정적 필드만 담은 클래스를 구성할 수 있다. java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 관련..
https://ch4njun.tistory.com/233 [아이템1] 생성자 대신 정적 팩터리 메서드를 고려하라 고전적으로 객체를 생성하는 방법에는 Public 생성자를 사용하는 방법이 있다. 하지만 이러한 방법 외에도 정적 팩토리 메서드를 제공하는 방법이 있다. 정적 팩터리 메서드란 해당 클래스의 객 ch4njun.tistory.com 위에서 정적 팩토리 메서드에 대해서 소개했는데 이러한 정적 패고리 메서드와 public 생성자에는 공통적인 애로사항이 있다. 생성자에 선택적 매개변수가 많아진다면 그에 대응하기 어렵다는 점이다. 선택적 매개변수란 특정 인스턴스 변수를 반드시 초기화하지 않아도 되는 것들에 대한 매개변수를 말한다. 예를 들어 특정 클래스에 A, B, C 인스턴스 변수가 있다고 가정했을 때 ..
고전적으로 객체를 생성하는 방법에는 Public 생성자를 사용하는 방법이 있다. 하지만 이러한 방법 외에도 정적 팩토리 메서드를 제공하는 방법이 있다. 정적 팩터리 메서드란 해당 클래스의 객체를 반환해주는 단순한 메서드를 말한다. 여기서 이야기하려는 정적 팩토리 메서드는 디자인패턴에서 소개되는 팩토리 패턴과 다르다. 이러한 정적 팩터리 메서드의 장점에 대해서 살펴보자. 장점 1. 생성하는 메서드에 이름을 부여할 수 있다. 즉, Item(1, 2)와 같이 객체를 생성하는 것보다 Item.createWeapon(1, 2)와 같이 만드는게 객체 생성코드만으로 무엇을 하고자하는지 표현할 수 있다는 장점이 있다. 한 클래스에 동일한 시그니처를 가지는 생성자를 여러개 추가하는 것보다 정적 팩토리 메서드를 사용해 각..