Effective Java 9

Effective Java | Item 9. try-finally보다는 try-with-resources를 사용하라

Effective Java 3/E 판을 읽고 정리한 기록입니다. try-finally 구문BufferedReader br = new BufferedReader(new FileReader("file.txt"));try { // 파일을 읽고 처리하는 코드} finally { try { if (br != null) { br.close(); } } catch (IOException e) { e.printStackTrace(); }} 기존에는 자원을 해제하기 위해 try-finally 구문을 많이 사용했습니다.  위 코드는 파일을 읽기 위해 BufferedReader 를 열고, try 블록 안에서 파일을 처리한 후, finally 블록..

Effective Java 2024.05.28

Effective Java | Item 8. finalizer와 cleaner 사용을 피하라

Effective Java 3/E 판을 읽고 정리한 기록입니다. finalizer와 cleaner는 객체가 더 이상 필요하지 않을 때 정리 작업을 수행할 수 있는 방법을 제공합니다. 하지만 이들은 성능, 안정성, 예측 가능성 등의 측면에서 여러 문제를 일으킬 수 있어 주의해야합니다. Finalizer란 무엇인가? finalizer는 Java에서 객체가 가비지 컬렉션에 의해 회수될 때 호출되는 메서드입니다. Object 클래스의 finalize 메서드를 오버라이드해 정의할 수 있습니다.  class Resource { @Override protected void finalize() throws Throwable { try { // 리소스 해제 코드 ..

Effective Java 2024.05.27

Effective Java | Item 7. 다 쓴 객체 참조를 해제하라

Effective Java 3/E 판을 읽고 정리한 기록입니다. Java에서 메모리 누수는 가비지 컬렉션(Garbage Collection) 메커니즘이 있음에도 불구하고 여전히 발생할 수 있는 문제입니다.메모리 누수는 더 이상 필요하지 않은 객체가 계속해서 메모리에 남아 있는 경우를 말합니다. 이는 애플리케이션의 성능 저하를 유발하고, 심각한 경우 OutOfMemoryError를 발생시킬 수 있습니다. 메모리 누수의 원인컬렉션에 저장된 객체를 참조 해제하지 않은 경우 import java.util.ArrayList;import java.util.List;public class MemoryLeakExample { public static void main(String[] args) { L..

Effective Java 2024.05.27

Effective Java | Item 6. 불필요한 객체 생성을 피해라

Effective Java 3/E 판을 읽고 정리한 기록입니다. 불필요한 객체 생성불필요한 객체 생성이란, 이미 존재하는 객체를 재사용할 수 있는 상황에서 새로운 객체를 생성하거나, 불필요하게 많은 객체를 생성하는 것을 의미합니다. 예시반복적으로 동일한 객체 생성매번 동일한 값의 객체를 새로 생성하는 대신,동일한 객체를 재사용할 수 있는 상황에서 객체를 계속 생성하는 것 // 불필요한 객체 생성String str1 = new String("Hello");String str2 = new String("Hello");// 객체 재사용String str3 = "Hello";String str4 = "Hello"; 불필요한 오토박싱과 언박싱 기본형 데이터 타입을 사용하는 것이 더 효율적인 상황에서, 래퍼 클래스..

Effective Java 2024.05.27

Effective Java | Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

Effective Java 3/E 판을 읽고 정리한 기록입니다. 사용하는 자원에 따라 동작이 달라지는  클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다. 정적 유틸리티 클래스나 싱글톤 방식은 모두 객체의 생성과 사용을 제한하거나 제어하는 방식이지만, 사용하는 자원에 따라 동작이 달라지는 클래스에는 적합하지 않습니다.  이유 - 정적 유틸리티 클래스정적 유틸리티 클래스는 주로 상태를 가지지 않고, 동일한 동작을 수행하는 메서드를 제공하는 데 사용됩니다. 따라서 사용하는 자원에 따라 동작이 달라지는 경우에는 정적 유틸리티 클래스로 구현하기 어렵습니다.  정적 유틸리티 클래스의 메서드는 주로 인자로 전달된 데이터를 기반으로 동작하기 때문에, 동작이 자원에 따라 달라지는 경우, 해당 데이터를 인자..

Effective Java 2024.04.23

Effective Java | Item 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

Effective Java 3/E 판을 읽고 정리한 기록입니다. 클래스의 인스턴스화를 막기 위해 private 생성자를 사용하는 것은 객체 지향 프로그래밍에서 중요한 기술 중에 하나입니다. 이를 통하여 클래스의 인스턴스화를 외부에서 제어할 수 있고, 불필요한 객체 생성을 방지할 수 있습니다.  클래스의 생성자(constructor)해당 클래스의 인스턴스를 생성할 때 호출되는 특별한 메서드입니다. 일반적으로 클래스를 정의할 때 생성자를 public 으로 선언하여 외부에서 접근할 수 있게 합니다. 그러나 때로는 특정한 이유로 인스턴스 생성을 외부에서 제한할 때가 있습니다.  이럴 때는 private 생성자를 사용합니다.  private 생성자 클래스 내부에서만 호출할 수 있는 생성자입니다.외부에서는 작접적으..

Effective Java 2024.04.23

Effective Java | Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라.

Effective Java 3/E 판을 읽고 정리한 기록입니다. "private 생성자나 열거타입으로 싱글톤을 보장한다"는 말은 객체지향 프로그래밍에서 사용되는 디자인 패턴 중 하나인 싱글톤(Singleton) 패턴을 의미합니다.  싱글톤 패턴은 애플리케이션에서 인스턴스가 단 하나만 생성되도록 보장하는 패턴입니다.  Private 생성자클래스의 생성자를 private 로 선언하여 외부에서 직접적으로 인스턴스를 생성할 수 없도록 합니다. 이는 외부에서 새로운 인스턴스를 생성하는 것을 막아, 오직 클래스 내부에서만 인스턴스를 생성할 수 있도록 합니다.  열거타입(Enum)Java에서는 열거타입을 이용해 싱글톤을 구현할 수 있습니다. 열거타입은 JVM에 의해 클래스가 로딩될 때 하나의 인스턴스로 보장되기 때문..

Effective Java 2024.03.28

Effective Java | Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라.

Effective Java 3/E 판을 읽고 정리한 기록입니다. "생성자에 매개변수가 많다면, 빌더를 고려하라"는 것은자바에서 객체를 생성할 때, 매개변수가 많은 경우, 가독성이 떨어지고 실수를 범하기 쉬워지며 코드 유지보수가 어려워질 수 있다는 의미입니다. 따라서 많은 매개변수를 가진 생성자 대신 객체를 생성하기 위한 빌더 디자인 패턴을 고려해야 한다는 것을 나타냅니다.  점층적 생성자 패턴(Telescoping constructor pattern) 점층적 생성자 패턴은 객체를 생성할 때 선택적 매개변수를 포함한 여러 개의 생성자를 제공하는 방식입니다. 이 패턴은 생성자의 매개변수 수가 늘어날수록 코드의 가독성과 유지보수가 저하될 수 있어, 선택적으로 사용되는 생성자를 제공해 불필요한 복잡성을 줄이는 ..

Effective Java 2024.03.27

Effective Java | Item 1. 생성자 대신 정적 팩터리 메서드를 고려하라.

Effective Java 3/E판을 읽고 정리한 기록입니다. 정적 팩터리 메소드란? https://yujin-17.tistory.com/entry/Java-%EC%A0%95%EC%A0%81-%ED%8C%A9%ED%86%A0%EB%A6%AC-%EB%A9%94%EC%84%9C%EB%93%9CStatic-Factory-Method Java | 정적 팩토리 메서드(Static Factory Method)정적 팩토리 메서드(Static Factory Method) 클래스의 인스턴스를 생성하고 반환하는 정적 메서드 입니다. 주로 생성자 대신 사용되며, 객체 생성 로직을 숨기고 객체 생성을 유연하게 다룰 수 있게 합yujin-17.tistory.com미리 정적 팩토리 메서드가 무엇인지에 대해 정리를 해놨습니다.미리..

Effective Java 2024.03.13