๋ชฉ๋ก๐/Effective Java (6)
DevLog ๐ถ
๐ฌ ์ดํฉํฐ๋ธ์๋ฐ ์์ดํ 4์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. โ๏ธ ์ ํธ๋ฆฌํฐ ํด๋์ค ์ธ์คํด์ค ๋ฉ์๋์ ๋ณ์๊ฐ ์์ด, ์ ์ ๋ฉ์๋์ ์ ์ ๋ณ์๋ง ์ ๊ณตํ๋ ํด๋์ค๋ฅผ ์๋ฏธํ๋ค. ๊ฐ์ธ์ ์ธ ์๊ฒฌ์ด์ง๋ง, ์ ํธ๋ฆฌํฐ ํด๋์ค๋ ๊ฐ์ฒด์งํฅ์ ๊ด์ ์์ ๋ดค์ ๋ ์ข๋ค๊ณ ๋ ๋ณด๊ธฐ ํ๋ค ๊ฒ ๊ฐ๋ค. ์๋ฐ์์ ์ ๊ณตํ๋ ์ ํธ๋ฆฌํฐ ํด๋์ค ์ค์ ๋ํ์ ์ธ ๊ฒ๋ค์ ๋ช ๊ฐ์ง ์ดํด๋ณด์. public class Arrays { private Arrays() {} ... } ์ ์ฝ๋๋ java.util์ ์กด์ฌํ๋ Arrays ํด๋์ค์ด๋ค. ์ด ํด๋์ค๋ ๋ฐฐ์ด์ ์กฐ์ํ๊ธฐ ์ํด ์ ๋ ฌ์ด๋ ๊ฒ์ ๋ฑ์ ํ ์ ์๋ ๋ค์ํ ์ ์ ๋ฉ์๋๋ค์ ์ ๊ณตํ๋ค. (๋๋ถ๋ถ์ ๋ฉ์๋๋ ์ค๋ฒ๋ก๋ฉ๋์ด ์์ด์ ์ค์ ๋ก ํ๋ ์ญํ ์ ๊ฒ์, ๋ณต์ฌ, ์ฑ์ฐ๊ธฐ, ์ ๋ ฌ... ๋ฑ๋ฑ์ด ์๋ค) ์ ํธ๋ฆฌํฐ ํด๋์ค๋ก ์ฌ..
๐ฌ ์ดํฉํฐ๋ธ์๋ฐ ์์ดํ 3์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. โ๏ธ ์ฑ๊ธํด ์ธ์คํด์ค ์ธ์คํด์ค๋ฅผ ์ค์ง ํ๋๋ง ์์ฑํ ์ ์๋ ํด๋์ค. ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ค์ผ ์ ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์๋ค. ๋ค๋ง, ๊ฒฐํฉ๋๊ฐ ์ฆ๊ฐํ๋ฉฐ ํด๋ผ์ด์ธํธ์ ํ ์คํธ๊ฐ ์ด๋ ค์์ง ์ ์๋ค๋ ์ ์ด ์กด์ฌํ๋ค. -> ์ธ์คํด์ค๋ฅผ ๊ตฌํํด์ ๋ง๋ ์ฑ๊ธํด์ด ์๋๋ผ๋ฉด, ์ฑ๊ธํด ์ธ์คํด์ค๋ฅผ mock ๊ฐ์ฒด๋ก ๋์ฒดํ๊ธฐ๊ฐ ํ๋ค๊ธฐ ๋๋ฌธ์ด๋ค. ๐ฌ ์์ฑํ๋ ๋ฐฉ๋ฒ 1. ์์ฑ์๋ฅผ ๋ชจ๋ private๋ก ๋ง๋ค๊ณ , ์ธ์คํด์ค์ ์ ์ผํ ์ ๊ทผ์๋ฅผ public static์ผ๋ก ์์ฑํ๊ธฐ public class Crew { public static final Crew INSTANCE = new Crew(); private Crew() { ... } public void hello() {...} }..
๐ฌ ์ดํฉํฐ๋ธ์๋ฐ ์์ดํ 2์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. โ๏ธ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๊ฐ ๋ง์ ๊ฒฝ์ฐ, ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ์์ฑํ ์ ์์๊น? - ์์ฑ์๋ฅผ ์ฌ๋ฌ ์ข ๋ฅ๋ก ๋์ด์, ํ์ํ ๋งค๊ฐ๋ณ์๋ง์ ์ฌ์ฉํ๋ ์์ฑ์ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ง๋ค ์ ์๋ค - ๊ทธ๋ฌ๋, ์ด ๋ฐฉ๋ฒ์ ํ๋๊ฐ ๋์ด๋๋ฉด ๊ทธ๋งํผ ๊ด๋ฆฌํด์ผ ํ๋ ์์ฑ์๊ฐ ๋ง์์ง๊ธฐ ๋๋ฌธ์ ์ข์ง ์๋ค. - ๋ํ, ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ฉด (์ธํ ๋ฆฌ์ ์ด์ ํ๋ผ๋ฏธํฐ ํํธ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์) ๊ฐ ๊ฐ์ ์๋ฏธ๋ฅผ ํ๋์ ์์๋ณด๊ธฐ๊ฐ ํ๋ค๊ณ , ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ๋์์ง ์ ์๋ค. public class Crew { private String name; private int age; private String course; private String nickname; } ์์๋ก, ํฌ๋ฃจ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋..
๐ฌ ์ดํฉํฐ๋ธ์๋ฐ ์์ดํ 78์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ์ด๋ฒ ์ ๋ฆฌ๋ ์ฑ ๊ณผ๋ ๋ค์ ๋ค๋ฅธ ๋ด์ฉ์ ๋๋ค :D ๊ฐ๋ ์์ฒด๊ฐ ์ด๋ ค์ด ๋ถ๋ถ์ด์ด์ ์ฑ ์ ์ฝ์ผ๋ฉฐ ๊ถ๊ธํ ๋ถ๋ถ์ ๋ํด ์กฐ์ฌํ๋ ์์ผ๋ก ์์ฑํ์์ต๋๋ค ๐โ๏ธ ๋ ํธ์ผ๋ก ๋๋์ด์ ํฌ์คํ ํ ์์ ์ ๋๋ค! ์์ง ๋ฏธํกํ ์ ์ด ๋ง์์, ๋ ์ ํํ ์ ๋ณด๋ฅผ ์๊ฒ ๋๋ฉด ๋ณธ ๊ฒ์๊ธ์ ์์ ํ ์์ ์ ๋๋ค. โ๏ธ ๋๊ธฐํ๋ ๋ฌด์์ผ๊น? ํ์ฌ ์์ก์ด 10000์์ด๊ณ , ๊ฐ๊ฐ 1000์์ฉ ์ ๊ธํ๋ ํ์๋ฅผ 5000๋ฒ, 1000์์ฉ ์ถ๊ธํ๋ ํ์๋ฅผ 5000๋ฒ ๋ฐ๋ณตํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๋์ผํ ๊ธ์ก์ ๋ํด ๋์ผํ ํ์๋ก 5000๋ฒ์ฉ ์งํํ๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ์ ์์ก์๋ ๋ณํ๊ฐ ์๋ค๊ณ ์๊ฐํ ์ ์๋ค. [synchronized ํค์๋ ๋ถ์ด๊ธฐ ์ ] public class Main { public stati..
๐ฌ ์ดํฉํฐ๋ธ์๋ฐ ์ฑํฐ 9๋ฅผ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. โ๏ธ ๋ฆฌ์์ค๋ ์ด๋ป๊ฒ ์ป์ ์ ์์๊น? ํํ ์๋ฐ์์๋ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ๋ค์, catch๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ค ๋ฐ์ํ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ณ , finally์์ close()๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ซ์์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. (try-catch-finally) ์ด๋, ๋ซ์์ฃผ์ง ์์ผ๋ฉด ํด๋ผ์ด์ธํธ๋ ์๊ธฐ์น ๋ชปํ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ์๋ ์๋ค. ์ค๋ผํด ๋ฌธ์๋ฅผ ๋ฐ์ทํด๋ณด๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ฅ์ด ์กด์ฌํ๋ค. The typical Java application manipulates several types of resources such as files, streams, sockets, and database connections. Such resources must be handl..
๐ฌ ์ดํฉํฐ๋ธ์๋ฐ ์ฑํฐ 1์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. โ๏ธ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋? ์ฐํ ์ฝ ๋ฏธ์ ์ ์งํํ๋ฉด์, ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๋ง ๋ง์ด ์ฌ์ฉํ์๋ค. ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋, ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ์ ์ ๋ฉ์๋์ด๋ค. ์ฆ, ์์ฑ์ ์ญํ ์ ํ๋ฉด์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ ์ 1์ฐจ์ ์ผ๋ก ํต๊ณผํ๋ '๋ฌธ' ๊ฐ์ ์กด์ฌ๋ผ๊ณ ๋ ๋ณผ ์ ์๋ค. ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ ์ด ์ข์๊น? ๐ฌ ๋์ผํ ์๊ทธ๋์ฒ๋ผ๋, ์ด๋ฆ์ ๋ฐ๋ผ ์๋กญ๊ฒ ์์ฑํด์ค ์ ์๋ค. ์ด๋ ๋ , ์ฐํ ์ฝ์ ํฌ๋ฃจ ์ ์ฒญ์ ํ๊ธฐ ์ํด ์ ์ฒญ์๋ฅผ ์์ฑํ๊ณ ์์๋ค. ์ด๋, ๋๋ค์์ ์์ง ์ ํ์ง ๋ชปํ ํฌ๋ฃจ๋ ์ด๋ฆ๊ณผ ๋์ด, ๊ทธ๋ฆฌ๊ณ ๊ณผ์ ๋ง์ ๊ฐ์ง๊ณ ํฌ๋ฃจ๋ฅผ ์ ์ฒญํ๊ณ ์ถ์๋ค. public class Crew { private String name; private Strin..