개발 공부/Java17 Java | try-finally보다는 try-with-resources를 사용하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 핵심꼭 회수해야 하는 자원을 다룰 때는 try-finally 말고, try-with-resources를 사용하자.예외는 없다. 코드는 더 짧고 분명해지고, 만들어지는 예외 정보도 훨씬 유용하다.try-finally로 작성하면 실용적이지 못할 만큼 코드가 지저분해지는 경우라도, try-with-resources로는 정확하고 쉽게 자원을 회수할 수 있다. 이유close를 여러번 호출하는 경우 try-finally의 문제점만약 close를 여러 번 호출해야 하는 상황이 오면 어떻게 될까?package effectivejava.chapter2.item9.tryfinally;import java.i.. 2024. 7. 4. Java | finalizer와 cleaner 사용을 피하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 핵심cleaner(java 8까지는 finalizer)는 안전망 역할이나 중요하지 않은 네이티브 자원 회수용으로만 사용하자.물론 이런 경우라도 불확실성과 성능 저하에 주의해야한다. 이유finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있다.finalizers는 java의 객체 소멸자cleaner는 finalizer보다는 덜 위험하지만, 여전히 예측할 수 없고, 느리고, 일반적으로 불필요하다.finalizer과 cleaner로는 제때 실행되어야하는 작업을 할 수 없다.객체에 접근 할 수 없게 된 후 실행까지 얼마나 걸릴지 알 수 없다.상태를 영구적으로 수정하는 작업에서는 절대 fi.. 2024. 7. 4. Java | 다 쓴 객체 참조를 해제하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 핵심메모리 누수는 겉으로 잘 드러나지 않아 시스템에 수년간 잠복하는 사례도 있다.이런 누수는 철저한 코드 리뷰나 힙 프로파일러 같은 디버깅 도구를 동원해야만 발견되기도 한다.그래서 이런 종류의 문제는 예방법을 익혀두는 것이 매우 중요하다. 이유메모리 누수가 일어나는 위치는 어디인가?1. 메모리를 직접 관리하였으나 제거하지 않은 경우package effectivejava.chapter2.item7;import java.util.*;// 코드 7-1 메모리 누수가 일어나는 위치는 어디인가? (36쪽)public class Stack { private Object[] elements; .. 2024. 7. 4. Java | 불필요한 객체 생성을 피하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 이유1. 객채를 매번 생성하기보다는 재사용하는 편이 좋다단 하나의 인스턴스를 사용하면 객체의 재사용성이 보장된다.만약, 무거운 객체라면 매번 생성할 때마다 많은 자원이 들어갈 것이고, 인스턴스를 자주 생성하게 되면 GC가 동작하게 될 확률이 높아지고 이는 애플리케이션 성능을 저하시키는 요인 중 하나이다.대표적인 예시 String참조 링크만약 String이 가변(mutable)이라면 같은 참조를 가지는 객체의 값을 변경할 수 있게 된다. 이는 같은 참조 & 다른 값이라는 상황을 만들 수 있기 때문에 재사용이 불가능하다.따라서 객체 공유를 통한 재사용이 목적인 String Pool을 사용할 .. 2024. 7. 4. Java | 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 핵심클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원이 클래스 동작에 영향을 준다면 싱글톤과 정적 유틸리티 클래스는 사용하지 않는 것이 좋다.이 자원 들을 클래스가 직접 만들게 해서도 안 된다.대신 필요한 자원을 (혹은 그 자원을 만들어주는 팩터리를) 생성자(정적 팩터리, 빌더)에 넘겨주자.의존 객체 주입이라 하는 이 기법은 클래스의 유연성, 재사용성, 테스트 용이성을 개선해준다. 이유사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다.인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식의존 객체 주입생성자, 정적 팩터리, 빌더.. 2024. 7. 4. Java | 인스턴스화를 막으려거든 private 생성자를 사용하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 핵심의도치 않게 클래스가 인스턴스화 되는 것을 막기 위해서는 prviate 생성자를 추가해라 이유추상 클래스로 만든다고 하더라도 하위 클래스를 만들어 인스턴스화 하면 같은 문제가 생긴다. 관련 코드 및 예시// 기본 생성자가 만들어지는 것을 막기 위함public class ExampleClass { private ExampleClass() { throw new AssertionError(); }}주석을 다는 것도 좋은 방법이다. 2024. 7. 4. 이전 1 2 3 다음