1) ์ต์
๋ (Optional) (1) ๊ฐ์ Optional is primarily intended for use as a method return type where there is a clear need to represent "no result" and where using null is likely to cause errors. A variable whose type is Optional should never itself be null. it should always point to an Optional instance. ์์ ๋ด์ฉ์ JDK 8 API Document์ ์ฃผ์์ผ๋ก ์ ํ์๋ ๋ถ๋ถ ์ค ์ผ๋ถ๋ฅผ ๋ฐ์ทํ ๊ฒ์ผ๋ก, ์์ญํ์๋ฉด Java Optional ํด๋์ค๋ Java 8์์ ์ถ๊ฐ๋ ํด๋์ค๋ก ..
๐ง Programming/Java
1) IntelliJ ์ธ์ฝ๋ฉ ์ค์ IntelliJ๋ก ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ๊ฐ๋ ๊ฐ๋ค ํ๊ธ์ด ๊นจ์ง๋ ๊ฒฝ์ฐ๋ฅผ ์ข
์ข
๋ณผ ์ ์๋๋ฐ, ์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด๊ธฐ์ ์ธ์ฝ๋ฉ ์ค์ ์ ๋จผ์ ์ ์ฉํ๊ณ ๊ฐ๋ฐํ๋๋ก ํ์! ๊ทธ๋ฐ๋ฐ, ๋๋ถ๋ถ UTF-8 ์ธ์ฝ๋ฉ์ ์ธํ
๋ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ชจ๋ UTF-8๋ก ์ค์ ํด์ ๋ฐฐํฌํ์ผ๋ฉด ์ข์์ํ
๋ฐ ๋ผ๋ ์๊ฐ์ด ๋ ๋ค. (1) IntelliJ VM Option ์ค์ IntelliJ๊ฐ ์ค์น๋ ๊ฒฝ๋ก๋ก ์ด๋ํ ๋ค์, bin ๋๋ ํ ๋ฆฌ ๋ด์ "idea64.exe.vmoptions" ํ์ผ์ ๋ฉ๋ชจ์ฅ์ผ๋ก ์คํํ๋ค. ์ฐธ๊ณ ๋ก .vmoptions ํ์ผ์ ๋ ๊ฐ๊ฐ ์กด์ฌํ ์๋ ์๋๋ฐ ๋ณธ์ธ์ด ์ฌ์ฉ์ค์ธ OS์ bit์ ๋ง๋ ํ์ผ์ ๋ฉ๋ชจ์ฅ์ผ๋ก ์ด์! ๊ทธ ๋ค์, ๋ฉ๋ชจ์ฅ ๋งจ ์๋์ "-Dfile.encoding=UTF-8" ๋ด์ฉ์ ์ถ..
1) ๋ณ์ฑ (Variance) - ๊ณต๋ณ์ฑ (Covariance), ๋ฐ๊ณต๋ณ์ฑ (Contravariance), ๋ฌด๊ณต๋ณ์ฑ (InVariance) ์ ๋ค๋ฆญ์ ์์ผ๋์นด๋๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ ์, ์์์ผ ํ ๊ฐ๋
์ด ์๋๋ฐ ๊ทธ๊ฒ์ ๋ฐ๋ก ๊ณต๋ณ์ฑ, ๋ฐ๊ณต๋ณ์ฑ, ๋ฌด๊ณต๋ณ์ฑ ํฉ์ณ์ ๋ณ์ฑ์ด๋ผ๋ ๊ฐ๋
์ด๋ค. ๋ณ์ฑ์ ํ์
์ ์์ ๊ณ์ธต ๊ด๊ณ์์ ์๋ก ๋ค๋ฅธ ํ์
๊ฐ์ ์ด๋ค ๊ด๊ณ๊ฐ ์๋์ง๋ฅผ ๋ํ๋ด๋ ์งํ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณต๋ณ์ฑ์ ํ์
์ ์์ ๊ณ์ธต ๊ด๊ณ์์ ์๋ก ๋ค๋ฅธ ํ์
๊ฐ์ ํจ๊ป ๋ณํ ์ ์๋ค๋ ํน์ง์ ๋งํ๋ฉฐ, ์ด๋ฅผ ๊ฐ์ฒด ์งํฅ ๊ฐ๋
์ผ๋ก ํํํ๋ฉด SOLID ์์น ์ค Liskov ์นํ ์์น์ ํด๋นํ๋ค. ์๋ฅผ ๋ค์ด, ๋ฐฐ์ด (Array)๊ณผ ๋ฆฌ์คํธ (List)๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด, Java์์์ ๊ฐ ๋ณ์ฑ์ ํน์ง์ ์๋์ ๊ฐ๋ค. (1) ๊ณต๋ณ์ฑ S๊ฐ T์ ํ์ ํ์
..
1) ์ ํ๋ ํ์
ํ๋ผ๋ฏธํฐ (Bounded Type Parameter) ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ํ์
ํ๋ผ๋ฏธํฐ๋ฅผ ๋์ฒดํ๋ ๊ตฌ์ฒด์ ์ธ ํ์
์ ์ ํํ ํ์๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด, ์ซ์๋ฅผ ์ฐ์ฐํ๋ ์ ๋ค๋ฆญ ๋ฉ์๋๋ ๋์ฒด ํ์
์ผ๋ก Number ๋๋ ์์ ํด๋์ค (Byte, Short, Integer, Long, Double)๋ก ์ ํํ ํ์๊ฐ ์๋ค. ์ด์ฒ๋ผ ๋ชจ๋ ํ์
์ผ๋ก ๋์ฒดํ ์ ์๊ณ , ํน์ ํ์
๊ณผ ์์ ๋๋ ๊ตฌํ ๊ด๊ณ์ ์๋ ํ์
๋ง ๋์ฒดํ ์ ์๋ ํ์
ํ๋ผ๋ฏธํฐ๋ฅผ ์ ํ๋ ํ์
ํ๋ผ๋ฏธํฐ (Bounded Type Parameter) ๋ผ๊ณ ํ๋ค. public ๋ฆฌํดํ์
๋ฉ์๋ (๋งค๊ฐ๋ณ์, ...) { } ์ ํ๋ ํ์
ํ๋ผ๋ฏธํฐ์ ์ ์๋ ์์ ๊ฐ์ด extends ํค์๋๋ฅผ ์ฌ์ฉํด์ ํ ์ ์์ผ๋ฉฐ, ์์ ํ์
์ ํด๋์ค ๋ฟ๋ง ์๋๋ผ ์ธํฐํ..
1) ์ ๋ค๋ฆญ ํด๋์ค์ ์ ๋ค๋ฆญ ๋ฉ์๋ ์ด๋ฒ์๋ ์ ๋ค๋ฆญ ํด๋์ค์ ์ ๋ค๋ฆญ ๋ฉ์๋์ ๋ํด ์์๋ณด์! (1) ์ ๋ค๋ฆญ ํด๋์ค public class ํด๋์ค๋ช
{ } public interface ์ธํฐํ์ด์ค๋ช
{ } ์ ๋ค๋ฆญ ํด๋์ค๋ ํ์
ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง๋ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํ๋ค. ์ ๋ค๋ฆญ ํด๋์ค๋ ์ ์ธ๋ถ์ “” ๊บฝ์ ๊ธฐํธ๊ฐ ๋ถ๊ณ ๊ทธ ์ฌ์ด์ ํ์
ํ๋ผ๋ฏธํฐ๋ค์ด ์์นํ๋ค! ํ์
ํ๋ผ๋ฏธํฐ๋ ๋ณ์๋ช
๊ณผ ๋์ผํ ๊ท์น์ ๋ฐ๋ผ ์์ฑํ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋๋ฌธ์ ์ํ๋ฒณ ํ๊ธ์๋ก ํํํ๋ค! ๋ํ, ์ธ๋ถ์์ ์ ๋ค๋ฆญ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋์ ํ์
ํ๋ผ๋ฏธํฐ์ ๊ตฌ์ฒด์ ์ธ ํ์
์ ์ง์ ํด์ผ ํ๋๋ฐ ๋ง์ฝ ์ง์ ํ์ง ์์ผ๋ฉด ์๋ฌต์ ์ผ๋ก Object ํ์
์ด ์ฌ์ฉ๋๋ค. ์ ๋ค๋ฆญ ํด๋์ค๋ ์ด์ ์ ๋ง์ด ๋ค๋ค๊ธฐ์ ์์ธํ ์ฝ๋๋ ์๋ตํ๋ค! (2) ์ ๋ค๋ฆญ ๋ฉ์๋ p..
1) ์ ๋ค๋ฆญ & ํ์
ํ๋ผ๋ฏธํฐ ์ด๋ฒ์๋ ์ ๋ค๋ฆญ์ ๋ํ ๋ช
ํํ ์ ์์ ํ์
ํ๋ผ๋ฏธํฐ์ ๋ํด ์์๋ณด๋๋ก ํ์! (1) ์ ๋ค๋ฆญ (Generics) class Box { public T content; ... public static void main(String[] args) { Box strBox = new Box(); Box intBox = new Box(); } } ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด Box ํด๋์ค๊ฐ ์๊ณ ๋ค์ํ ํ์
์ ๊ฐ์ฒด๋ฅผ ์ง์ํ๊ธฐ ์ํด Box ํด๋์ค ๋ฉค๋ฒ ๋ณ์์ธ content์ ํ์
์ ํน์ ํ์
์ผ๋ก ์ง์ ํ์ง ์๊ณ ํ์
ํ๋ผ๋ฏธํฐ์ธ T๋ก ์ค์ ํ์๋ค. ๊ทธ๋ฆฌ๊ณ main() ๋ฉ์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด String ๊ฐ์ฒด์ Intenger ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ๊ฐ์ Box ๊ฐ์ฒด๋ฅผ “ํ์
”์ ์ง์ ํ์ฌ ์์ฑํ์๋ค. ๋ฐ๋ผ์..
1) ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ ์ด์ (1) ์ ๋ค๋ฆญ์ด ์๋ ์์ ์ Java ์ฝ๋ ์ ๋ค๋ฆญ์ JDK 1.5 ๋ฒ์ ๋ถํฐ ๋ฑ์ฅํ๊ฒ ๋์๋๋ฐ ์ ๋ค๋ฆญ์ด ์กด์ฌํ์ง ์๋ ์์ ์ Java ์ฝ๋๋ฅผ ์ดํด๋ณด์! class FruitBox { public Object fruit; public Object getFruit() { return fruit; } public void setFruit(Object content) { this.fruit = fruit; } } class Apple { } class Banana { } ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด Apple, Banana ํด๋์ค์ Apple, Banana์ ๊ฐ์ ๊ณผ์ผ์ ๋ด๋ ํด๋์ค์ธ FruitBox๊ฐ ์ ์ธ๋์ด ์๋ค. FruitBox ํด๋์ค์ fruit ๋ฉค๋ฒ ๋ณ์๋ ๋ค์ํ ๊ณผ์ผ ํด๋์ค (Appl..
1) ์ด๋
ธํ
์ด์
(Annotation) (1) ์ด๋
ธํ
์ด์
์ด๋ ์ฝ๋์์ “@”์ผ๋ก ์์ฑ๋๋ ์์๋ฅผ ์ด๋
ธํ
์ด์
์ด๋ผ๊ณ ํ๋ฉฐ, ์ด๋
ธํ
์ด์
์ ํด๋์ค ๋๋ ์ธํฐํ์ด์ค๋ฅผ ์ปดํ์ผํ๊ฑฐ๋ ์คํํ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ๊ฒ์ธ์ง๋ฅผ ์๋ ค์ฃผ๋ ์ค์ ์ ๋ณด์ด๋ค. ์ด๋
ธํ
์ด์
์ ์ฃผ๋ก ์ธ ๊ฐ์ง ์ฉ๋๋ก ์ฌ์ฉ๋์ด์ง๋ค. โ ์ปดํ์ผ ์ ์ฌ์ฉํ๋ ์ ๋ณด ์ ๋ฌ โก ๋น๋ ํด์ด ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ ๋ ์ฌ์ฉํ๋ ์ ๋ณด ์ ๋ฌ โข ์คํ ์ ํน์ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ ์ ๋ณด ์ ๋ฌ ์ปดํ์ผ ์, ์ฌ์ฉ๋๋ ์ ๋ณด ์ ๋ฌ์ ๋ํ์ ์ธ ์๋ @Override ์ด๋
ธํ
์ด์
์ด๋ค. @Override๋ ์ปดํ์ผ๋ฌ๊ฐ ๋ฉ์๋ ์ฌ์ ์ ๊ฒ์ฌ๋ฅผ ํ๋๋ก ์ค์ ํ๋ฉฐ ์ ํํ ์ฌ์ ์๋์ง ์์๋ค๋ฉด ์ปดํ์ผ๋ฌ๋ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค. ์ด๋
ธํ
์ด์
์ ์๋ฐ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ๋ ํ์์ ์ธ ์์๋ก ํนํ, ์น ๊ฐ๋ฐ์..