본문 바로가기
728x90
반응형

Java97

[EffectiveJava] Item 9 try-finally 보다는 try-with-resources를 사용하라 Java 라이브러리에는 close 메서드를 호출하여 직접 닫아줘야 하는 자원들이 많다. 대표적인 예로는 InputStream, OutputStream, java.sql.Connection이 좋은 예이다. 자원을 닫는 방식은 클라이언트가 놓치기 쉬워, 예측할 수 없는 성능 문제로 이어지기도 한다. 이러한 문제에대한 안전망으로 finalizer를 활용하고 있지만 Item8에서 공부한 내용처럼 언제 어떻게 동작할지 모르기 때문에 믿을만하지 못하다. 그래서 전통적으로 많이 사용되어온 방식은 try-finally가 많이 사용되었다. 다음 예제는 실제로 취업 준비시절에 JSP에서 사용하였던 제 코드입니다 public static void close(Connection con, Statement stmt) { try.. 2020. 12. 12.
[EffectiveJava] Item7 다 쓴 객체 참조를 해제하라 Item6은 객체 참조 해제에 관한 내용입니다. Java같은 경우에는 C와 C++과 다르게 메모리를 직접 관리하지 않아도 알아서 회수해가니 메모리 관리가 필요없다! 라고 생각하시는 분들이 많을거라고 생각합니다. _ 저 또한 그렇게 생각하고있었습니다. 어차피 다 관리해주는데?? 라고 생각했습니다 _ 이말은 즉 메모리 관리에 더 이상 신경쓰지 않아도 된다는 말이 맞는말이 아니라고 생각합니다. 도서에는 스택을 예로들어 소스코드와 함께 나와있지만 글로만 간단하게 중요 포인트를 집고 넘어가겠습니다. 간단하게 말하면 다음과 같다 . 다 사용한 참조객체는 null처리 하여 참조 해제 하면된다. 그렇다고 무작정 객체를 다 사용하자마자 null 처리를 하는것은 필요 이상으로 지저분해지게 만들어 바람직하지 않다. 그렇다면.. 2020. 12. 11.
[EffectiveJava] Item6 불필요한 객체 생성을 피하라 Item6은 불필요한 객체를 매번 만들지 말고 재사용해서 쓰는편이 좋다에 대한 개념으로 시작합니다 지금 보는 코드는 Item6에 해당하는 극단적인 예입니다 바로 String 을 new 를 통해 인스턴스를 만드는 방법입니다 String owner = new String("윤들윤들"); 위의 코드는 해당 코드가 실행될때 마다 새로운 String 인스턴스를 생성합니다. 해다 코드가 반복문이나 반복 호출되는 메서드 안에 있다면 쓸데없는 String 인스턴스가 엄청나게 많이 만들어지게 됩니다. 따라서 위의 코드는 아래와 같이 개선시킬 수 있다. String owner = "윤들윤들"; 이 방식을 사용하면 반복되어 호출되어도 "윤들윤들"이라는 리터럴을 사용하는 모든 코드가 같은 객체를 재사용함이 보장된다. 생성자 .. 2020. 12. 10.
[Effective Java] Item5 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 Item5 같은 경우는 Spring 개발을 하는 개발자라면 누구나 알만한 내용이라고 생각합니다. 따라서 간단하게 중요한 내용만 정리하고 넘어가도록 하겠습니다. 의존 객체 주입에 대해 처음 접해보시는분들은 다른 클래스의 자원을 사용하기위해 해당 클래스에 static 또는 final 클래스를 사용하여 객체를 생성해줄것입니다. 하지만 이럴경우 확장성에 용이 하지도 않을 뿐더러 하나의 기능에 종속되게 됩니다. 그러면 final을 때고 변경가능한 메서드를 추가해서 넣어주면 되는거 아닐까?? 란 생각을 할수 있지만 이방식은 멀티스레드 환경에서는 쓸수 없다 . 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않는다고 합니다. 그러면 어떻게 의존 객체 주입을 해야할까요 그건 바로 .. 2020. 12. 10.
728x90
반응형