자바 (10) 썸네일형 리스트형 아이템 83: 지연 초기화는 신중히 사용하라 지연 초기화 public class FileUtil { private File oldfile = new File("oldfile"); ... } 여기 FileUtil 클래스가 있다. 이 클래스의 oldfile 필드가 프로그램이 100번 실행될 때 한 번 사용될 까 말까하는 필드라면 어떨까? 100번 실행되는 동안 사용하지도 않을 oldfile을 계속 불러와서 초기화 할 것이고 이는 명백한 리소스 낭비이다. 지연 초기화는 위와 같은 문제에 대한 해답이 될 수 있다. 자주 사용되지 않는 필드를 프로그램이 시작할 때가 아니라 비로소 사용될 때 초기화 하는 것이다. public class OldFileUtil { private File oldfile = null; ... public File getOldFile.. 아이템 82: 스레드 안정성 수준을 문서화하라 스레드 안정성 문서화 클래스를 개발할 때, 해당 클래스를 사용할 클라이언트들을 위하여 필요한 정보들을 주석으로 작성하여 문서화 해야한다. 아무런 설명이 없다면 클라이언트는 추측과 가정을 통해 그 클래스를 사용하게 된다. 특히 스레드 안정성에 대한 정보는 설명이 필요한 중요한 정보 중 하나이다. 스레드 안정성이 잘못되면 프로그램에 심각한 오류가 발생할 것이다. 스레드 안정성 수준 불변(immutable): 이 클래스의 인스턴스는 마치 상수와 같아서 외부 동기화가 필요없다. 무조건적 스레드 안전(unconditionally thread-safe): 이 클래스의 인스턴스는 수정될 수 있으나, 내부에서 충실히 동기화하여 별도의 외부 동기화 없이 동시에 사용해도 안전하다. 조건부 스레드 안전(conditional.. 아이템 81: 동시성 유틸리티를 애용하라 wait와 notify public class Main { public synchronized void waitMehod() throws InterruptedException { System.out.println(Thread.currentThread().getId() + " wait"); wait(); System.out.println(Thread.currentThread().getId() + " notified"); } public synchronized void notifyMethod() throws InterruptedException { System.out.println(Thread.currentThread().getId() + " notify all"); notifyAll(); } public .. Java 에러 java.io.FileNotFoundException: class path resource [temp.txt] cannot be resolved to absolute file path because it does not reside in the file system: // resources 폴더에 있는 temp.txt 파일을 읽어온다. File file = new ClassPathResource("temp.txt").getFile(); ... java.io.FileNotFoundException: class path resource [temp.txt] cannot be resolved to absolute file path because it does not reside in the file system: ... resources 폴더에 있는 파일을 읽어들이는 코드가 local에서는 잘 동작하는데, 개발계에서 자꾸 위와 같은 에러가 발생하였다. 구글링을 해보니 원인을 다음과 같았다. 1. local에서 코드를 실행시킬 때는 temp.txt 파일이 소스폴더에 독립적인 .. JAVA 에러 java.lang.IllegalArgumentException: URI is not hierarchical // resources 폴더에 있는 temp.txt 파일을 읽어온다. File file = new File(new ClassPathResource("temp.txt").getURI()); java.lang.IllegalArgumentException: URI is not hierarchical ... resources 폴더에 있는 파일을 읽어들이는 코드가 local에서는 잘 동작하는데, 개발계에서 자꾸 위와 같은 에러가 발생하였다. 구글링을 해보니 원인을 다음과 같았다. 1. local에서 코드를 실행시킬 때는 temp.txt 파일이 소스폴더에 독립적인 하나의 파일로 존재하기 때문에 정상적으로 실행된다. 2. 개발계에는 jar파일이 실행되기 때문에 temp.txt가 독립된 파일이 아니라 jar파일의 데이.. Java 8 ~ 11 버젼별 특징 1. Java 1.8 2014년 3월 발표. 일반 지원은 2019년 1월에 종료되었고, 연장 지원은 2030년 12월에 종료될 예정이다. 1) Interface static And default method 본래 Interface는 함수의 구현체 즉 body를 가질 수 없었다. 하지만 Java 1.8 부터는 인터페이스에 body를 가지는 static method와 default method가 추가되었다. // JavaInterface.java public interface JavaInterface { static public String interfaceStaticMethod() { return "interfaceStaticMethod"; } } // main 영역 public static void ma.. 자바 Failed to instantiate [java.util.List]: Specified class is an interface 에러 자바 스프링기반으로 웹서비스를 개발하던 중, 다음과 같은 에러가 발생했다. @PostMapping("/mypath") public ResultView myPostMethod(List myList) { return new ResultView(myService.doSomething(myList)); } org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface 위에 보이는 /mypath API를 호출하면, List가 인터페이스 이기 때문에 이를 초기화 할수 없다는 에러가 발생한다. 에러 문구만 보고 List를 ArrayList로 변경해주면, 에.. MyBatis: Mapped Statements collection already contains value for ~ 에러 MyBatis를 사용하여 API 서버를 개발하던 중, 다음과 같은 에러를 만났다. Mapped Statements collection already contains value for ~ 검색을 해보니 중복되는 Id가 존재할 경우 이러한 에러가 발생한다고 해서, 마이바티스의 맵퍼 xml 파일을 뒤져보았다. ... ... ... 그 결과, 동일한 Id를 가진 select 구문을 찾았고 이를 수정하니 에러가 발생하지 않았다. 이전 1 2 다음