Basic Confusing Questions โ ๐คทโโ๏ธ
ํด๋ฆญํ๋ฉด ์ ๋ต์ด ๋์ต๋๋น~
์๋ฐ์ ์ ์(๋จ๊ถ์ฑ ์ง์)์์ ์ธ์ฉํ ์ฝ๋์ ๋ด์ฉ์ ๋ด๊ณ ์์ต๋๋ค.
๋ฐ์ดํฐ ํ์ ์ค ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ ์ฐจ์ด
๊ธฐ๋ณธํ
๋ณ์์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
์ฐธ์กฐํ
์ฃผ์๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์๋ฐ๋ C์ ๋ค๋ฅด๊ฒ ์ฐธ์กฐํ ๋ณ์๋ผ๋ฆฌ ์ฐ์ฐ์ด ์๋๋ค.
ํด๋์ค์ ๊ฐ์ฒด์ ๋ํด ์ค๋ช
๊ฐ์ฒด
: ์ค์ ์ ์ฌ๋ฌผ์ ์์ฑ๊ณผ ๋์์ ๊ฐ์ง๊ณ ์๊ณ ๋ค๋ฅธ๊ฒ๊ณผ ์๋ณ๊ฐ๋ฅํ๋โฆ (๋ถ์ด๋นต)
ํด๋์ค
: ํ๋, ๋ฉ์๋, ์์ฑ์๋ก ๊ตฌ์ฑ๋์ด์๋ ๊ฐ์ฒด์ ์ค๊ณ๋ (๋ถ์ด๋นต ํ)
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ์ ์ฐจ์ด
ย | ์ค๋ฒ๋ก๋ฉ | ์ค๋ฒ๋ผ์ด๋ฉ |
---|---|---|
๋ฉ์๋ ์ด๋ฆ | same | same |
๋ฉ๊ฒ๋ณ์, ํ์ | different | same |
๋ฆฌํด ํ์ | doesn`t matter | smame |
์ค๋ฒ๋ผ์ด๋ฉ
: ์์ ๋ฉ์๋์์ ์ฌ์ฉ๋ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ๋ค์ ํธ์ถํด์ ์๋ก์ด ํํ๋ก ์ฌ์ฉํ๋ ํ์, ๋ฆฌํด ํ์
์ด ๋์ผํด์ผํจ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
๋ถ๋ชจ์๊ฒ์ ์์๋ฐ์ ๋ฉ์๋์ ๋ด์ฉ๊ณผ ์์ํด๋์ค์ ๋ง์ง์์ ๊ฒฝ์ฐ ์์ํด๋์ค์์ ๋์ผํ ๋ฉ์๋๋ฅผ ์ฌ์ ์
/*-----------------------------------๋ถ๋ชจ ํด๋์ค--------------------------------------*/
class Man{
public String name;
public int age;
public void info(){
System.out.println("์ด ๋จ์์ ์ด๋ฆ์ "+name+", ๋์ด๋ "+age+"์ด");
}
}
/*----------------------------------์์ ํด๋์ค---------------------------------------*/
class Job extends Man{
String job;
public void info() {//๋ถ๋ชจํด๋์ค์ ์๋ info()๋ฉ์๋๋ฅผ ์ฌ์ ์
super.info(); // ์ค๋ฒ๋ผ์ด๋ฉ์ ์ํ super์ ์ธ ํ์
System.out.println("์ด ์์ ์ง์
์ "+job);
}
}
/*-------------------------------------๋ฉ์ธ ํด๋์ค-----------------------------------*/
public class OverRidding {
public static void main(String[] args) {
Job job = new Job(); //Job ๊ฐ์ฒด ์์ฑ
//๋ณ์ ์ค์
job.name = "๋ฏผ์ญ";
job.age = 30;
job.job = "๋ฐฑ์๋";
job.info();
}
}
์ค๋ฒ๋ก๋ฉ
: ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ ๋ฉ์๋๋ฅผ ๋งค๊ฐ๋ณ์, ํ์
๋ง ๋ค๋ฅด๊ฒ ํด์ ์ฌ์ฉํ๋ ํ์ ๋ฆฌํดํ์
์๊ด์์
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ํ๋์ ํด๋์ค ์์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ๋ฒ ์ ์
class Shape {
public void area() { // ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ. ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋ 4๊ฐ.
System.out.println("๋์ด");
}
public void area(int r) {
System.out.println("์ ๋์ด = " + 3.14 * r * r);
}
public void area(int w, int l) {
System.out.println("์ง์ฌ๊ฐํ ๋์ด = " + w * l);
}
public void area(double b, double h) {
System.out.println("์ผ๊ฐํ ๋์ด = " + 0.5 * b * h);
}
jvm ๋์ ๋ฐฉ์
[1] .Java โ compiler โ .class(๋ฐ์ดํธ ์ฝ๋) โ JVM
์ฝ๋๋ฅผ ์
๋ ฅํ๋ฉด JVM๋จธ์ ์ผ๋ก ๋ณด๋ด์ฃผ๊ธฐ์ ์ Java Compiler์๊ฒ ์์ค์ฝ๋๋ฅผ ๊ฒ์ฌ๋ฅผ ๋ฐ๊ณ ์ปดํ์ผ์ ์งํํ๋ค.
.java ํ์ฅ์๋ฅผ ๊ฐ์ก๋ ์ฝ๋ โ .class ํ์ฅ์๋ฅผ ๊ฐ์ง java byte code๋ก ๋ณํ๋ค.
[2] JVM ์ฝ๋ ์คํ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ OS๋ก ๋ถํฐ ๋ฐ์ (๋ฉ๋ชจ๋ฆฌ ํ ๋น)
[3] Class Loader๊ฐ ๋ฐ์ดํธ์ฝ๋ ํ์ผ โ RuntimeData Area๋ก ์ ์ฌ์ํด (์๋ฐ์์ค์ฝ๋ ๋ฉ๋ชจ๋ฆฌ ๋ก๋)
[4] ๋ก๋ ์๋ฃ ํ, Execution๊ฐ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ ์ ์ฌ๋ ๋ฐ์ดํธ ์ฝ๋ ์คํ (2๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ฐ์ดํธ ์ฝ๋ ์คํ)
4-1. ์ธํฐํ๋ฆฌํฐ โ ์ฝ๋๋ฅผ ํ์ค์ฉ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๊ณ ์คํ
4-2. Jit ์ปดํ์ผ๋ฌ โ just in time complier๋ก ๋ฐ์ดํธ ์ฝ๋ ์ ๋ถ๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๊ณ ์คํ
โป ์ฐจ์ด - ์ธํฐํ๋ฆฌํฐ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค๊ฐ โ๋ฐ๋ณต๋๋ ๋ฌธ์ฅ์ด ์์ฃผ ์คํ๋๋คโ๋ก ํ๋จ๋๋ฉด jit ์ปดํ์ผ๋ฌ ์คํ
์๋ฐ์๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํด ์ค๋ช
๋ฉ์๋ ์์ญ (Method Area)
ํด๋์ค ๋ฉค๋ฒ ๋ณ์์ ์ด๋ฆ, ๋ฐ์ดํฐ ํ์
, ์ ๊ทผ ์ ์ด์ ์ ๋ณด์ ๊ฐ์ ๊ฐ์ข
ํ๋ ์ ๋ณด๋ค๊ณผ ๋ฉ์๋ ์ ๋ณด, ๋ฐ์ดํฐ Type ์ ๋ณด, Constant Pool, static๋ณ์, final class ๋ฑ์ด ์์ฑ๋๋ ์์ญ์ด๋ค.
ํ ์์ญ(Heap Area)
JVM์๋ ํ๋์ heap์์ญ๋ง ์กด์ฌํจ. ๊ฐ์ฒด, ์ธ์คํด์ค ๋ณ์, ๋ฐฐ์ด์ด๋๋ ์์ญ์ด๋ค ๊ฐ๋น์ง์ปฌ๋์
์ด ์ฃผ๊ธฐ์ ์ผ๋ก ํ๋ํ๋ ์์ญ์ด๋ค
์คํ ์์ญ (Stack Area)
์ง์ญ๋ณ์, ํ๋ผ๋ฏธํฐ, ๋ฆฌํด ๊ฐ, ์ฐ์ฐ์ ์ฌ์ฉ๋๋ ์์ ๊ฐ ๋ฑ์ด ์์ฑ๋๋ ์์ญ์ด๋ค
PC ๋ ์ง์คํฐ (PC Register)
Thread๊ฐ ์์ฑ๋ ๋๋ง๋ค ์์ฑ๋๋ ์์ญ์ผ๋ก ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ์ฆ ํ์ฌ ์ค๋ ๋๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฃผ์์ ๋ช
๋ น์ ์ ์ฅํ๊ณ ์๋ ์์ญ์ด๋ค
๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ (Native Method Stack)
JVM์์ C์ ๊ฐ์ Java ์ธ์ด ์ด์ธ์ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ์ง์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์คํ ๊ตฌ์กฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค
โป ์๋ฐ ์ด์ธ์ ์ธ์ด(C++, ์ด์ ๋ธ๋ฆฌ ๋ฑ)๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์คํํ ๋ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ์ผ๋ฐ์ ์ธ C ์คํ์ ์ฌ์ฉํ๋ค๊ณ ํจ.
static, final ํค์๋์ ๋ํด ์ค๋ช ํ๊ณ ์ธ์ ์ฌ์ฉํด์ผํ๋์ง
static
= ๊ณตํต์ ์ธ
์ ์๋ฏธ๋ฅผ ์ง๋๊ณ ์๋ค. ์ธ์คํด์ค์ ์๊ด์์ด ํ๋์ ๋ณ์๋ฅผ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. final
= ๋ณ๊ฒฝ๋ ์ ์๋
์ ์๋ฏธ๋ฅผ ์ง๋๊ณ ์๋ค. ๋ณ์์ ์ด์ฉ๋๋ฉด ์์๊ฐ ๋๊ณ , ๋ฉ์๋์ ์ฌ์ฉ๋๋ฉด ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, ํด๋์ค์์ ์ฌ์ฉ๋๋ค๋ฉด ์์ํด๋์ค๋ฅผ ์ ์ํ ์ ์๋ค.
static ์ด๊ธฐํ ๋ธ๋ญ์ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋, ๋จ ํ๋ฒ๋ง ์ํ๋จ.
1
2
3
4
5
6
7
8
9
10
11
12
//static ๋ณ์
static int width = 200;
> ๋ชจ๋ ์ธ์คํด์ค์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ํด๋์ค ๋ณ์๊ฐ ๋จ
> ํด๋์ค๋ณ์๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง์์๋ ์ฌ์ฉ๊ฐ๋ฅ
> ํด๋์ค ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ ์์ฑ
//static ๋ฉ์๋
public static Method(){
...
}
> ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ํธ์ถ์ด ๊ฐ๋ฅํ static ๋ฉ์๋๊ฐ ๋๋ค.
> static ๋ฉ์๋ ๋ด์ ์ธ์คํด์ค๋งด๋ฒ๋ค์ ์ง์ ์ฌ์ฉ ํ ์ ์๋ค.
1
2
3
4
5
6
7
final class Final{ //์กฐ์์ด ๋ ์ ์๋ ํด๋์ค
final int MAX_SIZE = 10; //๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์์
final void getSize(){ //์ค๋ฒ๋ผ์ด๋ฉ ๋ถ๊ฐ๋ฅํ ๋ฉ์๋
final int LV = MAX_SIZE;//๊ฐ ๋ณ๊ฒฝ์ด ์๋๋ ์ง์ญ๋ณ์
return MAX_SIZE;
}
}
OOP ์ฅ๋จ์ ๊ณผ ์ค๋ช
์ ์ฐจ ์งํฅ ๋์ ์ ์ฐ๋ฆฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๊ฒ์ธ๊ฐ?
์ ์ฐจ ์งํฅ์ ๋ง์ฒ๋ผ ์์ฐจ์ ์ธ ์ฒ๋ฆฌ๊ฐ ์ค์์ํ๋ ํ๋ก๊ทธ๋จ์ด๋ค. ๋ํ์ ์ผ๋ก๋ C์ธ์ด๊ฐ ์๋ค.
์ปดํจํฐ์ ์ผ์ฒ๋ฆฌ ๋ฐฉ์๊ณผ ์ ์ฌํด ์คํ ์๋๊ฐ ๋น ๋ฅด๋ค.
ํ์ง๋ง ๋ฆฌํฉํฐ๋ง, ๋๋ฒ๊น
์ ์ด๋ ค์, ์์๊ฐ ๋ฐ๋๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋๋ ๋ฑ ๋จ์ ์ด ๋ง์์ ๋์จ ์ด๋ก ์ด ๊ฐ์ฒด์งํฅ์ด๋ค.
๊ฐ์ฒด์งํฅ์...
์ค์ ์กด์ฌํ๋๊ฒ๊ณผ ๊ฐ์ฒด๋ค ๊ฐ ์ํธ์์ฉ์ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์ ํตํด ๊ตฌํํ๊ณ ์ ํจ
๋ํ ์ด๋ ๊ฒ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค๋ฉด ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์ ์ฉ์ด, ์ค๋ณต ์ฝ๋ ๊ฐ์ ํจ๊ณผ
๊ฐ ๋ํ๋จ.
๋จ์ ์ผ๋ก๋ ์ค๊ณ์ ๋ง์ ์๊ฐ๊ณผ ์ ์ฐจ์งํฅ์ธ์ด์ ๋นํด ์๋์ ์ผ๋ก ์คํ์๋๊ฐ ๋๋ฆฌ๋ค.
์บก.์.์ถ.๋ค!
์์ (inherutance)
= ํ์ฅ๊ณผ ๋ถ๋ฅ์ฉ์ด, ์ค๋ณต์ฝ๋ ์ ๊ฑฐ, ์ฌ์ฌ์ฉ์ฑโ
๊ธฐ์กด์ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑ (a.k.a ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ํน์ง๊ณผ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ๋ฐ๋ ๊ฒ)
๋ค์ค ์์ ์๋จ
extends ํค์๋ ์ฌ์ฉ
์บก์ํ (encaspulation)
= ๋ฐ์ดํฐ ๋ณดํธ์ ์๋
์์ฑ(๋ณ์)๊ณผ ๊ธฐ๋ฅ(๋ฉ์๋)์ ํ๋๋ก ๋ฌถ์ด์, public, private ๊ฐ์ ์ ๊ทผ ์ง์ ์๋ฅผ ํตํด ์ ์ดํ๋ ๋ฐฉ๋ฒ.
getter/setter ์ฌ์ฉ
๋์ ์์ง๋(Cohension) ๋ฎ์ ๊ฒฐํฉ๋(Coupling)๋ฅผ ์ ์งํ ์ ์๋๋ก ํด์ฃผ๋ ์ค๊ณ ๋ฐฉ์
๋คํ์ฑ (polymorphism)
= ์ค๋ฒ ๋ผ์ด๋ฉโฆ ์์ ํด๋์ค๊ฐ ๊ฐ์ ๋ฉ์๋๋ก ํ์ ํด๋์ค๋ค์ ์๋ก ๋ค๋ฅด๊ฒ ๋์์ํฌ ์ ์๋ค.
๋ถ๋ชจ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ๋์ ๋ฐฉ์์ ์ ์ ์์ด๋ ์ค๋ฒ ๋ผ์ด๋ฉ์ ํตํด ์์ ํด๋์ค๋ฅผ ์ ๊ทผํ ์ ์์ต๋๋ค.
์์ ํด๋์ค ํ์ ์ ์ฐธ์กฐ ๋ณ์๋ก ํ์ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ (๋ฐ๋๋ก ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ๋ ์๋จ)
์ ์ง๋ณด์๊ฐ ์ฝ๊ณ ์ฌ์ฌ์ฉ์ฑ์ด ์ข๊ณ ๊ฒฐํฉ์ด ๋์จํ๋๋ก ์ ์งํ๋ ๋ฐฉ์
ex) SportCar() -> Car() ์ผ ๊ฒฝ์ฐ
1
2
3
4
5
Car car = new car();
SportCar Scar = new SportCar();
Car Scar = new SportCar(); //๊ฐ๋ฅ
SportCar Scar = new Car(); //๋ถ๊ฐ๋ฅ
์ถ์ํ(Abstraction)
= ๊ณตํต๋ ํน์ง์ ํ๋์ ๊ฐ๋
ํ
abstract ํค์๋๋ฅผ ์ฌ์ฉ
๊ณตํต๋ ํน์ง์ธ ๋งํผ ๋ฐ๋์ ์ฌ์ฉ๋์ด์ผ ํ๋ ๋ฉ์๋๋ฅผ ์ ์ธํด์ ์ถ์ ํด๋์ค๋ฅผ ์์๋ฐ๋ ๋ชจ๋ ํด๋์ค๋ค์ ์ถ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํด์ผ ํจ
๋ค์ค ์์ ๋ถ๊ฐ๋ฅ. ๊ฐ์ฒด ์์ฑ ๋ถ๊ฐ๋ฅ
์ ๊ทผ์ ์ด์์ ํน์ง๊ณผ ์ข ๋ฅ์ ๋ํด์ ์ค๋ช
public
: ์ ๊ทผ ์ ํ์ด ์๋ค.
default
: ๊ฐ์ ํจํค์ง ๋ด์์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
protected
: ๊ฐ์ ํจํค์ง์ ๋ค๋ฅธ ํจํค์ง์ ์์ํด๋์ค์์ ์ ๊ทผ์ด ๋๋ค.
private
: ๊ฐ์ ํด๋์ค ๋ด์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค์ ์ฐจ์ด
์ถ์ํด๋์ค๋ IS - A โ~์ด๋คโ. (๋ค์ค์์ X)
์ธํฐํ์ด์ค๋ HAS - A โ~์ ํ ์ ์๋ (๋ค์ค์์ O)
์ถ์ํ(Abstraction)
= ๊ณตํต๋ ํน์ง์ ํ๋์ ๊ฐ๋
ํ
abstract ํค์๋๋ฅผ ์ฌ์ฉ
๊ณตํต๋ ํน์ง์ธ ๋งํผ ๋ฐ๋์ ์ฌ์ฉ๋์ด์ผ ํ๋ ๋ฉ์๋๋ฅผ ์ ์ธํด์ ์ถ์ ํด๋์ค๋ฅผ ์์๋ฐ๋ ๋ชจ๋ ํด๋์ค๋ค์ ์ถ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํด์ผ ํจ
๋ค์ค ์์ ๋ถ๊ฐ๋ฅ. ๊ฐ์ฒด ์์ฑ ๋ถ๊ฐ๋ฅ
์ธํฐํ์ด์ค (interface)
= ์ญํ ๊ณผ ๊ตฌํ์ ๊ตฌ๋ถ
implements ํค์๋ ์ฌ์ฉ *์์๋ณด๋จ ๊ตฌํ
๋ชจ๋ ๊ธฐ๋ฅ์ ์ถ์ํ๋ก ์ ์๋ง ํ๊ณ ํด๋์ค ๋ด์์ ๊ตฌํ์ ํ์ง ์์ ๊ฒ. (๋ฏธ๋ฆฌ ์ ํด์ง ๊ท์น์ ๋ง๊ฒ ๊ตฌํํ๋๋ก ํ์ค์ ์ ์)
์ธํฐํ์ด์ค์ ์ถ์ํ์ ์ฐจ์ด์ - ๊ธฐ๋ณธ ์ค๊ณ๋์ ๋ฏธ์์ฑ ์ค๊ณ๋
์ถ์ํด๋์ค
๋ ์ธ์คํด์ค ์์ฑ๋ณด๋ค๋ ์์์ ๋ชฉ์ ์ผ๋ก ํ๋ ๋ฐ๋ฉด ์ธํฐํ์ด์ค๋
์ฃผ๋ก ์ ๊ณตํ ๊ธฐ๋ฅ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ.
์ถ์ํด๋์ค
๋ ์์ฑ์ ํ๋ ์ผ๋ฐ, ์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ ์์๋ ๋ฐ๋ฉด ์ธํฐํ์ด์ค
๋ ์์์ ์ถ์ ๋ฉ์๋๋ง ํฌํจ ํ ์ ์๋ค.
์ถ์ ํด๋์ค๋ ์์ ์ ๊ธฐ๋ฅ๋ค์ ํ์ ํด๋์ค๋ก ํ์ฅ
-> ๋ฉ์๋๋ฅผ ์์ ํน์ง์ ๋ง๊ฒ ํ์ฅํด์ ์ฌ์ฉ, ๋ณ์ซ๊ฐ ์ง์ ์์ด ์ํฉ์ ๋ง๊ฒ๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ธํฐํ์ด์ค์ ์ ์๋ ๋ฉ์๋๋ฅผ ๊ฐ ํด๋์ค์ ๋ชฉ์ ์ ๋ง๊ฒ ๊ธฐ๋ฅ์ ๊ตฌํ
-> ํด๋์ค๋ฅผ ๊ฐ์ธ์ ์ง์ ์ ์ธ ํด๋์ค ๊ฐ์ ์ข ์๊ด๊ณ๋ฅผ ๋ฒ์ด๋๊ฒ ํด ์ค (๋ ๋ฆฝ์ฑ ํ๋ณด) ์ด๊ฒ์ ์ ์ง๋ณด์์ ์์ด์ ์ ๋ฆฌํจ
๋ํ ๋ณ์ซ๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด ๊ณ ์ ๊ฐ์ ์ค์ผ ํจ
์ด๋ํด๋์ค์ ์ต๋ช ํด๋์ค, ์ฅ๋จ์
๋ด๋ถ ํด๋์ค
๋ ํด๋์ค ๋ด์ ์ ์ธ๋ ํด๋์ค์ด๋ค.
ํ๋์ ํด๋์ค๋ฅผ ๋ค๋ฅธ ํด๋์ค์ ๋ด๋ถ ํด๋์ค๋ก ์ ์ธํ๋ฉด ๋ ํด๋์ค์ ๋งด๋ฒ๋ค๊ฐ์ ์๋ก ์ฝ๊ฒ ์ ๊ทผ ํ ์ ์๋ค๋ ์
๊ณผ
์ธ๋ถ์ ๋ถํ์ํ ํด๋์ค๋ฅผ ๊ฐ์ถค์ผ๋ก์จ ์ฝ๋์ ๋ณต์ก์ฑ์ ์ค์ผ์์๋ค -> ์บก์ํ
.
1
2
3
4
5
6
7
8
9
10
11
12
class A{
}
class B{
}
----
class A{
class B{ //๋ด๋ถ ํด๋์ค B
}
}
์ต๋ช
ํด๋์ค
: ์ด๋ฆ์ด ์๊ณ , ํด๋์ค ์ ์ธ๊ณผ ๋์์ ๊ฐ์ฒด๋ฅผ ์ํ๊ธฐ์ ํ๋ฒ๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ฉฐ,
์ค์ง ํ๋์ ๊ฐ์ฒด๋ง์์์ฑ ํ ์์๋ ์ผํ์ฉ ํด๋์ค
๋ค์์ฌ์ฉํ์ง์๋๋ค๊ณ ํ๋ฉด ํด๋์ค๋ฅผ ๋ง๋๋๊ฒ๋ณด๋จ ์ข๋ค. ๋๋ณด๋ค ์ค์ด ์ปค๋ณด์ธ๋ค.
์ปฌ๋์ ๊ณผ ์คํธ๋ฆผ์ ์ฐจ์ด ์ค๋ช
์ปฌ๋ ์ ๊ณผ ๋ฐฐ์ด์ ์ฐจ์ด๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ ๋นํ๋ ๋์ ํ ๋นํ๋์ ์ฐจ์ด์ด๋ค.
์ปฌ๋ ์
์ ๋ฐฐ์ด์ด ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, DTO ๋ํ ์๋ฃ๋ฅผ ๋ด๋ ํ๋์ ๋ฐฉ์
์คํธ๋ฆผ
์ ์ ์ธํ ์ฝ๋๋ก์จ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋
์ฑ์ด ์ฌ๋ผ๊ฐ. ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ ๋ณด๋จ ๋ฌด์์ ์ฒ๋ฆฌํ ์ง์ ํฌ์ปค์ฑ
๋ฐ์ดํฐ์ ์ฒ๋ฆฌ์์ ์ด ๋ค๋ฅด๋ค.
์ปฌ๋ ์ ์ ํ์ํ ๋ชจ๋ ๊ฐ์ด ๊ณ์ฐ๋์ด ์๋ฃ๊ตฌ์กฐ์ ๋ด๊ฒจ์ผํ๋ค. ์ฆ ์ ์ฅํ๊ธฐ ์ ์ ๋ชจ๋ ์์๊ฐ ๊ณ์ฐ๋์ด์ผ ํ๋ค. ๋ฐ๋ฉด, ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋๋ง ๊ณ์ฐํจ.ํ๋ฒ ์๋นํ๋ฉด ์ฌ์ฌ์ฉ์ด ๋๋ ์๋๋
์ปฌ๋ ์ ์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ ์คํธ๋ฆผ์ ํ๋ฒ ์๋น๋๋ฉด ์ฌ์ฌ์ฉ์ด ์๋๋ค.์ปฌ๋ ์ ์ '์ธ๋ถ๋ฐ๋ณต', ์คํธ๋ฆผ์ '๋ด๋ถ๋ฐ๋ณต'
์ปฌ๋ ์ ์ ๋ฐ๋ณตํ๋ ค๋ฉด iterator๋ for๋ฅผ ์จ์ ์์๋ฅผ ๋ฐ๋ณตํด์ผํ๋ค. ์ด๋ฅผ ์ธ๋ถ๋ฐ๋ณต์ด๋ผ ํจ ์คํธ๋ฆผ์ ๋ด๋ถ์ ์ผ๋ก ์์์ ๋ฐ๋ณตํด์ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ค๋ค. filter, map๋ฑ์ ์ฐ์ฐ ๋ฉ์๋์์๋ ๋ฐ๋ณต์ด ๋ด๋ถ์ ์ผ๋ก ์จ๊ฒจ์ ธ์๊ณ ์ถ์ํ๋์ด์๋ค.๋ํ, ๋ด๋ถ๋ฐ๋ณต์ ๋ณ๋ ฌ์ฑ์ ์ด์ ์ด ์๋ค. ์ธ๋ถ ๋ฐ๋ณต์ ์ฌ์ฉํ๋ฉด ๋ณ๋ ฌ์ฑ์ ์ค์ค๋ก ๊ด๋ฆฌํด์ผ ํ๋ค. ๋ณ๋ ฌ์ฑ์ ์ค์ค๋ก ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ์ผ์ด๋ ์ ์๋ ๋ถ๋ถ๋ค์ ๊ฐ๋ฐ์๊ฐ ์ ๊ฒฝ์จ์ ๊ด๋ฆฌํด์ผ ํ๋ค๋ ๋ง์ด๋ค. ๋ฏธ์ฒ ํ์ ํ์ง ๋ชปํ ์ฌ์ํ ์ด์ ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ์ฆ๊ฐ์ํจ๋ค.
parallel()
ํจ์๋ฅผ ํตํด ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋๋ฐ ์ด ๋ ๋ณ๋ ฌ์ฑ ๊ตฌํ์ ์๋์ผ๋ก ์ ํํด์ ์คํํด์ค๋ค. ์คํธ๋ฆผ์ Java๋ฅผ ๋ง๋ ๊ฐ๋ฐ์๋ค์ ์ํด ๋ง๋ค์ด์ก๋ค. Java์ ๋ด๋ถ ๋์์ ๊น์ด์๊ฒ ์๊ณ ์๋ ํ๋ก๊ทธ๋๋จธ๋ค์ ์ํด ๋ง๋ค์ด์ ธ ์ ๋ขฐํ ์ ์๋ค. ์ฐ๋ฆฌ๋ ์จ๊ฒจ์ง๊ณ ์ถ์ํ๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ณต๊ฐ API๋ฅผ ํตํด ๊ฐ๋จํ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก ์คํธ๋ฆผ์ด ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ForkJoin ํ๋ ์์ํฌ
์ ๋ํ ์ดํด์ ๋ณ๋ ฌ ์ฐ์ฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๊ธฐ ์ํ ์ง์์ด ํ์ํ๊ฑด ๋ฌผ๋ก ์ด๋ค.โปfork-join ํ๋ ์์ํฌ๋ ํ์คํฌ(Task)๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์์ ์์ ๋จ์๋ก ๋ถํ (fork)ํ์ฌ ์ฒ๋ฆฌํ๋ค. ์ฒ๋ฆฌ๋ ์๋ธ ํ์คํฌ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ํฉ์ณ ์ ์ฒด ๊ฒฐ๊ณผ๋ก ํฉ์น๋ค(join).
list ,set, map ์ฐจ์ด์
List
๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ค์ด ์์๋๋ก ์ ์ฅ๋๋ฉฐ ์ค๋ณต์ ํ์ฉํ๋ค.
Map
์ ์์๊ฐ ๋ณด์ฅ๋์ง ์๊ณ Key๊ฐ์ ์ค๋ณต์ ํ์ฉํ์ง ์์ง๋ง Value๊ฐ์ ์ค๋ณต์ ํ์ฉ๋๋ค.
Set
์ ์์๊ฐ ๋ณด์ฅ๋์ง ์๊ณ ๋ฐ์ดํฐ๋ค์ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค.
์ ๋ค๋ฆญ์ ๋ํด์ ์ค๋ช ํ๊ณ ์ปฌ๋ ์ ํด๋์ค์์ ์ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋์ง?
๋ค์ํ ํ์ ์ ๊ฐ์ฒด๋ค์ ๋ค๋ฃจ๋ ๋ฉ์๋๋ ์ปฌ๋์ ํด๋์ค์ ์ปดํ์ผ ์ ํ์ ์ฒดํฌ๋ฅผ ํด์ฃผ๋ ๊ธฐ๋ฅ.
ํ์
์ ์์ ์ฑ
์ ์ฃผ๊ณ ํ์
์ฒดํฌ
์ ํ๋ณํ์ ์๋ต
ํ ์ ์์ด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง