๋ชฉ๋ก๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (124)
DevLog ๐ถ
ํ์ถ๋ ์งํํ ๋ ๋ฒ์งธ ํ์ด ํ๋ก๊ทธ๋๋ฐ์ธ ์ฌ๋ค๋ฆฌ ๋ฏธ์ ์ด๋ค. ์ฌ์ค ์ด๋ฒ ๋ฏธ์ ์ ๊ต์ฅํ ๋นจ๋ฆฌ merge๊ฐ ๋์ด์ ๋ฏธ์ ์์ฒด์ ๋ง์ด ์ ๊ฒฝ์ ์ฐ์ง๋ ์์๋ ๊ฒ ๊ฐ์๋ฐ, ๋ค๋ฅธ ํฌ๋ฃจ๋ถ๋ค์ด ๊ณ ๋ฏผํ์๋ ๊ฑธ ๋ณด๊ณ ์์ผ๋ ๋ด๊ฐ ๋๋ฌด ์๊ฐ์ ์ ํ ๊ฒ์ธ๊ฐ... ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค ๐ฆ ๋ค์ ๋ฏธ์ ์์๋ ์กฐ๊ธ ๋ ์ ๊ฒฝ์ฐ๋ฉด์ ์งํํด์ผ ํ ๊ฒ ๊ฐ๋ค. ๊ทธ๋๋ ํ์ถ ๋๋ถ์ ๋๋ฉ์ธ ์ค๊ณ๋ฅผ ๊ต์ฅํ ์์ํ๊ฒ ํด์, ๋ ๋น ๋ฅด๊ฒ ๋ง๋ฌด๋ฆฌ ํ ์ ์์๋ ์๊ฐ์ธ ๊ฒ ๊ฐ๋ค. (๋ฌผ๋ก ... ์ด ๊ฒ์๊ธ์ ์์ฑํ ์์ ์์๋ ํ์ฐธ ์ ์ ๋๋ ๋ฏธ์ ์ด์ง๋ง, ์์ ์ ์ฅ์ ํด๋๊ณ ์ฌ๋ฆฌ์ง ์์์ด์...ใ ๋ค๋ฆ๊ฒ ์ฌ๋ฆฐ๋ค) โ๏ธ ์์ฑํ ์ฝ๋ GitHub - Cl8D/java-ladder: ์ฌ๋ค๋ฆฌํ๊ธฐ ๋ฏธ์ ์ ์ํ ์ ์ฅ์์ฌ๋ค๋ฆฌํ๊ธฐ ๋ฏธ์ ์ ์ํ ์ ์ฅ์. Contribute to..
์ ๋ง ์์ ์ญํ ์ด์ง๋ง ์กฐ๊ธ์ฉ ์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์๋๋ฐ, ์ฝํ๋ฆฐ ๋ฌธ๋ฒ์ ๊ณต๋ถํ๋ฉด์ ์๋ก์ด ์ ์ ์๊ฒ ๋์ด ๊ธฐ๋กํ๊ณ ์ ํ๋ค! (์ฝํ๋ฆฐ... ์ต์ํด์ง๋ฉด ์ ๋ง ํธํ ๊ฒ ๊ฐ์ง๋ง ์์ง์ ์ ๋ชจ๋ฅด๊ฒ ๋ค. ์ด๋ ต๋ค!) โ๏ธ Amazon S3 with Kotlin ์ฝํ๋ฆฐ๊ณผ s3๋ฅผ ์ฐ๋ํ๊ฒ ๋๋ฉด, ์๊ธฐ์น ๋ชปํ ์๋ฒ ์ค๋ฅ์ ๋๋นํ์ฌ ํ์ผ์ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ ๋, ํน์ url ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ๋ ๋ค์๊ณผ ๊ฐ์ด Exception์ด ๋ฐ์ํ ์ ์๊ฒ ๋๋ค. ํ ๊ฐ์ง ๊ถ๊ธํ ์ ์, AmazonServiceException์ ๊ฒฝ์ฐ ๋ถ๋ชจ ํ์ ์ด SdkClientException์ธ๋ฐ ์ ๊ตฌ๋ถํด๋์์๊น... ์๋ฌดํผ, ๊ธฐ์กด์๋ ์๋ฒ ์๋ฌ์ ๋ํด ์ ํ ๊ณ ๋ คํ์ง ์์ ์ํ๋ก ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ์์๋ค. fun deleteFile(file..
์ผ๋ง ์ ์ ์ฐํ ์ฝ์์ ์ฒด์ค ํผ๋๋ฐฑ 2 ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์, ๋ํธ๋ก์ดํธ ํํ (classicist) vs ๋ฐ๋ ํํ (Mockist)์ ๋ํด์ ๋ฃ๊ฒ ๋์๋ค. ๋ ๋ค ์ฒ์ ๋ค์ด๋ณธ ์ฉ์ด์ฌ์ ๊ถ๊ธํ ๋ง์์ ์ด๊ฒ์ ๊ฒ ์ฐพ์๋ณด๋ฉฐ ์์ฑํด๋ณด๊ณ ์ ํ๋ค. (์ ๋ฐ์ ์ธ ๋ด์ฉ์ ํ ์ฝํก ๋ฐํ ๋ด์ฉ์ ๋ง์ด ์ฐธ๊ณ ํ์์ต๋๋ค ๐โ๏ธ) โ๏ธ ๋จ์ ํ ์คํธ๊ฐ ๋ฌด์์ผ๊น? ๋จ์ ํ ์คํธ๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ ธ์ผ ํ๋ค. 1. Low-level ํ ์คํธ๋ฅผ ๋ค๋ฃจ์ด์ผ ํ๋ค. 2. ์ผ๋ฐ์ ์ธ ํ ์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. 3. ๋นจ๋ผ์ผ ํ๋ค. ์ฌ๊ธฐ์ ๋จ์๋ ๋ฌด์์ผ๊น? ๋ง์ฝ, ๊ธฐ๋ฅ ๋จ์๋ผ๊ณ ๊ตฌ์ฑ๋๋ค๋ฉด ๊ฐ์ฒด์งํฅ์ ๊ด์ ์์๋ ํด๋น ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํด๋์ค์ ์งํฉ์ด ๋จ์๊ฐ ๋ ์๋ ์๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋จ์ ํ ์คํธ๋ฅผ ์งํํ๊ธฐ ์ํด์, ์ด๋ ํ ๋จ์๊ฐ ์ํธ ์์ฉํ ์ ์๋..
๐ฌ ์ดํฉํฐ๋ธ์๋ฐ ์์ดํ 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..
๐ฌ ๋ชจ๋ ์๋ฐ๋ฅผ ๊ณต๋ถํ๋ ๋์ค์, ์ฑ ์์ ๋์๋ ์์ ๋ฅผ ์ปค์คํ ํ๋ ค๋ค๊ฐ ์ด๋ฐ ์ํฉ์ ๋ง๋ฌ๋ค. โ๏ธ ๋ฌธ์ ์ํฉ ๋จผ์ , ์ฌ์ฉํ ํฌ๋ฃจ ํด๋์ค์ ๋ํ ์ ๋ณด์ด๋ค. public class Crew { private String name; private String nickname; private int age; private Course course; private Crew() { // ์ธ๋ถ์์ ์ธ์คํด์คํ ๋ง๊ธฐ } public static Crew createByName(final String name, final int age, final Course course) { Crew crew = new Crew(); crew.name = name; crew.age = age; crew.course = course; r..
์ฐํ ์ฝ์์ ๋ฌธ์์ด ๊ด๋ จ ์์ ์ ๋ฃ๋ค๊ฐ, ์ด๊ฒ์ ๊ฒ ๊ถ๊ธํด์ ์ฐพ์๋ดค๋๋ฐ ๋ธ๋ก๊ทธ ๊ธ๋ก ์์ฑํ๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ์ด๋ ๊ฒ ์์ฑํ๋ค ๐ค ์์์ ํ๋ฆ๋๋ก ๊ถ๊ธํ ์ ๋ค์ ์ฐพ์๋ณธ ๊ฑฐ์ฌ์ ์๋นํ ๋์๊ฐ ์์ ๊ฒ ๊ฐ๋ค ๐ฅฒ โ๏ธ String๊ณผ String pool String์ ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ํด๋์ค์ด๋ค. ๋ถ๋ณ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์, ํ ๋ฒ ์์ฑ๋๋ฉด ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๋ํ, final ํด๋์ค๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ ์์์ด ๋ถ๊ฐ๋ฅํ๋ค. UTF-16 ์ธ์ฝ๋ฉ์ ํ์ฉํ์ฌ, ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๊ฐ ๋ฌธ์๋ฅผ 2๋ฐ์ดํธ (=16๋นํธ) ์ ๋์ฝ๋ ๋ฌธ์๋ก ํํํ๋ค. public String(int[] codePoints, int offset, int count) { checkBoundsOffCount(offset, count,..
๐ฌ ์ดํฉํฐ๋ธ์๋ฐ ์ฑํฐ 1์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. โ๏ธ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋? ์ฐํ ์ฝ ๋ฏธ์ ์ ์งํํ๋ฉด์, ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๋ง ๋ง์ด ์ฌ์ฉํ์๋ค. ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋, ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ์ ์ ๋ฉ์๋์ด๋ค. ์ฆ, ์์ฑ์ ์ญํ ์ ํ๋ฉด์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ ์ 1์ฐจ์ ์ผ๋ก ํต๊ณผํ๋ '๋ฌธ' ๊ฐ์ ์กด์ฌ๋ผ๊ณ ๋ ๋ณผ ์ ์๋ค. ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ ์ด ์ข์๊น? ๐ฌ ๋์ผํ ์๊ทธ๋์ฒ๋ผ๋, ์ด๋ฆ์ ๋ฐ๋ผ ์๋กญ๊ฒ ์์ฑํด์ค ์ ์๋ค. ์ด๋ ๋ , ์ฐํ ์ฝ์ ํฌ๋ฃจ ์ ์ฒญ์ ํ๊ธฐ ์ํด ์ ์ฒญ์๋ฅผ ์์ฑํ๊ณ ์์๋ค. ์ด๋, ๋๋ค์์ ์์ง ์ ํ์ง ๋ชปํ ํฌ๋ฃจ๋ ์ด๋ฆ๊ณผ ๋์ด, ๊ทธ๋ฆฌ๊ณ ๊ณผ์ ๋ง์ ๊ฐ์ง๊ณ ํฌ๋ฃจ๋ฅผ ์ ์ฒญํ๊ณ ์ถ์๋ค. public class Crew { private String name; private Strin..
๐ฌ ๋ชจ๋ ์๋ฐ ์ธ ์ก์ ์ฑํฐ 3์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. โ๏ธ ๋๋ค๊ฐ ๋ญ๋ฐ์? ์ง๋ ์ฑํฐ์์๋ ๋์ ํ๋ผ๋ฏธํฐํ๋ฅผ ํตํด์ ํ๋ผ๋ฏธํฐ๋ก ๋ฉ์๋์ ๋์ ์์ฒด๋ฅผ ์ ๋ฌํด์ฃผ๋ ๊ฒ์ ๋ฐฐ์ ๋ค. ์ด๋, ๋ฉ์๋์ ๋์์ ์ ๋ฌํ๊ธฐ ์ํด์ ๋ณ๋์ @Override ์ด๋ ธํ ์ด์ ์ด๋ ์์๋ ๋ฉ์๋ ์ด๋ฆ ๋ฑ, ๋์ ์ธ์ ๋ค๋ฅธ ์ฝ๋๋ค์ด ๋ฐ๋ณต๋์ด ์๋นํ ๋ถํธํ๋ค. ๋๋ค ํํ์์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์, ๋จ์ํ '๋์์ ๋ํ ์ฝ๋๋ง' ๋ฉ์๋๋ก ์ ๋ฌํ ์ ์๋๋ก ์ต๋ช ํจ์๋ฅผ ๋จ์ํํ ๊ฒ์ด๋ค. ๋๋ค ํํ์์ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋ค. ๐ฌ ๋ฉ์๋์ ์ด๋ฆ์ด ์์ผ๋๊น “์ต๋ช ”์ด๋ค. (๋ฉ์๋์ ๋ํ ๋ค์ด๋ฐ์ ๊ณ ๋ฏผํ ํ์๊ฐ ์๋ค!) - ์ด๋ฆ์ ์์ง๋ง, ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ์ ๋ฐ๋, ๋ฐํ ํ์, ๋ฐ์ ๊ฐ๋ฅํ ์์ธ ๋ฆฌ์คํธ๋ ๊ฐ์ง ์ ์๋ค. ๐ฌ ํจ์ : ํน์ ํด..
๐ฌ ๋ชจ๋ ์๋ฐ ์ธ ์ก์ ์ฑํฐ 2์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. โ๏ธ ๋์ ํ๋ผ๋ฏธํฐํ ์ฌ๋์ ๋ง์์ ์ ๋ง ๊ฐ๋ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ , ์๊ตฌ์ฌํญ์ ์๋น์์ ์ ์ฅ์์ ๋ ์๊ฐํ๊ฒ ๋๋ค. ์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ์ง๋ ํ๋ก๊ทธ๋๋จธ์ง๋ง, ๊ฐ๋ ๊ฐ์ ์๋น์์ ๋ง์์ ๋ง์กฑ์ํค๊ธฐ ์ํด ์ต๋ํ ์ ๋์ ์ผ๋ก ๋์ํ ํ์๊ฐ ์๋ค. ์ด๋ ๋ , ํฌ๋น๊ฐ ์ฐํ ์ฝ ๊ณต์ง์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ ์๊ตฌ์ฌํญ์ ๋์ ธ์ฃผ์๋ค๊ณ ๊ฐ์ ํ์. ๐ฌ ๋ฐฑ์๋ ํฌ๋ฃจ ์ค์ 25์ด ์ดํ์ธ ํฌ๋ฃจ๋ง ๋ณด๊ณ ์ถ์๋ฐ, ๋ชจ์ฌ ์ฃผ์ธ์. ๊ทธ๋ฌ์ ๋ค์ค๊ฐ ์์ ๋งํ๋ค. ๐ฌ ์๋์์, ํ๋ก ํธ์๋ ํฌ๋ฃจ ์ค์์ 23์ด ์ด์์ธ ํฌ๋ฃจ๋ง ์์ฃผ์ธ์. ์ด๋ป๊ฒ ํ๋ฉด ์ฐ๋ฆฌ๋ ๋ณํํ๋ ์๊ตฌ์ฌํญ ์์์ ์ ๋์ ์ผ๋ก ๋์ํ ์ ์์๊น? ๊ฐ์ฅ ๋จผ์ , ๊ทธ๋ฅ ์๊ตฌ์ฌํญ์ ๋ง๋๋ก ๊ฐ๋ฅํ ๋ชจ๋ ์์ฑ์ ๋ํด์ ์ ๋ถ ์๋ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. 1) ๋ฐฑ..