이전 JPA 에피소드 1탄에서 SQL 중심적인 개발의 문제점과 JPA를 왜 써야하는지?에 대해서 알아보았는데요, 또한 JPA에서 가장 중요한 2가지를 언급드렸었습니다. 1) 객체와 관게형 데이터베이스 매핑하기(Object Relational mapping) DB를 어떻게 설계하고 객체를 어떻게 설계해서 중간에 어떻게 JPA로...
[이펙티브자바] 아이템9-try-finally보다는 try-with-resources를 사용하라
자바에선 InputStream, OutputStream, java.sql.Connection 등과 같은 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다. 이는 예측할 수 없는 성능 문제로 이어지기도 한다. 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 있다. 예외가 발생하거나 메서드에서 반환되는 경우를...
[이펙티브자바] 아이템8-finalizer와 cleaner 사용을 피하라
이펙티브 자바 아이템8 finalizer에 관련되어 이해하기 쉽게 잘 정리된 포스팅이 있어 참고하여 정리해보려 한다. java에서의 모든 객체는 Object 객체를 상속받는다. 그리고 Object에는 finalize() 라는 메서드가 존재한다. finalize() 메서드는 클래스의 객체가 더 이상 참조되고 있지 않을 경우 GC가 메모리에 정리하기 ...
[Java] unmodifiableList
Unmodifiable Collection.unmodifiableList() 같은 메소드에서 리턴되는 레퍼런스는 수정 메소드를 호출 할 수 없다. 여기서 수정 메서드 라 함은 add(), set(), addAll() 등을 의미한다. 만약 호출하게 된다면 UnsupportedOperationException이 발생한다. 하지만 원본 리스트 자체가 수정...
[이펙티브자바] 아이템7-다 쓴 객체 참조를 해제하라
c, c++ 처럼 메모리를 직접 관리해야 하는 언어를 쓰다 자바처럼 가비지 컬렉터를 갖춘 언어로 넘어오면 일일이 메모리 관리를 해줘야하는 번거로움이 사라지기에 매우 편해질 것이다. 하지만, 여기서 반드시 주의할 점은 있다. package effectivejava.chapter2.item7; import java.util.*; // 코드 ...
[Java] WeakHashMap
Java에서는 세 가지 주요 유형의 참조(Reference) 방식 강한 참조 (Strong Reference) Integer prime = 1; 와 같은 가장 일반적인 참조 유형이다. prime 변수 는 값이 1 인 Integer 객체에 대한 강한 참조를 가진다. 이 객체를 가리키는 강한 참조가 있는 객체는 GC대상이 되지않는다. 부...
[학습할래][JPA-Episode1] JPA의 세계로
JPA 왜 써야하는가? 애플리케이션은 객체 지향 개발을 하면서 코드를 까보면 SQL만 가득차 있는 모습을 볼 수 가 있는데요. 이러한 SQL 중심적인 개발은 많은 문제점들을 야기합니다. 1. 무한 반복, 지루한 코드 CRUD 쿼리 무한 반복해야됩니다. 테이블이 10개면 10개를 다해줘야해서 생산성이 저하되고 힘들게 됩니다.(객체에 필드가 추가되면 쿼...
[이펙티브자바] 아이템6-불필요한 객체 생성을 피하라
똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을때가 많다.(String 객체 생성 방식과 리터럴 방식의 차이점) 재사용은 빠르고 세련되며 특히 불변 객체는 언제든 재사용할 수 있다. 다음 코드는 하지 말아야할 극단적 예이니 유심히 살펴보자. String s = new String("bikini"); 위 ...
[이펙티브자바] 아이템5-자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스가 싱글턴 방식이 적합하지 않다. 클래스가 여러 자원 인스턴스를 지원해야 하며 자원에 따라 동작이 달라지는 경우엔 의존 객체 주입을 사용할 수 있다. 이는 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식이다. 의존 객체 주입의 장점 불변(...
[이펙티브자바] 아이템4-인스턴스화를 막으려거든 private 생성자를 사용하라
단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있을 것이다. 예를 들면, java.lang.Math, java.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있다. 또한 java.util.Collections 처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아 놓을 수...