item 9 incheol - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

Effective Java 3e μ•„μ΄ν…œ 9λ₯Ό μš”μ•½ν•œ λ‚΄μš© μž…λ‹ˆλ‹€.

μžμ› λ‹«κΈ°λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ λ†“μΉ˜κΈ° μ‰¬μ›Œμ„œ μ˜ˆμΈ‘ν•  수 μ—†λŠ” μ„±λŠ₯ 문제둜 이어지기도 ν•œλ‹€.

μ „ν†΅μ μœΌλ‘œ μžμ›μ΄ μ œλŒ€λ‘œ λ‹«νž˜μ„ 보μž₯ν•˜λŠ” μˆ˜λ‹¨μœΌλ‘œ try-finallyκ°€ μ“°μ˜€λ‹€. μ˜ˆμ™Έκ°€ λ°œμƒν•˜κ±°λ‚˜ λ©”μ„œλ“œμ—μ„œ λ°˜ν™˜λ˜λŠ” 경우λ₯Ό ν¬ν•¨ν•΄μ„œ 말이닀.

static void copy(String src, String dst) throws IOException {
	InputStream in = new FilInputStream(src);
	try {
		OutStream out = new FileOutputStream(dst);
		try {
			byte[] buf = new byte[BUFFER_SIZE];
			int n;
			while ((n = in.read(buf)) >= 0)
				out.write(buf, 0, n);
		} finally {
			out.close();
		}
	} finally {
		in.close();
	}
}

μ˜ˆμ»¨λŒ€ 물리적인 λ¬Έμ œκ°€ 생긴닀면 firstLineOfFile λ©”μ„œλ“œ μ•ˆμ˜ readLine λ©”μ„œλ“œκ°€ μ˜ˆμ™Έλ₯Ό λ˜μ§€κ³ , 같은 이유둜 close λ©”μ„œλ“œλ„ μ‹€νŒ¨ν•  것이닀. λ¬Όλ‘  두 번째 μ˜ˆμ™Έ λŒ€μ‹  첫 번째 μ˜ˆμ™Έλ₯Ό κΈ°λ‘ν•˜λ„λ‘ μ½”λ“œλ₯Ό μˆ˜μ •ν• μˆ˜λŠ” μžˆμ§€λ§Œ, μ½”λ“œκ°€ λ„ˆλ¬΄ μ§€μ €λΆ„ν•΄μ Έμ„œ μ‹€μ œλ‘œ κ·Έλ ‡κ²ŒκΉŒμ§€ ν•˜λŠ” κ²½μš°λŠ” 거의 μ—†λ‹€.

μ΄λŸ¬ν•œ λ¬Έμ œλ“€μ€ μžλ°” 7이 νˆ¬μ²™ν•œ try-with-resources 덕에 λͺ¨λ‘ ν•΄κ²°λ˜μ—ˆλ‹€. 이 ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ ν•΄λ‹Ή μžμ›μ΄ AutoCloseable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.

static void copy(String src, String dst) throws IOException {
	
	try ( InputStream in = new FilInputStream(src);
				OutStream out = new FileOutputStream(dst)) {
			byte[] buf = new byte[BUFFER_SIZE];
			int n;
			while ((n = in.read(buf)) >= 0)
				out.write(buf, 0, n);
	}
} 

try-with-resources 버전이 μ§§κ³  읽기 μˆ˜μ›”ν•  뿐 μ•„λ‹ˆλΌ 문제λ₯Ό 진단 ν•˜κΈ°λ„ 훨씬 κ°„νŽΈν•˜λ‹€. λ˜ν•œ, μžλ°” 7μ—μ„œ Throwable에 μΆ”κ°€λœ getSuppressed λ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜λ©΄ ν”„λ‘œκ·Έλž¨ μ½”λ“œμ—μ„œ κ°€μ Έμ˜¬ μˆ˜λ„ μžˆλ‹€.

getSuppressed은 ꡬ체적으둜 μ–΄λ–»κ²Œ μ‚¬μš©ν•  수 μžˆμ„κΉŒ?

정리

κΌ­ νšŒμˆ˜ν•΄μ•Ό ν•˜λŠ” μžμ›μ„ λ‹€λ£° λ•ŒλŠ” try-finally 말고 try-with-resourcesλ₯Ό μ‚¬μš©ν•˜μž. μ˜ˆμ™ΈλŠ” μ—†λ‹€. μ½”λ“œλŠ” 더 μ§§κ³  λΆ„λͺ…ν•΄μ§€κ³ , λ§Œλ“€μ–΄μ§€λŠ” μ˜ˆμ™Έ 정보도 훨씬 μœ μš©ν•˜λ‹€. try-finally둜 μž‘μ„±ν•˜λ©΄ μ‹€μš©μ μ΄μ§€ λͺ»ν•  만큼 μ½”λ“œκ°€ μ§€μ €λΆ„ ν•΄μ§€λŠ” κ²½μš°λΌλ„ try-wirh-resources λ‘œλŠ” μ •ν™•ν•˜κ³  μ‰½κ²Œ μžμ›μ„ νšŒμˆ˜ν•  수 μžˆλ‹€.