์ด ๊ธ์ ๋๊ตฌ๋ฅผ ์ํ ๊ธ์ธ๊ฐ์?
์๋ฅผ ๋ค์ด Oracle ํํ ๋ฆฌ์ผ ์์ ์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค . ์ด๊ฒ์ "ํ๊ฒ ํ์ดํ" ์ด๋ผ๊ณ ํฉ๋๋ค . ๋ณ์์ ์ด๋ฆ์ ์ง์ ํ ์ ์์ง๋ง ๋ฐ๋์ ์ธํฐํ์ด์ค์ ์ง์ ๋ ์ด๋ฆ์ผ ํ์๋ ์์ต๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ์์ผ๋ฉด ๊ดํธ๋ง ์ฌ์ฉํฉ๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ํ๋๋ง ์๋ ๊ฒฝ์ฐ ๊ดํธ ์์ด ๋ณ์ ์ด๋ฆ๋ง ์
๋ ฅํฉ๋๋ค. ์ด์ ๋๋ค ํํ์ ์์ฒด์ ๋ณธ๋ฌธ์ ๋ํด ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฆฌํ์ต๋๋ค. ์ค๊ดํธ ์์ ์ผ๋ฐ ๋ฉ์๋์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ์ ์ฒด ์ฝ๋๊ฐ ํ ์ค๋ก๋ง ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ (ifs ๋ฐ ๋ฃจํ์ ๋ง์ฐฌ๊ฐ์ง๋ก) ์ค๊ดํธ๋ฅผ ์ ํ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค. ๋๋ค๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐํํ์ง๋ง ๋ณธ๋ฌธ์ด ํ ์ค๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด
- ์ด๋ฏธ Java Core๋ฅผ ์ ์๊ณ ์๋ค๊ณ ์๊ฐํ์ง๋ง Java์ ๋๋ค ํํ์์ ๋ํด์๋ ์ ํ ๋ชจ๋ฅด๋ ์ฌ๋๋ค์ ์ํ ๊ฒ์ ๋๋ค. ์๋๋ฉด ์ด๋ฏธ ๋๋ค์ ๋ํด ๋ค์ด๋ดค์ง๋ง ์์ธํ ๋ด์ฉ์ ์์ ์๋ ์์ต๋๋ค.
- ๋๋ค ํํ์์ ์ด๋ ์ ๋ ์ดํดํ๊ณ ์์ง๋ง ์ฌ์ ํ ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋๋ ต๊ณ ์ต์ํ์ง ์์ ์ฌ๋๋ค์ ์ํ ๊ฒ์ ๋๋ค.
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(์ดํ OOP)์ ๋ํ ์ดํด, ์ฆ:
- ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๋ฌด์์ธ์ง, ์ด๋ค ์ฌ์ด์ ์ฐจ์ด์ ์ด ๋ฌด์์ธ์ง์ ๋ํ ์ง์
- ์ธํฐํ์ด์ค๊ฐ ๋ฌด์์ธ์ง, ํด๋์ค์ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง, ์ธํฐํ์ด์ค(์ธํฐํ์ด์ค์ ํด๋์ค) ์ฌ์ด์ ์ฐ๊ฒฐ์ ๋ฌด์์ธ์ง์ ๋ํ ์ง์
- ๋ฉ์๋๊ฐ ๋ฌด์์ธ์ง, ์ด๋ป๊ฒ ํธ์ถํ๋์ง, ์ถ์ ๋ฉ์๋(๋๋ ๊ตฌํ์ด ์๋ ๋ฉ์๋)๊ฐ ๋ฌด์์ธ์ง, ๋ฉ์๋์ ๋งค๊ฐ๋ณ์/์ธ์๊ฐ ๋ฌด์์ธ์ง, ๊ฑฐ๊ธฐ์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์
- ์ก์ธ์ค ์์ ์, ์ ์ ๋ฉ์๋/๋ณ์, ์ต์ข ๋ฉ์๋/๋ณ์;
- ์์(ํด๋์ค, ์ธํฐํ์ด์ค, ์ธํฐํ์ด์ค์ ๋ค์ค ์์).
- Java Core์ ๋ํ ์ง์: ์ ๋ค๋ฆญ, ์ปฌ๋ ์ (๋ชฉ๋ก), ์ค๋ ๋.
์ฝ๊ฐ์ ์ญ์ฌ
๋๋ค ํํ์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์ํ์์ Java๋ก ์์ต๋๋ค. 20 ์ธ๊ธฐ ์ค๋ฐ ๋ฏธ๊ตญ์ ํน์ Alonzo Church๋ ์ํ๊ณผ ๋ชจ๋ ์ข ๋ฅ์ ์ถ์ํ๋ฅผ ๋งค์ฐ ์ข์ํ๋ Princeton University์์ ์ผํ์ต๋๋ค. ๋๋ค ๋ฏธ์ ๋ถํ์ ์๊ฐํด๋ธ ์ฌ๋์ ์๋ก ์กฐ ์ฒ์น(Alonzo Church)์์ต๋๋ค. ๋๋ค ๋ฏธ์ ๋ถํ์ ์ฒ์์๋ ํ๋ก๊ทธ๋๋ฐ๊ณผ๋ ์๋ฌด๋ฐ ๊ด๋ จ์ด ์๋ ์ถ์์ ์ธ ์์ด๋์ด ์งํฉ์ด์์ต๋๋ค. ๋์์ ์จ๋ฐ ํ๋ง(Alan Turing)๊ณผ ์กด ํฐ ๋ ธ์ด๋ง(John von Neumann)๊ณผ ๊ฐ์ ์ํ์๋ค๋ ๊ฐ์ ํ๋ฆฐ์คํด ๋ํ๊ต์์ ๊ทผ๋ฌดํ์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ํ๋๋ก ํฉ์ณ์ก์ต๋๋ค. Church๋ ๋๋ค ๋ฏธ์ ๋ถํ ์์คํ ์ ์๊ฐํด ๋๊ณ Turing์ ํ์ฌ "Turing machine"์ผ๋ก ์๋ ค์ง ์ถ์ ์ปดํจํ ๊ธฐ๊ณ๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. ํฐ ๋ ธ์ด๋ง์ ํ๋ ์ปดํจํฐ์ ๊ธฐ์ด๋ฅผ ํ์ฑํ ์ปดํจํฐ ์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ์ ์ ์ํ์ต๋๋ค(ํ์ฌ๋ "ํฐ ๋ ธ์ด๋ง ์ํคํ ์ฒ"๋ผ๊ณ ํจ). ๋น์ Alonzo Church์ ์์ด๋์ด๋ ๋๋ฃ์ ์์ ๋งํผ ๋ช ์ฑ์ ์ป์ง ๋ชปํ์ต๋๋ค ( "์์"์ํ ๋ถ์ผ ์ ์ธ). ๊ทธ๋ฌ๋ ์กฐ๊ธ ํ์ ํน์ John McCarthy (๋ํ ์ด์ผ๊ธฐ โโ๋น์ ํ๋ฆฐ์คํด ๋ํ์ ์กธ์ ํ์ผ๋ฉฐ ๋งค์ฌ์ถ์ธ์ธ ๊ณต๊ณผ ๋ํ์ ์ง์)๊ฐ Church์ ์์ด๋์ด์ ๊ด์ฌ์ ๊ฐ๊ฒ๋์์ต๋๋ค. ์ด๋ฅผ ๋ฐํ์ผ๋ก 1958๋ ์ ๊ทธ๋ ์ต์ด์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ Lisp๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ 58๋ ํ, ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ด๋์ด๊ฐ 8๋ฒ์งธ๋ก ์๋ฐ์ ์ ์ถ๋์์ต๋๋ค. 70๋ ๋ ์ฑ ์ง๋์ง ์์์ต๋๋ค... ์ฌ์ค ์ํ์ ์์ด๋์ด๋ฅผ ์ค์ ๋ก ์ ์ฉํ๋ ๋ฐ์๋ ์ด๊ฒ์ด ๊ฐ์ฅ ๊ธด ์๊ฐ์ด ์๋๋๋ค.๋ณธ์ง
๋๋ค ํํ์์ ๊ทธ๋ฌํ ํจ์์ ๋๋ค. ์ด๊ฒ์ Java์ ์ผ๋ฐ ๋ฉ์๋๋ก ์๊ฐํ ์ ์์ง๋ง ์ ์ผํ ์ฐจ์ด์ ์ ๋ค๋ฅธ ๋ฉ์๋์ ์ธ์๋ก ์ ๋ฌ๋ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ค, ์ซ์, ๋ฌธ์์ด, ๊ณ ์์ด๋ฅผ ๋ฉ์๋์ ์ ๋ฌํ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ฉ์๋์๋ ์ ๋ฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค! ์ธ์ ์ด๊ฒ์ด ํ์ํ ์ ์์ต๋๊น? ์๋ฅผ ๋ค์ด ์ฝ๋ฐฑ์ ์ ๋ฌํ๋ ค๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ ๋ฌํ๋ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์์ผ๋ ค๋ฉด ํธ์ถํ๋ ๋ฉ์๋๊ฐ ํ์ํฉ๋๋ค. ์ฆ, ์ด๋ค ๊ฒฝ์ฐ์๋ ํ๋์ ์ฝ๋ฐฑ์ ์ ์กํ๊ณ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ ์ฝ๋ฐฑ์ ์ ์กํ ์ ์๋ ๊ธฐํ๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋ฐฑ์ ๋ฐ์๋ค์ด๋ ๋ฉ์๋๊ฐ ์ด๋ฅผ ํธ์ถํฉ๋๋ค. ๊ฐ๋จํ ์๋ ์ ๋ ฌ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊น๋ค๋ก์ด ์ ๋ ฌ์ ์์ฑํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.public void mySuperSort() {
// ... do something here
if(compare(obj1, obj2) > 0)
// ... and here we do something
}
์ฌ๊ธฐ์ if
์ฐ๋ฆฌ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ compare()
๋น๊ตํ๋ ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๊ณ ์ด ๊ฐ์ฒด ์ค ์ด๋ ๊ฒ์ด "๋ ํฐ์ง" ์์๋ด๋ ค๊ณ ํฉ๋๋ค. "๋ ์์" ๊ฒ ์์ "๋ ๋ง์" ๊ฒ์ ๋์ ๊ฒ์
๋๋ค. ์ค๋ฆ์ฐจ์๋ฟ๋ง ์๋๋ผ ๋ด๋ฆผ์ฐจ์์ผ๋ก๋ ์ ๋ ฌํ ์ ์๋ ๋ณดํธ์ ์ธ ๋ฐฉ๋ฒ์ ์์ฑํ๊ณ ์๊ธฐ ๋๋ฌธ์ "more"๋ฅผ ๋ฐ์ดํ๋ก ๋ฌถ์์ต๋๋ค. (์ด ๊ฒฝ์ฐ "more"๋ ๋ณธ์ง์ ์ผ๋ก ๋ ์์ ๊ฐ์ฒด๊ฐ ๋๊ณ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.) . ์ ํํ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ๋ํ ๊ท์น์ ์ค์ ํ๋ ค๋ฉด ์ด๋ป๊ฒ๋ ์ด๋ฅผ mySuperSort()
. ์ด ๊ฒฝ์ฐ, ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ๋์ ์ด๋ป๊ฒ๋ ๋ฉ์๋๋ฅผ "์ ์ด"ํ ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ค๋ฆ์ฐจ์๊ณผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ mySuperSortAsc()
๋ ๊ฐ์ง ๋ณ๋์ ๋ฐฉ๋ฒ์ ์์ฑํ ์ ์์ต๋๋ค. mySuperSortDesc()
๋๋ ๋ฉ์๋ ๋ด๋ถ์ ์ผ๋ถ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํฉ๋๋ค(์: boolean
if true
, ์ค๋ฆ์ฐจ์ ์ ๋ ฌ, if false
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ). ํ์ง๋ง ๊ฐ๋จํ ๊ตฌ์กฐ๊ฐ ์๋๋ผ ์๋ฅผ ๋ค์ด ๋ฌธ์์ด ๋ฐฐ์ด ๋ชฉ๋ก์ ์ ๋ ฌํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์ฐ๋ฆฌ ๋ฉ์๋๋ mySuperSort()
์ด๋ฌํ ๋ฌธ์์ด ๋ฐฐ์ด์ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น? ์ฌ์ด์ฆ์ ๋ง์ถฐ? ์ด ๋จ์ด ๊ธธ์ด๋ก? ์๋ง๋ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ํ์ ๋ฐ๋ผ ์ํ๋ฒณ์์ผ๋ก ๋ ๊น์? ๊ทธ๋ฌ๋ ์ด๋ค ๊ฒฝ์ฐ์๋ ๋ฐฐ์ด์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ฐฐ์ด ๋ชฉ๋ก์ ์ ๋ ฌํด์ผ ํ๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋ฐฐ์ด์ ์๋ ๋จ์ด์ ์ ์ฒด ๊ธธ์ด์ ๋ฐ๋ผ ์ ๋ ฌํด์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋น๊ต๊ธฐ์ ๋ํด ์ด๋ฏธ ๋ค์ด๋ณด์
จ์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌํ ๊ฒฝ์ฐ์๋ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ๋น๊ต๊ธฐ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด ์ ๋ ฌ ๊ท์น์ ์ค๋ช
ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ํ์ค ๋ฐฉ๋ฒ์ ๊ณผ sort()
๋์ผํ ์๋ฆฌ๋ก ๊ตฌํ๋๋ฏ๋ก mySuperSort()
์์ ์์๋ ํ์ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค sort()
.
String[] array1 = {"Mother", "soap", "frame"};
String[] array2 = {"I", "Very", "I love", "java"};
String[] array3 = {"world", "work", "May"};
List<String[]> arrays = new ArrayList<>();
arrays.add(array1);
arrays.add(array2);
arrays.add(array3);
Comparator<String[]> sortByLength = new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1.length - o2.length;
}
};
Comparator<String[]> sortByWordsLength = new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
int length1 = 0;
int length2 = 0;
for (String s : o1) {
length1 += s.length();
}
for (String s : o2) {
length2 += s.length();
}
return length1 - length2;
}
};
arrays.sort(sortByLength);
๊ฒฐ๊ณผ:
- ์๋ง๊ฐ ์ก์๋ฅผ ์ป์ด์
- ํํ ๋ ธ๋์
- ๋๋ ์๋ฐ๋ฅผ ์ ๋ง ์ข์ํ๋ค.
sort()
๋ฉ์๋์ ๋ค๋ฅธ ๋น๊ต๊ธฐ๋ฅผ ์ ๋ฌ ํ๋ฉด (sortByWordsLength)
๊ฒฐ๊ณผ ๋ ๋ฌ๋ผ์ง๋๋ค.
- ํํ ๋ ธ๋์
- ์๋ง๊ฐ ์ก์๋ฅผ ์ป์ด์
- ๋๋ ์๋ฐ๋ฅผ ์ ๋ง ์ข์ํ๋ค.
sort()
. ๊ทธ๋ ๊ฒ:
String[] array1 = {"Mother", "soap", "frame"};
String[] array2 = {"I", "Very", "I love", "java"};
String[] array3 = {"world", "work", "May"};
List<String[]> arrays = new ArrayList<>();
arrays.add(array1);
arrays.add(array2);
arrays.add(array3);
arrays.sort(new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1.length - o2.length;
}
});
๊ฒฐ๊ณผ๋ ์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ์ ๋์ผํฉ๋๋ค. ์์
1 . ๋ฐฐ์ด์ ๋จ์ด ์์ ๋ฐ๋ผ ์ค๋ฆ์ฐจ์์ด ์๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฐฐ์ด์ ์ ๋ ฌํ๋๋ก ์ด ์์ ๋ฅผ ๋ค์ ์์ฑํ์ธ์. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด ๋ชจ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ์ฒด๋ฅผ ๋ฉ์๋์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ผ๋ฉฐ, ํ์ฌ ํ์ํ ๊ฒ์ ๋ฐ๋ผ ์ด ๊ฐ์ฒด ๋๋ ์ ๊ฐ์ฒด๋ฅผ ๋ฉ์๋์ ์ ๋ฌํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ฌํ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ๋ฉ์๋ ๋ด๋ถ์์ ๊ตฌํ์ ์์ฑํ ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค. . ์ง๋ฌธ์ด ์๊น๋๋ค. ๋๋ค ํํ์ด ๊ทธ๊ฒ๊ณผ ์ด๋ค ๊ด๋ จ์ด ์์ต๋๊น? ๋๋ค๋ ์ ํํ ํ๋์ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ฉ์๋ ๊ฐ์ฒด์ ๊ฐ์ต๋๋ค. ๊ฐ์ฒด์ ๋ํ๋ ๋ฉ์๋์
๋๋ค. ์ฝ๊ฐ ํน์ดํ ๊ตฌ๋ฌธ์ ๊ฐ์ง๊ณ ์์ต๋๋ค(๊ทธ๋ฌ๋ ์ด์ ๋ํด์๋ ๋์ค์ ์์ธํ ์ค๋ช
ํฉ๋๋ค). ์ด ํญ๋ชฉ์ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
arrays.sort(new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1.length - o2.length;
}
});
์ฌ๊ธฐ์๋ ๋ชฉ๋ก์ ๊ฐ์ ธ์ arrays
ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค sort()
. ์ฌ๊ธฐ์๋ ํ๋์ ๋จ์ผ ๋ฉ์๋๊ฐ ์๋ ๋น๊ต๊ธฐ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํฉ๋๋ค compare()
(์ด ๊ฐ์ฒด์ ์ ์ผํ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฆ์ด ๋ฌด์์ธ์ง๋ ์ค์ํ์ง ์์ต๋๋ค. ๋์น์ง ์์ ๊ฒ์
๋๋ค). ์ด ๋ฉ์๋๋ ๋ค์์ ์์
ํ ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. IntelliJ IDEA ์์ ์์
ํ๋ ๊ฒฝ์ฐ ์ด ์ฝ๋๋ฅผ ํตํด ํฌ๊ฒ ๋จ์ถ๋๋ ๋ฐฉ๋ฒ์ ๋ณธ ์ ์ด ์์ ๊ฒ์
๋๋ค.
arrays.sort((o1, o2) -> o1.length - o2.length);
์ด๋ ๊ฒ ์ฌ์ฏ ์ค์ด ํ๋์ ์งง์ ์ค๋ก ๋ฐ๋์์ต๋๋ค. 6์ค์ ์งง๊ฒ 1์ค๋ก ๋ค์ ์์ฑํ์ต๋๋ค. ๋ญ๊ฐ๊ฐ ์ฌ๋ผ์ก์ง๋ง ์ค์ํ ๊ฒ์ ์๋ฌด๊ฒ๋ ์ฌ๋ผ์ง์ง ์์์์ ๋ณด์ฅํ๋ฉฐ ์ด ์ฝ๋๋ ์ต๋ช
ํด๋์ค์ ์ ํํ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. ์์
2 . ๋๋ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ 1์ ๋ํ ์๋ฃจ์
์ ๋ค์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์. ์ตํ์ ์๋จ์ผ๋ก IntelliJ IDEA ์ ์ต๋ช
ํด๋์ค๋ฅผ ๋๋ค๋ก ์ ํํ๋๋ก ์์ฒญํ์ธ์.
์ธํฐํ์ด์ค์ ๋ํด ์ด์ผ๊ธฐํด๋ณด์
๊ธฐ๋ณธ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ ์ถ์ ๋ฉ์๋ ๋ชฉ๋ก์ผ ๋ฟ์ ๋๋ค. ํด๋์ค๋ฅผ ์์ฑํ๊ณ ๊ทธ๊ฒ์ด ์ผ์ข ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ผ๊ณ ๋งํ ๋, ์ธํฐํ์ด์ค์ ๋์ด๋ ๋ฉ์๋์ ๊ตฌํ์ ํด๋์ค์ ์์ฑํด์ผ ํฉ๋๋ค(๋๋ ์ตํ์ ์๋จ์ผ๋ก ์์ฑํ์ง ์๊ณ ํด๋์ค๋ฅผ ์ถ์ํํด์ผ ํฉ๋๋ค). ). ๋ค์ํ ๋ฉ์๋(์:List
๋์ผํ Comparator ๋๋ Runnable)๊ฐ ์๋ ์ธํฐํ์ด์ค๊ฐ ์๊ณ , ๋ฉ์๋๊ฐ ํ๋๋ง ์๋ ์ธํฐํ์ด์ค๊ฐ ์์ต๋๋ค. ๋จ์ผ ๋ฉ์๋๊ฐ ์ ํ ์๋ ์ธํฐํ์ด์ค(์์ ๋ง์ปค ์ธํฐํ์ด์ค, ์๋ฅผ ๋ค์ด ์ง๋ ฌํ ๊ฐ๋ฅ)๊ฐ ์์ต๋๋ค. ๋ฉ์๋๊ฐ ํ๋๋ง ์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค ๋ผ๊ณ ๋ ํฉ๋๋ค . Java 8์์๋ ํน๋ณํ @FunctionalInterface ์ฃผ์ ์ผ๋ก ํ์๋ฉ๋๋ค . ๋๋ค ์์ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ ๋จ์ผ ๋ฉ์๋์์ ์ธํฐํ์ด์ค์
๋๋ค. ์์์ ๋งํ๋ฏ์ด ๋๋ค ํํ์์ ๊ฐ์ฒด์ ๋ํ๋ ๋ฉ์๋์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฌํ ๊ฐ์ฒด๋ฅผ ์ด๋๊ฐ์ ์ ๋ฌํ ๋ ์ค์ ๋ก๋ ์ด ๋จ์ผ ๋ฉ์๋๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ด ๋ฉ์๋๋ฅผ ๋ฌด์์ด๋ผ๊ณ ๋ถ๋ฅด๋์ง๋ ์ฐ๋ฆฌ์๊ฒ ์ค์ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ์๊ฒ ์ค์ํ ๊ฒ์ ์ด ๋ฉ์๋๊ฐ ์ฌ์ฉํ๋ ๋งค๊ฐ ๋ณ์์ ์ค์ ๋ก ๋ฉ์๋ ์ฝ๋ ์์ฒด์
๋๋ค. ๋๋ค ํํ์์ ๋ณธ์ง์ ์ผ๋ก ๊ทธ๋ ์ต๋๋ค. ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค ๊ตฌํ. ํ๋์ ๋ฉ์๋๊ฐ ์๋ ์ธํฐํ์ด์ค๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ต๋ช
ํด๋์ค๋ฅผ ๋ค์ ์์ฑํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ธํฐํ์ด์ค์ ํ๋ ์ด์์ ๋ฉ์๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋๋ค ์์ด ์ ํฉํ์ง ์์ผ๋ฉฐ ์ต๋ช
ํด๋์ค ๋๋ ์ผ๋ฐ ํด๋์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด์ ๋๋ค๋ฅผ ์์ธํ ์์๋ณผ ์๊ฐ์
๋๋ค. :)
ํต์ฌ๋ก
์ผ๋ฐ์ ์ธ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.(ะฟะฐัะฐะผะตััั) -> {ัะตะปะพ ะผะตัะพะดะฐ}
์ฆ, ๊ดํธ ์์๋ ๋ฉ์๋ ๋งค๊ฐ๋ณ์์ธ "ํ์ดํ"(์ฐ์๋ ๋ ๋ฌธ์: ๋นผ๊ธฐ ๋ฐ ํผ)๊ฐ ์์ผ๋ฉฐ, ๊ทธ ๋ค์ ๋ฉ์๋์ ๋ณธ๋ฌธ์ ํญ์ ๊ทธ๋ ๋ฏ์ด ์ค๊ดํธ ์์ ์์ต๋๋ค. ๋งค๊ฐ๋ณ์๋ ๋ฉ์๋๋ฅผ ์ค๋ช
ํ ๋ ์ธํฐํ์ด์ค์ ์ง์ ๋ ๋งค๊ฐ๋ณ์์ ํด๋นํฉ๋๋ค. ๋ณ์์ ์ ํ์ด ์ปดํ์ผ๋ฌ์ ์ํด ๋ช
ํํ๊ฒ ์ ์๋ ์ ์๋ ๊ฒฝ์ฐ(์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๋ฌธ์์ด ๋ฐฐ์ด๋ก ์ ํํ๊ฒ ์ ํ์ด ์ง์ ๋๋ฏ๋ก ๋ฌธ์์ด ๋ฐฐ์ด๋ก ์์
ํ๊ณ ์๋ค๋ ๊ฒ์ด ํ์คํฉ๋๋ค List
) ๋ณ์์ ์ ํ์ String[]
ํ์ํ์ง ์์ต๋๋ค. ์ฐ์ฌ์ง๋ค.
ํ์คํ์ง ์์ ๊ฒฝ์ฐ ์ ํ์ ์ง์ ํ๋ฉด IDEA๋ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ํด๋น ์ ํ์ ํ์์ผ๋ก ๊ฐ์กฐ ํ์ํฉ๋๋ค. |
return
์์ฑํ ํ์๊ฐ ์ ํ ์์ต๋๋ค. ํ์ง๋ง ์ค๊ดํธ๊ฐ ์๋ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ช
์์ ์ผ๋ก return
.
์
์์ 1.() -> {}
๊ฐ์ฅ ๊ฐ๋จํ ์ต์
์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์๋ฏธ ์๋ ๊ฒ์
๋๋ค. :) ์๋ฌด๊ฒ๋ ํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์์ 2.
() -> ""
๋ํ ํฅ๋ฏธ๋ก์ด ์ต์
์
๋๋ค. ์๋ฌด๊ฒ๋ ๋ฐ์๋ค์ด์ง ์๊ณ ๋น ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค( return
๋ถํ์ํ๋ฏ๋ก ์๋ต๋จ). ๋์ผํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ต๋๋ค return
.
() -> {
return "";
}
์ 3. ๋๋ค๋ฅผ ์ฌ์ฉํ Hello World
() -> System.out.println("Hello world!")
์๋ฌด๊ฒ๋ ๋ฐ์ง ์๊ณ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค( ๋ฉ์๋์ ๋ฐํ ์ ํ์ด ๋จ์ํ ํ๋ฉด์ ๋น๋ฌธ์ ํ์ํ๊ธฐ ๋๋ฌธ์ return
ํธ์ถ ์์ ๋ฃ์ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค ๊ตฌํ์ ์ด์์ ์
๋๋ค . ๋์ผํ ์๊ฐ ๋ ์์ ํฉ๋๋ค. System.out.println()
println() โ void)
Runnable
public class Main {
public static void main(String[] args) {
new Thread(() -> System.out.println("Hello world!")).start();
}
}
๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
public class Main {
public static void main(String[] args) {
Thread t = new Thread(() -> System.out.println("Hello world!"));
t.start();
}
}
๋๋ ๋๋ค ํํ์์ ์ ํ์ ๊ฐ์ฒด๋ก ์ ์ฅํ Runnable
๋ค์ ์์ฑ์์ ์ ๋ฌํ ์๋ ์์ต๋๋ค threadโะฐ
.
public class Main {
public static void main(String[] args) {
Runnable runnable = () -> System.out.println("Hello world!");
Thread t = new Thread(runnable);
t.start();
}
}
๋๋ค ํํ์์ ๋ณ์์ ์ ์ฅํ๋ ์๊ฐ์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ธํฐํ์ด์ค๋ Runnable
๊ฐ์ฒด์ ๋ฉ์๋๊ฐ ์์ด์ผ ํ๋ค๊ณ ์๋ ค์ค๋๋ค public void run()
. ์ธํฐํ์ด์ค์ ๋ฐ๋ฅด๋ฉด run ๋ฉ์๋๋ ์ด๋ค ๊ฒ๋ ๋งค๊ฐ๋ณ์๋ก ํ์ฉํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค (void)
. ๋ฐ๋ผ์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์์ฑํ๋ฉด ์๋ฌด๊ฒ๋ ๋ฐ์๋ค์ด๊ฑฐ๋ ๋ฐํํ์ง ์๋ ์ผ๋ถ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค. run()
์ด๋ ์ธํฐํ์ด์ค์ ๋ฉ์๋์ ๋งค์ฐ ์ผ์นํฉ๋๋ค Runnable
. ์ด๊ฒ์ด ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ์ด ๋๋ค ํํ์์ ์ ๊ฐ์ ๋ณ์์ ๋ฃ์ ์ ์์๋ ์ด์ ์
๋๋ค Runnable
. ์ค์์ 4
() -> 42
๋ค์ ๋งํ์ง๋ง, ์๋ฌด๊ฒ๋ ํ์ฉํ์ง ์๊ณ ์ซ์ 42๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ์ธํฐํ์ด์ค๋ Callable
๋ค์๊ณผ ๊ฐ์ ํ๋์ ๋ฉ์๋๋ง ์ ์ํ๋ฏ๋ก ์ด ๋๋ค ์์ ์ ํ์ ๋ณ์์ ๋ฐฐ์น๋ ์ ์์ต๋๋ค.
V call(),
๋ฐํ ๊ฐ์ ์ ํ์ ์ด๋์ V
์์ต๋๊น(์ด ๊ฒฝ์ฐ int
). ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ๋๋ค ํํ์์ ์ ์ฅํ ์ ์์ต๋๋ค.
Callable<Integer> c = () -> 42;
์ 5. ์ฌ๋ฌ ์ค์ ๋๋ค
() -> {
String[] helloWorld = {"Hello", "world!"};
System.out.println(helloWorld[0]);
System.out.println(helloWorld[1]);
}
๋ค์ ๋งํ์ง๋ง, ์ด๋ ๋งค๊ฐ๋ณ์์ ๋ฐํ ์ ํ์ด ์๋ ๋๋ค ํํ์์
๋๋ค void
( ๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค return
). ์ค์์ 6
x -> x
์ฌ๊ธฐ์๋ ๋ณ์์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ฐ์ ธ ั
์์ ๋ฐํํฉ๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ํ๋๋ง ํ์ฉ๋๋ ๊ฒฝ์ฐ ๋งค๊ฐ๋ณ์ ์ฃผ์์ ๊ดํธ๋ฅผ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค. ๋์ผํ์ง๋ง ๋๊ดํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
(x) -> x
๋ค์์ ๋ช
์์ ์ธ ์ต์
์ด ์๋ ์ต์
์
๋๋ค return
.
x -> {
return x;
}
๋๋ ๋ค์๊ณผ ๊ฐ์ด ๊ดํธ์ ๋ค์์ ์ฌ์ฉํฉ๋๋ค return
.
(x) -> {
return x;
}
๋๋ ์ ํ์ ๋ช
์์ ์ผ๋ก ํ์ํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์ํํฉ๋๋ค.
(int x) -> x
์ค์์ 7
x -> ++x
์ฐ๋ฆฌ๋ ์ด๋ฅผ ์๋ฝ ั
ํ๊ณ ๋ฐํํ์ง๋ง ๊ทธ 1
์ด์์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ค์ ์์ฑํ ์๋ ์์ต๋๋ค.
x -> x + 1
๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋งค๊ฐ๋ณ์, ๋ฉ์๋ ๋ณธ๋ฌธ ๋ฐ ๋จ์ด ์ฃผ์์ ๊ดํธ๋ฅผ ํ์ํ์ง ์์ต๋๋ค return
. ์ด๋ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋๊ดํธ์ return์ด ํฌํจ๋ ์ต์
์ ์์ 6์ ์ค๋ช
๋์ด ์์ต๋๋ค. ์์ 8
(x, y) -> x % y
์ฐ๋ฆฌ๋ ์ผ๋ถ๋ฅผ ๋ฐ์๋ค์ด๊ณ ั
, ั
๋๋์
์ ๋๋จธ์ง ๋ถ๋ถ์ x
๋ก ๋ฐํํฉ๋๋ค y
. ์ฌ๊ธฐ์๋ ๋งค๊ฐ๋ณ์ ์ฃผ์์ ๊ดํธ๊ฐ ์ด๋ฏธ ํ์ํฉ๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ํ๋๋ง ์๋ ๊ฒฝ์ฐ์๋ง ์ ํ์ฌํญ์
๋๋ค. ์ ํ์ ๋ช
์์ ์ผ๋ก ํ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(double x, int y) -> x % y
์ค์์ 9
(Cat cat, String name, int age) -> {
cat.setName(name);
cat.setAge(age);
}
์ด๋ฆ๊ณผ ์ ์ ๋์ด๊ฐ ํฌํจ๋ ๋ฌธ์์ด์ธ Cat ๊ฐ์ฒด๋ฅผ ํ์ฉํฉ๋๋ค. ๋ฉ์๋ ์์ฒด์์๋ ์ ๋ฌ๋ ์ด๋ฆ๊ณผ ๋์ด๋ฅผ Cat์ ์ค์ ํฉ๋๋ค. ๋ณ์๋ cat
์ฐธ์กฐ ์ ํ์ด๋ฏ๋ก ๋๋ค ์ ์ธ๋ถ์ Cat ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค(๋ด๋ถ๋ก ์ ๋ฌ๋ ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค). ์ ์ฌํ ๋๋ค๋ฅผ ์ฌ์ฉํ๋ ์ฝ๊ฐ ๋ ๋ณต์กํ ๋ฒ์ :
public class Main {
public static void main(String[] args) {
// create a cat and print to the screen to make sure it's "blank"
Cat myCat = new Cat();
System.out.println(myCat);
// create lambda
Settable<Cat> s = (obj, name, age) -> {
obj.setName(name);
obj.setAge(age);
};
// call the method, to which we pass the cat and the lambda
changeEntity(myCat, s);
// display on the screen and see that the state of the cat has changed (has a name and age)
System.out.println(myCat);
}
private static <T extends WithNameAndAge> void changeEntity(T entity, Settable<T> s) {
s.set(entity, "Murzik", 3);
}
}
interface WithNameAndAge {
void setName(String name);
void setAge(int age);
}
interface Settable<C extends WithNameAndAge> {
void set(C entity, String name, int age);
}
class Cat implements WithNameAndAge {
private String name;
private int age;
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
๊ฒฐ๊ณผ: Cat{name='null', age=0} Cat{name='Murzik', age=3} ๋ณด์๋ค์ํผ ์ฒ์์๋ Cat ๊ฐ์ฒด์ ์ํ๊ฐ ํ๋์์ง๋ง ๋๋ค ์์ ์ฌ์ฉํ ํ์๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. . ๋๋ค ํํ์์ ์ ๋ค๋ฆญ๊ณผ ์ ์๋ํฉ๋๋ค. Dog
์๋ฅผ ๋ค์ด ์ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ WithNameAndAge
๋ฉ์๋์์ main()
๋๋ค ์ ์์ฒด๋ฅผ ์ ํ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ Dog๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ์์
์ ์ํํ ์ ์์ต๋๋ค. ์์
3 . ์ซ์๋ฅผ ๋ฐ์์ ๋ถ์ธ ๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ์ธ์. true
์ ๋ฌ๋ ์ซ์๊ฐ ๋๋จธ์ง ์์ด 13์ผ๋ก ๋๋์ด์ง๋ ๊ฒฝ์ฐ ๋ฐํํ๋ ๋๋ค ์ ํ์์ผ๋ก ์ด๋ฌํ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ์์ฑํฉ๋๋ค . ์์
4 . ๋ ๊ฐ์ ๋ฌธ์์ด์ ๊ฐ์ ธ์ ๋์ผํ ๋ฌธ์์ด์ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ์ธ์. ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด์ ๋ฐํํ๋ ๋๋ค ํ์์ผ๋ก ์ด๋ฌํ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ์์ฑํฉ๋๋ค. ์์
5 . ์ธ ๊ฐ์ ๋ถ์( a
, b
, ) ๋ฅผ ๋ฐ์๋ค์ด๊ณ c
๋์ผํ ๋ถ์๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ์ธ์. ํ๋ณ์์ ๋ฐํํ๋ ๋๋ค ์ ํ์์ผ๋ก ์ด๋ฌํ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ์์ฑํฉ๋๋ค. ์์ด๋ฒ๋ฆฐ ์ฌ๋์ D = b^2 - 4ac ์
๋๋ค . ์์
6 . ์์
5์ ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์
๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋๋ค ์์ ์์ฑํฉ๋๋ค a * b^c
. Java์ ๋๋ค ํํ์์ ๋ํด ์ธ๊ธฐ๊ฐ ์์ต๋๋ค. ์์ ์ ์์
์ด ํฌํจ๋์ด ์์ต๋๋ค. 2 ๋ถ.
๋ ๋ฌด์์ ์ฝ์ด์ผ ํ ๊น์? |
---|
Java์ ์ ๊ท ํํ์, 1๋ถ OCAJP8(1Z0-808) Java 8 ์ํ ์ค๋น๋ฅผ ์ํ ์ต๊ณ ์ ๋์ |
GO TO FULL VERSION