๊ฐ์ฒด
๊ฐ์ฒด๋ ๋ ๊ฐ์ง ์๋ฏธ๋ก ์ค๋ช ํ ์ ์๋ค.
1. ์์ ์ ์์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด์ ์๋ณ์ด ๊ฐ๋ฅํ ๊ฒ
2. ํด๋์ค์์ ์ ์ํ ๊ฒ์ ํ ๋๋ก ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ๊ฒ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programing, OOP)
์ฃผ๋ณ์ ์ฌ๋ฌผ์ด๋ ์ถ์๊ฐ๋ฅํ ๊ฒ์ ๊ฐ์ฒด๋ก ๋ง๋ค๊ณ , ๊ฐ์ฒด๋ค ๊ฐ์ ์ํธ์์ฉ์ ์ด์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐํ๋ ๋ฐฉ๋ฒ
๊ฐ์ฒด์งํฅ ์ธ์ด์ ํน์ง์ผ๋ก๋
- ์ถ์ํ(Abstruction): ํ์ค์ ๊ฐ์ฒด๋ฅผ ์ถ์ํ( ๋ณธ์ง์ ์ด๊ณ ๊ณตํต์ ์ธ ๋ถ๋ถ์ ๋ชจ์ ์ ์ํ๋ ๊ฒ)
- ๋คํ์ฑ(Polymorphism): ํ๋์ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ๊ฐ์ง ํ์ ์ผ๋ก ์ฐธ์กฐ
- ์์(Inheritance): ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์ ํด๋์ค๋ก ์ ์ํ์ฌ ์ฝ๋์ ์ฌ์ฌ์ฉ
- ์บก์ํ(Encapsulation): ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์ ๋ ธ์ถ์ํค์ง ์๊ฒ ๋ณดํธ
=> ํ์ค์ ๊ฐ์ฒด๋ ์ถ์ํ ๋์ด ํด๋์ค๋ก ์ ์๋๊ณ , ํด๋์ค๋ ๊ตฌ์ฒดํ๋์ด ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๊ฐ ๋๋ค.
ํด๋์ค(Class)? ๊ฐ์ฒด(Object)? ์ธ์คํด์ค(Instance)?
- ํด๋์ค: ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ด๊ธฐ ์ํ ์ค๊ณ๋(ํ)
- ๊ฐ์ฒด: SW ์ธ๊ณ์ ๊ตฌํํ ๋์
- ์ธ์คํด์ค: ์ค๊ณ๋๋ฅผ ๋ฐํ์ผ๋ก SW ์ธ๊ณ์ ๊ตฌํ๋ ๊ตฌ์ฒด์ ์ธ ์ค์ฒด
=> ๊ฐ์ฒด๋ ํด๋์ค์ ์ธ์คํด์ค์ด๋ค.
๋ณดํต ํน์ ํด๋์ค๋ฅผ ์ ์ธํ๋ฉด ๊ฐ์ฒด๋ผ๊ณ ํ๊ณ ์ค์ง์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๊ธฐ ์์ํ๋ฉด(new) ์ธ์คํด์ค๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ ๊ฐ๋ค.
/* ํด๋์ค */
public class Animal {
...
}
/* ๊ฐ์ฒด์ ์ธ์คํด์ค */
public class Main {
public static void main(String[] args) {
Animal cat, dog; // '๊ฐ์ฒด'
// ์ธ์คํด์คํ
cat = new Animal(); // cat์ Animal ํด๋์ค์ '์ธ์คํด์ค'(๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น)
dog = new Animal(); // dog์ Animal ํด๋์ค์ '์ธ์คํด์ค'(๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น)
}
}
JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ( meta-space, Call Stack, Heap)
- meta-space: ํด๋์ค์ ์ ๋ณด์ static ๋ณ์๋ค์ ์ฌ๊ธฐ์ ์ ์ฅํ๋ค.
- Call Stack: ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋ฉ์๋๋ Call Stack์ ์ฌ๋ผ๊ฐ๊ณ , ๋๋ ๋ค ์ญ์
- Heap: ํด๋์ค๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ํ ๋นํ ๋ ์ ์ฅ๋๋ ๊ณณ์ด ์ฌ๊ธฐ๋ค.
์ฌ๊ธฐ์ ์ฐ๊ด๋ ์ด์ผ๊ธฐ๋ก ์ง์ญ ๋ณ์์ ๋ช ์์ ์ด๊ธฐํ๊ฐ ์๋ค. ์ง์ญ ๋ณ์๋ ๋ค๋ฅธ ๋ณ์๋ค๊ณผ ๋ฌ๋ฆฌ ๋ช ์์ ์ด๊ธฐํ๊ฐ ํ์์ ์ธ๋ฐ Call Stack์ ๋น๋ฒํ๊ฒ ์ฝ์ , ์ญ์ ๋๋ ๊ณผ์ ์์ ์๋์ผ๋ก ์ด๊ธฐํ๋ฅผ ํด์ฃผ๋ฉด ์ฐ์ฐ์ด ๋ง์์ ธ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ์ด๊ธฐํ๊ฐ ์์ด์ก๊ธฐ ๋๋ฌธ์ด๋ค.
Static
- ํ๋ง๋๋ก ์ ์ํ์๋ฉด ๊ณต์ ๋ณ์ or ๋ฉ์๋
- ๊ฐ์ฒด๋ฅผ ์ ์ธํ์ ๋, Static์ ๋จผ์ ์ ์ธ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ด ๊ณต์ ํ๋ ๊ฐ์
- ๋ฐ๋ฉด Static์ด ์๋ ๋งด๋ฒ ๋ณ์๋ค์ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ธ์ ๋ ์ ์ธ
- ๋จ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ปดํ์ผ ๋จ๊ณ์์ ๋ฐฐ์ ๋จ
Method
- ํน์ ํ ๊ฐ์ฒด ๋ด์ ์ข ์๋ ์๋ธ ๋ฃจํด
- ๊ฐ์ฒด์ ์ข ์๋๋ค๋ ์ ์ด Function๊ณผ์ ์ฐจ์ด์ (์๋ฐ๋ Function ๋ฏธ์ง์)
Variable argument: ๋ฉ์๋ ์ ์ธ ์ ๋์ผ ํ์ ์ธ์์ ์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ ์ฉํด์ผ ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
- (์๋ฃํ)...paramsํ์์ผ๋ก ์ฌ์ฉ
public class VariableArgsTest {
public static void main(String[] args) {
VariableArgsTest vt = new VariableArgsTest();
vt.variableArgs(1, 2, 3); // 6
vt.variableArgs(1, 2, 3, 4, 5); // 15
vt.variableArgs(1, 2); // 3
}
public void variableArgs(int... params) {
int sum = 0;
for (int i : params) {
sum += i;
}
System.out.println(sum);
}
}
์ค๋ฒ๋ก๋ฉ
- ๋์ผํ ๊ธฐ๋ฅ(์ด๋ฆ)์ ๊ฐ์ง ๋ฉ์๋๋ฅผ ํ์ ์ด๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋ค๋ฅด๊ฒ ํ์ฌ ์ถ๊ฐ ์์ฑํ๋ ๊ฒ
- ๋ช ์๋ฅผ ํ์คํ๊ฒ ํ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์
#1: ๋์ผ ํด๋์ค, ๋์ผ ์ด๋ฆ์ผ๋ก ๊ตฌ์ฑํ ๊ฒ
#2: ์ ๋ฌ ์ธ์์ ๊ฐ์์ ํ์ ์ ๋ค๋ฅด๊ฒ ์ค์ ํ ๊ฒ
#3: ๋ฐํ ํ์ ๊ณผ ์ ๊ทผ ์ ํ์๋ ์๊ด ์์
์์ฑ์
- ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์๋์ผ๋ก ํธ์ถ๋๋ ํน์ ๋ชฉ์ ์ ๋ฉค๋ฒํจ์๋ก ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ์์ผ์ฃผ๋ ๊ฒ์ด ๋ชฉ์
- ์์ฑ์๋ ํด๋์ค์ ์ด๋ฆ๊ณผ ๋์ผํด์ผ ํ๋ค.
- ๋ฐํ ํ์ ์ด ์์ผ๋ฉฐ, ๋งค๊ฐ๋ณ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ฑํ ์ ์๋ค.(๋ฐํ ํ์ ์ด ์์ผ๋ฉด ๋ฉ์๋๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.-> ์๋ฌ ์ ๋ธ)
- ํด๋์ค์ ์ต์ 1๊ฐ๋ ์กด์ฌํด์ผ ํ๋ฉฐ, ๋ฐ๋ก ๋ง๋ค์ง ์๋๋ค๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค.
* ๋จ ์์ฑ์ ์ฝ๋๋ฅผ ๋ง๋๋ ์๊ฐ, ๊ธฐ๋ณธ ์์ฑ์๋ ์์ด์ง๊ฒ ๋๋ฏ๋ก ๊ธฐ๋ณธ ์์ฑ์๋ ๊ฐ์ด ๋ง๋ค์ด ์ค์ผ ํ๋ค.
This
- ์ฐธ์กฐ ๋ณ์๋ก์ ๊ฐ์ฒด ์์ ์ ๊ฐ๋ฆฌํด -> ์ธ์คํด์คํ๋ ๊ฐ์ฒด์์ ์ฌ์ฉ
- ์๊ธฐ ์์ ํด๋์ค์ ์๋ ๋ฉค๋ฒ๋ฅผ ์ฐพ์๊ฐ -> ์์ผ๋ฉด ๋ถ๋ชจ ํด๋์ค๋ ์ฐพ์๊ฐ ๋ด
- ์ฃผ๋ก ์ง์ญ ๋ณ์์ ๋ฉค๋ฒ ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ ๋, ๋งด๋ฒ ๋ณ์์์ ๋ช ์์ ์ผ๋ก ํํํ๊ธฐ ์ํด ์ฌ์ฉ
- Static์ผ๋ก ์ ์ธ๋ ํจ์์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค(Mainํจ์ ๊ฐ์ ๊ฑฐ)
-> ์์ฑ์์ ์ค๋ฒ๋ก๋ฉ์ ์ด๋ฆ ๋์ this๋ฅผ ์ฌ์ฉํ๋ค. this๋ ์์ฑ์์ ์ฒซ ์ค์๋ง ์ฌ์ฉ
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ์ฝ๋ ์ธ ์์ฑํ ๊ฒ๋ค (0) | 2024.07.17 |
---|---|
[JAVA] ์์ (0) | 2024.07.17 |
[JAVA] ์๋ฃ๊ตฌ์กฐ (0) | 2024.07.15 |
[JAVA] ๋ณ์ (0) | 2024.07.15 |
[JAVA] ์๋ฐ ์ ๋ฌธ (0) | 2024.07.10 |