๊ฐ์ฒด,์ธ์คํด์ค, ๋ ํผ๋ฐ์ค ๋ณ์, ํด๋์ค
ํด๋์ค ๋ณ์ : ํ๋ ๋ด์์ static ํค์๋์ ํจ๊ป ์ ์ธ๋ ๋ณ์, static ๋ณ์๋ผ๊ณ ๋ ํ๋ค.
์ธ์คํด์ค ๋ณ์ : ํ๋ ๋ด์์ ์ ์ธ๋ ๋ณ์ (static ํค์๋ ์์)
์ง์ญ ๋ณ์ : ๋ฉ์๋ ๋ด์ ํฌํจ๋ ๋ชจ๋ ๋ณ์
ํด๋์ค(class): ์ค๊ณ ๋๋ฉด. ์ค์ ๊ฐ์ฒด๊ฐ ์๋. ์ค๊ณ ๋๋ฉด์ ๋ณด๊ณ ์ค์ ์ฑ ์์ ๋ง๋ ๋ค.
์ค๋ธ์ ํธ(Object) or ์ธ์คํด์ค(Instance): ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์ฑ ์
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ๋งํจ: ์ค์ ๋ก ๋ง๋ค์ด์ง ํ์ค์ ์๋ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋ ๊ฒ.
ํ์ค์ ์กด์ฌํ ์ธ์คํด์ค๊ฐ ์ด๋ป๊ฒ ๋์ํ ์ง ๊ณ ๋ฏผํ๋ ๊ฒ
์ฐธ์กฐํ ๋ณ์(Reference Variable): ์ธ์คํด์ค๋ฅผ ํน๋ณํ ์ด๋ฆ์ผ๋ก ๋ถ๋ฌ์ฃผ๊ณ ์ถ๋ค.
์ฐ๋ ๊ธฐ(Garbage): ์ฐธ์กฐ๋์ง ์์ ์ธ์คํด์ค
์ค๋ธ์ ํธ(์ธ์คํด์ค)๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํน๋ณํ ์ด๋ฆ์ผ๋ก ์ฐธ์กฐ(reference)ํด์ผ ํจ
ํด๋์ค:ํ๋(Field)์ ๋ฉ์๋(Method)๋ฅผ ๊ฐ์ง
ํ๋๋ ํด๋์ค์ ์์ฑ
๋ฉ์๋๋ ํด๋์ค์ ๊ธฐ๋ฅ
ํด๋์ค ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค.
Book์ด๋ผ๋ ํด๋์ค๋ ํด๋์ค๋ง ๊ฐ์ง๊ณ ์๋ฌด๊ฒ๋ ๋ชปํจ.
Book b= new Book(); ์ฝ๋๋ฅผ ์์ฑํด์ผ ํจ
ํด๋์ค์ด๋ฆ(): ์์ฑ์
new ํด๋์ค ์ด๋ฆ(): ์ธ์คํด์ค๋ฅผ ์์ฑ ํ๋ผ๋ ๋ง
๋ณ์ b:๋ ํผ๋ฐ์ค
Book b = new Book();
๋ ํผ๋ฐ์ค ํ์ ๋ณ์ = ์ธ์คํด์ค ๋ง๋ฆ ์์ฑ์
new Book();
์ด๋ผ๊ณ ๋ง ํ๋ฉด ์ฐธ์กฐํ๋ ๋ณ์๊ฐ ์์ด์ Heap ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค = ์ฐ๋ ๊ธฐ(Garbage)
๊ธฐ๋ณธํํ์ ์ ๊ฐ์ ์ฐธ์กฐํ๋ ๊ฒ์ด ์๋๊ณ , ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋งํผ ๊ฐ์ง ์ ์๋ ํ์
์ฐธ์กฐํํ์ ์ ๊ฐ์ ๊ฐ์ง๋ ๊ฒ์ด ์๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ํ์
ํด๋์ค ์ ์ธ
์ ๊ทผ์ ํ์ class ํด๋์ค์ด๋ฆ{
ํ๋;
์์ฑ์;
๋ฉ์๋;
}
์ค๊ณ๊ณผ์
์ ๊ธ๊ธฐ: ๊ด๊ณ ํํ
์ ์ ์ผ๋ก ํํ: ์ด์ฉ=์์กด
ํด๋์ค ๋ฉ์๋
static์ด ๋ถ์ง ์์ ๋ฉ์๋: ์ธ์คํด์ค ๋ฉ์๋
static์ด ๋ถ์ ๋ฉ์๋: ํด๋์ค ๋ฉ์๋
ํด๋์ค ๋ฉ์๋๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ(=๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์๋ค)ํ๋ค.
๋ฉ์๋์์ ์ฌ์ฉํ๋ ๊ฑด ์์กดํ๋ค.
ex) 'ํ ์๋ฒ์ง'๋ผ๋ ํด๋์ค์ ์๋, '๊ฑท๋ค()' ๋ผ๋ ๋ฉ์๋๋ '์งํก์ด'์ ์์กด๊ด๊ณ
์ธ์คํด์ค ๋ง๋ค๊ธฐ
์ธ์คํด์ค๋ฅผ ๋ง๋๋ 3๊ฐ์ง ๋ฐฉ๋ฒ
1,new์ฐ์ฐ์์ ์์ฑ์๋ฅผ ์ด์ฉ
2.ํด๋์ค ๋ก๋๋ฅผ ์ด์ฉ
3.๋ฉ๋ชจ๋ฆฌ์ ์๋ ์ธ์คํด์ค๋ฅผ ๋ณต์
๋์์ธ ํจํด: ํด๋์ค ์์ฑํ๋ ํจํด
์ ๋ฆฌ
ํ์ํ ์๋งํผ๋ง ์ธ์คํด์ค๋ฅด ์์ฑํ์. ์? ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ
๋ฉ์๋
๊ฐ์ฒด ์งํฅ์ ํต์ฌ์: ๋ฉ์์ง
ํ๋ฅญํ๊ณ ์ฑ์ฅ ๊ฐ๋ฅํ ์์คํ ์ ๋ง๋ค๊ธฐ ์ํ ํต์ฌ์ ๋ชจ๋ ๋ด๋ถ์ ์์ฑ๊ณผ ํ๋์ด ์ด๋ค๊ฐ๋ณด๋ค ๋ชจ๋์ด ์ด๋ป๊ฒ ์ปค๋ฎค๋์ผ์ด์ ํ๋๊ฐ์ ๋ฌ๋ ค์๋ค.
-by. Alan Curtis Kay
[]: ์๋ต ๊ฐ๋ฅํ๋ค๋ ํ์
๋ฉ์๋ ์ด๋ฆ์ ์๋ฌธ์๋ก ์์ํ๋ ๊ฒ์ด ๊ด๋ก
- ๋งค๊ฐ๋ณ์(parameter)-๋ฉ์๋์ ์ ์๋ถ๋ถ์ ๋์ด๋์ด ์๋ ๋ณ์๋ค
- ์ ๋ฌ์ธ์(argument)-๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ ๋ฌ๋๋ ์ค์ ๊ฐ
public class VendingMachine {
//field
//์์ฑ์
//method
public String pushProductButton(int menuId) {
System.out.println(menuId + "๋ฅผ ์ ๋ฌ๋ฐ์.");
return "์ฝ๋ผ";
}
}
public class VendingMachineMain {
public static void main(String[] args){
VendingMachine va1= new VendingMachine();
VendingMachine va2= new VendingMachine();
String product = va1.pushProductButton(100);
System.out.println(product);
}
}
๋ฉ์๋ ์ ์ธ ๋ฐฉ๋ฒ
๋งค๊ฐ๋ณ์๋ ๋ฉ์๋์ ์ ๋ฌํ๋ ๊ฐ์ด๊ณ , ๋ฐํ ๊ฐ์ ๋ฉ์๋๊ฐ ์ธ๋ถ๋ก ๋ฐํํ๋ ๊ฐ
1 ๋งค๊ฐ๋ณ์:O, ๋ฐํ๊ฐ:O
public int method1(int x){
……
}
2 ๋งค๊ฐ๋ณ์:X, ๋ฐํ๊ฐ:X
public void method2(){
……
}
3 ๋งค๊ฐ๋ณ์:O, ๋ฐํ๊ฐ:X
public void method3(int x){
……
}
4 ๋งค๊ฐ๋ณ์:X, ๋ฐํ๊ฐ:O
public int method4(){
……
}
UML ํ๊ธฐ๋ฒ
public class MathBean {
public void printClassName(){
System.out.println("MathBean");
}
public void printNumber(int x){
System.out.println(x);
}
public int getOne(){
return 1;
}
public int plus(int x, int y){
return x+y;
}
}
public static void main(String[] args)
static ์ด ๋ถ์ ๋ฉ์๋๋ ํด๋น ๋ฉ์๋๋ฅผ ๊ฐ์ง ํด๋์ค๊ฐ ์ธ์คํด์ค๊ฐ ๋์ง ์๋๋ผ๋ ์ฌ์ฉ๊ฐ๋ฅ
JVM์ด ํด๋น ๋ฉ์๋๋ฅผ ์คํํ ์ ์๋ค.
math.getOne()์ ํ๋ฉด math๊ฐ ์ฐธ์กฐํ๋ MathBean์ธ์คํด์ค์ ๋ฉ์๋๊ฐ ์คํ
public class MathBeanTest {
public static void main(String[] args) {
MathBean math = new MathBean(); //heap ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค.
math.printClassName();
math.printNumber(5000);
int x = math.getOne();
System.out.println(x);
int value = math.plus(200,300);
System.out.println(value);
}
}
๋ฉ์๋๊ฐ ์คํ๋ ๋ ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๋๊ฐ?
์ปดํ์ผ์์ VendingMachine.printVersion(); ์ด ์ฝ๋๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ฉด, staticํ ๋ฉ์๋ ์ด๋ค.
VendingMachine.java
public String pushProductButton(int menuId) {
System.out.println(menuId + "๋ฅผ ์ ๋ฌ๋ฐ์.");
return "์ฝ๋ผ";
}
public static void printVersion(){
System.out.println("v1.0");
}
--------------------------------------------------------
VendingMachineMain.java
public static void main(String[] args){
VendingMachine.pushProductButton(); //์ธ์คํด์ค ๋ฉ์๋์ด๋ฏ๋ก ์ธ์คํด์ค ์์ฑ์ ์ํด์ ์ค๋ฅ
VendingMachine.printVersion(); //static ๋ฉ์๋์ด๋ฏ๋ก ์ธ์คํด์ค ์์ฑ ํ์ x
}
๋ด์ฉ ์ ๋ฆฌ
## ์ด๋ ํ ํด๋์ค๊ฐ ์๋๋ฐ ์ด๊ฑธ ์คํ์ํค๋ ค๋ฉด JVM์ ์ด๋ป๊ฒ ์คํ์ํค๋์? ์ด๋์ ์ฐพ์์ ์คํํ ๊น์?
-> ๊ทธ ํด๋์ค๊ฐ ์ปดํ์ผ์ด ์๋ฃ๊ฐ ๋์๋ค๋ฉด, JVM์ด ์๋์ผ๋ก CLASSPATH์ ์ง์ ๋ ๊ฒฝ๋ก์์ ํด๋น class ํ์ผ์ ์ฐพ์์ ์คํ์ํต๋๋ค.
## ํด๋์ค ํ์ผ์ ์คํ์๋ฆฌ
ํด๋์ค๊ฐ ์์ฑ์ด๋๋ฉด ํด๋์ค ์ ๋ณด๊ฐ PERM์ด๋ผ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ฅ์ด๋จ(๊ทธ๋์ JVM์ ํด๋น ํด๋์ค๊ฐ ๋ฌด์จ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ์๋ค.)
ํด๋น ํด๋์ค๋ฅผ ์คํํ๋ฉด JVM์ main๋ฉ์๋ ๋จผ์ ์ฐพ์์ ์คํํจ
์คํ๋๋ฉด Java Stack ์ด๋ผ๋ ๋ฉ๋ชจ๋ฆฌ์์ญ์ '์คํ๋ ๋ฉ์๋ ์ ๋ณด'๊ฐ ์ฌ๋ผ๊ฐ.
Java Stack ์ ์ ์ฅ๋ '์คํ ์ ๋ณด ํ๋'๋ฅผ '์คํ ์ํธ๋ฆฌ'๋ผ๊ณ ํจ
main๋ฉ์๋์ String[] args ๊ฐ ๋์ด์๋๋ฐ String[] ํ์ ์ args๋ ๋ณ์๊ฐ ์๋ค๋ ๋ง
์ฌ๊ธฐ์ String[]ํ์ ์ '์ฐธ์กฐํ์ '์์ผ๋ก main๋ฉ์๋๋ฅผ ์คํํ๋ฉด ๋ฐ๋ก Heap๋ฉ๋ชจ๋ฆฌ์์ String[]์ ์ธ์คํด์ค๊ฐ ๋ง๋ค์ด์ง๊ณ args๊ฐ ์ด๊ฑธ ์ฐธ์กฐํจ.
์ค๊ฐ์ ์์ฑ์๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์ด๊ฒ๋ค๋ Heap ๋ฉ๋ชจ๋ฆฌ์ ์ถ๊ฐ๊ฐ๋๊ณ ํด๋น ๋ณ์๊ฐ ๊ทธ๊ฑธ ์ฐธ์กฐํจ(์ฐธ์กฐ๋ณ์)
static๋ฉ์๋ ์ธ์คํด์ค๋ฅผ ๋ฐ๋ก ์์ฑํ์ง ์๊ณ ๋ ์คํํ ์์์.
main๋ฉ์๋์์ ์๋ ๋ฉ์๋๋ค์ด ์คํ๋๋ฉด Java Stack์ ์คํ ์ํธ๋ฆฌ๊ฐ ํ๋ ๋ ์ถ๊ฐ๋จ.
๊ทธ ๋ฉ์๋์์ ๋ณ์๊ฐ ์์ผ๋ฉด ์ด๊ฑธ '์ง์ญ๋ณ์'๋ผ๊ณ ํ๊ณ , ์ด๊ฑด ํด๋น ๋ฉ์๋๊ฐ ์ข ๋ฃ๋๋ฉด ์ฌ๋ผ์ง.
๋์ค์ ์ค๋ ๋๋ ๊ฐ๋ ์ด ๋์ค๋๋ฐ ๊ฐ์ ๋ฉ์๋๋ผ๋ ๋์์ ์ฌ๋ฌ๋ฒ ํธ์ถ ๋ฐ์ ์ ์๋๋ฐ,
์ด๊ฒฝ์ฐ์๋ ๋ฉ์๋ ์์์ ์ ์ธ๋ ๋ณ์๋ค์ ๊ฐ๊ฐ ๋ค๋ฅธ ์์ญ์ ์ ์ฅ์ด ๋์๋ค ํด๋น ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ๋ ๊ฐ์ด์ฌ๋ผ์ง.
๋ง์ง๋ง์ผ๋ก Java Stack ์ FILO ์๋ฃ๊ตฌ์กฐ ํํ์ฌ์ ๋จผ์ ๋ค์ด๊ฐ๊ฒ ๋ง์ง๋ง์ ๋์ด.
์ฆ, main๋ฉ์๋๊ฐ ์ ์ผ ๋จผ์ ๋ค์ด๊ฐ์ผ๋ ์ ์ผ ๋์ค์ ๋์ฌ๊บผ๊ณ ,
๊ทธ ์์ ์๋ ๋ฉ์๋๊ฐ ๋จผ์ Java Stack์์ ์ ๊ฑฐ๋๊ณ ๋ง์ง๋ง์ main๋ฉ์๋๊ฐ ์ ๊ฑฐ๋๋ฉด์ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋จ
๋ฉ์๋ ์์ ์ ์ธ๋ ์ง์ญ๋ณ์๋ ๋ฉ์๋๊ฐ ์คํ๋ ๋ ์์ฑ๋์๋ค๊ฐ ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ๋ ์ฌ๋ผ์ง๋ค.
๋์์ ๋ฉ์๋๊ฐ ํธ์ถ๋์ด๋ ๋ฌธ์ ๊ฐ ์๋ค.
ํด๋์ค ๋ฉ์๋ ๋ง๋ค๊ธฐ, private ์์ฑ์
static์ด ๋ถ์ ํ๋์ ๋ฉ์๋๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ํ์๊ฐ ์๋ค. (์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์๊ธฐ ๋๋ฌธ)
์ด๋, ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ๋ค.
์์ฑ์์ ์ ๊ทผ ์ ํ์๋ฅผ private๋ก ์ค์ ํ๋ฉด ์ธ๋ถ์์๋ ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.
ex) Math ํด๋์ค๋ private์ผ๋ก ์์ฑ๋์๋ค.
์์ฑ์๋ ๋ฉ์๋์ ๋ฌ๋ฆฌ ๋ฆฌํด ํ์ ์ด ์๋ค.
์์ฑ์๋ช ์ ํด๋์ค ์ด๋ฆ๊ณผ ๋๊ฐ์์ผ ํ๋ค. ๋ฉ์๋์ฒ๋ผ ์์๋ก ์์ฑํ ์ ์๋ค.
์์ฑ์๊ฐ ์์ ๊ฒฝ์ฐ ์ปดํ์ผํ ๋ ์๋์ผ๋ก ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ฑ๋๋ค.
์ฐธ๊ณ
public ์ ๊ทผ ์ ํ: public ์ ๊ทผ ์ ํ์ ๋ชจ๋ ํจํค์ง์์ ์๋ฌด๋ฐ ์ ํ ์์ด ์์ฑ์๋ฅผ ํธ์ถํ ์ ์๋๋ก ํฉ๋๋ค.
protected ์ ๊ทผ ์ ํ: protected ์ ๊ทผ ์ ํ์ default ์ ๊ทผ ์ ํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ ํจํค์ง์ ์ํ๋ ํด๋์ค์์ ์์ฑ์๋ฅผ ํธ์ถํ ์ ์๋๋ก ํฉ๋๋ค. ์ฐจ์ด์ ์ผ๋ก ๋ค๋ฅธ ํจํค์ง์ ์ํ ํด๋์ค๊ฐ ํด๋น ํด๋์ค์ ์์(child) ํด๋์ค๋ผ๋ฉด ์์ฑ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
default ์ ๊ทผ ์ ํ: default ์ ๊ทผ ์ ํ์ ๊ฐ์ ํจํค์ง์์๋ ์๋ฌด๋ฐ ์ ํ ์์ด ์์ฑ์๋ฅผ ํธ์ถํ ์ ์์ผ๋, ๋ค๋ฅธ ํจํค์ง์์๋ ์์ฑ์๋ฅผ ํธ์ถํ ์ ์๋๋ก ํฉ๋๋ค.
private ์ ๊ทผ ์ ํ: private ์ ๊ทผ ์ ํ์ ๋์ผํ ํจํค์ง์ด๊ฑด ๋ค๋ฅธ ํจํค์ง์ด๊ฑด ์๊ด์์ด ์์ฑ์๋ฅผ ํธ์ถํ์ง ๋ชปํ๋๋ก ์ ํํฉ๋๋ค. ์ค๋ก์ง ํด๋์ค ๋ด๋ถ์์๋ง ์์ฑ์๋ฅผ ํธ์ถํ ์ ์๊ณ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
'๐ผ๋ฐฑ์ค๋ > Java ๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ฐ์ฒด ์งํฅ ๋ฌธ๋ฒ 3/3 (0) | 2023.08.21 |
---|---|
๊ฐ์ฒด ์งํฅ ๋ฌธ๋ฒ 2/3 (0) | 2023.08.20 |
์๋ฐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ (0) | 2023.08.20 |
05_02 ArrayLoop (0) | 2023.07.05 |
05_01 Array (0) | 2023.07.05 |