package com.test.oop;
//์ฌ๊ธฐ์ class AA ์์ ์๋ ๊ฒ์ ๋ค๋ฅธ class ์ ์ํฅ์ ์ค ์ ์์. ์บก์ ์์ ๋ค์ด์์ด. ์บก์ํ.
class AA {
int a = 1;
int b = 2;
void aa(){ //return ํ ๋ฐ์ดํฐ๊ฐ ์์ ๋ void ์ฐ๊ณ ๋ฐ๋ก method ์์ฑ.
System.out.println("a = " + a + " / b = " +b);
}
}
class BB {
private int a = 3; //์ด๋ฆ์ด ๊ฐ์๋ ๋ค๋ฅธ class ์ด๊ธฐ ๋๋ฌธ์ ๊ด์ฐฎ์.
int b = 4;
static final int q = 100; //final ์ ๋ถ์ด๋ฉด ๊ธฐ์กด ๋ฉค๋ฒ๋ณ์๊ฐ ์์๊ฐ ๋จ.
void bb(){
System.out.println("a = " + a + " / b = " + b);
}
public int getA(){ //์ด๋ ๊ฒ ํด์ private ์ธ a๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์. return ๋๋ ํ์
์ ๋ฉ์๋์ธ getA() ์์ ์ ์ด๋ฌ์ผ ํจ. void ๋ return ๋๋ ๊ฒ์ด ์์ด์ ์์ ์ ๊ฒ.
return this.a;
}
public void setA(int a){
this.a = a; //this.a๋ ํด๋์ค ๋ด์ ์ธ์คํด์ค ๋ณ์ a๋ฅผ ๊ฐ๋ฅดํด.
}
}
class CC{
static int c = 33; //class AA ์๋ ๋ฌ๋ฆฌ, static ์ ์์ ๋ถ์ด๋, ์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑ์ํค๋๋ผ๋ static type ์ผ๋ก ์ ์ ๋ ๋ฉค๋ฒ ๋ณ์๋ ์ฌ๋ฌ ์ธ์คํด์ค์์๋ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํจ.
int d = 60;
final int k = 4; //์์. ๊ณ ์ ๋ ๊ฐ์ผ๋ก ๋ค๋ฅธ ๋ฐ์์ k ๋ฅผ 5์ฒ๋ผ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ฐ๊ฟ ์ ์์.
void cc(){
System.out.println("C = "+c + d);
}
}
class DD{
static int d = 88;
static void dd(){ //static ์ method ์ธ void ์์ ์ ์ด์ฃผ๋ฉด, ์ด method ์ ์ฌ์ฉ๋๋ ๋ณ์๋ static ์ด ๋ถ์ด์ผ ํจ. ์๋๋ฉด static ์ด ๋จผ์ JVM ์ด ์ฝ๊ธฐ ๋๋ฌธ. ๊ทธ๋ผ static ์ผ๋ก ์๋ถ์ int ๋ ์์ฌ๋ผ๊ฐ๋๊น ๊ทธ static method ๊ฐ ์๋ผ.
System.out.println("d = "+d);
}
}
public class Exam01 { //์ฌ๋ฌ๊ฐ์ class ๊ฐ ์์ ๋, ํ์ผ๋ช
์ class ์์ public ์ด ๋ถ์ด์ผ ํจ.
public static void main(String[] args){ //main ์์ static ์ด ๋ถ์ด์ผ ํ๋ ์ด์ > JVM ์ด ์ฝ๊ธฐ ์์ํ ๋, static ์ด ๋ถ์ method ๋ค์ด main method ์ ๊ฐ์ด ๊ฐ์ฅ ๋จผ์ ์ฌ๋ผ์ด.
//static ์ด ๋ถ์ผ๋ฉด ์ค์ํ ์ ๋๊น main method ์ ๊ฐ์ด ํจ๊ป ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ ๋ค ๊ณ ์ ๋จ.
AA aa1 = new AA(); //์ธ์คํด์คํ : ํด๋์ค AA ๋ฅผ ์ค์ ์คํ์์ ์๋๋ ์ ์๋๋ก ํ๋ ๊ฒ. AA ํด๋์ค๋ฅผ aa1 ์ด๋ผ๋ ์ธ์คํด์ค๋ก ๋ง๋ค๋ผ๊ณ ์ํค๋๊ตฌ๋. ๋ง๋ค์ด์ผ ๊ฒ ๋ค?!
//ํ๋ก์ธ์ค๊ฐ ์๋์ ํ ๋, aa1์ด๋ผ๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ผ ๊ฒ ๊ตฌ๋, + AA() ๋ AA ํด๋ ์ค์ ํํ๋ฅผ ๊ฐ์ ธ์์ ์ด๋ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ aa1 ์ด๋ ์ด๋ฆ์ ๊ฐ์ง ์ธ์คํด์ค ๊ฐ์ฒด๋ฅผ ์์ฑ์ํด.
AA aa2 = new AA(); //๊ฐ์ ํด๋์ค์์ ์์ง๋ง, aa1๊ณผ ์ ํ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง. aa1๊ณผ ๊ด์ฌ ์์. ๋ณ๋๋ก ์๋.
//์ด๋ ๊ฒ ํ๋ ์ด์ ๊ฐ ๋ญ์ผ? ํ์
์ ์ํด. ์ฝ๋ ์ค๋ณต ์ต์ํ๋ฅผ ์ํด. ๊ณต๋๋ชจ๋. ์๋ฅผ ๋ค์ด ์ผํ๋ชฐ ๋ง๋ ๋ค๊ณ ํ ๋ ๊ฐ์๊ฑฐ ๊ณ์ ๋ฐ๋ณตํด์ผ ํ์์. ์ฝ๋ ์ค๋ณต ์์ฒญ๋์ง์์.
aa1.aa();
aa1.a = 10;
aa1.b = 20;
aa1.aa(); //์ฌ๊ธฐ์ a = 10, b = 20
aa2.aa(); //aa1 ๊ณผ ๊ฐ์ญ์ ๋ฐ์ง ์์์ ์๋๋๋ก, a=1, b=2
BB obj2 = new BB(); //์์ฑ์์ ์ํ ์ด๊ธฐํ , ์ฌ๊ธฐ์ ์์ฑ์๋ BB() ์ด๊ฑฐ์.
obj2.bb();
obj2.setA(1001);
//obj2.a ๋ ๊ฐ์ ธ์ฌ ์ ์์. a ๋ private ์ด๊ธฐ ๋๋ฌธ. ๊ฐ์ ธ์ค๋ ค๋ฉด getA() ๊ฐ์ ๋ฉ์๋๋ฅผ ์ง์ ๋ง๋ค์ด์ผ ํจ.
System.out.println(obj2.getA());
CC cc1 = new CC();
CC cc2 = new CC();
cc1.cc();
cc2.cc();
cc1.c = 44; // c๋ cc1 ๊ณผ cc2 ๋ชจ๋์ ๋ฐ๋. ์๋ํ๋ฉด static int ์ด๊ธฐ ๋๋ฌธ.
cc1.d = 50; // d๋ cc1 ์์๋ง ๋ฐ๋ ์ผ๋ฐ int ์ด๊ธฐ ๋๋ฌธ.
cc1.cc();
cc2.cc();
DD.dd(); //์ง๊ธ๊น์ง๋ ๊ผญ ์ธ์คํด์ค ๊ท์น์ ์ํด์ ์์์ ์ธ์คํด์คํ๋ฅผ ์์ผฐ์ด์ผ ํ์. ๊ทธ๋ฐ๋ฐ static method ๊ฐ ์๊ธฐ๋๊น ๊ทธ๋ฅ ์ ์ด๋ ์๋ฌ๊ฐ ์๋จ.
//method ์ static ๋ถ์ด๋ฉด ์ธ์คํด์ค ๊ฐ์ฒด๋ฅผ ์๋ง๋ค์ด๋ ๋จ.
}
}