๐ ์ฑ ์๊ฐํ๊ธฐ
๋ด๊ฐ ์ฌ์ฉํ ์๋ฐ์์ ์ ๋ณต ์ฑ
๋งํฌ!
ใด ๊น๋ํ ์ง์, ์ด์ง์คํผ๋ธ๋ฆฌ์ฑ
์ด ์ฑ ์ ๊ณ ๋ฅด๊ฒ ๋ ์ด์ ๋ ์น๊ตฌ์ ์ถ์ฒ์ด์๋ค. ๊ต์ฅํ ๊ผผ๊ผผํ๊ฒ ์ ํ์์ด ์ดํดํ๊ธฐ ์ฝ๋ค๋ ์ด์ ๋ก ์น๊ตฌ๋ ์ด ์ฑ ์ ๊ณจ๋๋ค๊ณ ํ๋ค. ๋๋ ๊ทธ๋์ ๊ทธ๋ฅ ๋ฐ๋ผ์๋ค. ์ค์ ๋ก ์ฑ ์ ์ดํด๋ณด๋ ๊ต์ฅํ ๊ผผ๊ผผํ๊ฒ ์ ๋ฆฌ๋์ด์๋ค. ๋ค๋ฅธ ์ฑ ์ ๋ณธ ์ ์ด ์์ด ๋น๊ต๊ฐ ๋ถ๊ฐํ์ง๋ง, ๋ด ์๊ฐ์ผ๋ก ์ฒ์ ์๋ฐ๋ฅผ ๊ณต๋ถํ๋ค๋ฉด ์ด ์ฑ ์ ๊ฐ์ง๊ณ ์ถฉ๋ถํ ๋ฐ๋ผ๊ฐ ์ ์์ ๋ฏ ํ๋ค. ๋ชจ๋๋ค ํ์ดํ !!
๐ฐ
โ๏ธ ํ๋์ ์ง์ญ๋ณ์ ์ด๋ฆ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ_ 253p
• ํ๋
: ํด๋์ค์ ํฌํจ๋ ๋ณ์
• ์ง์ญ๋ณ์
: ๋ฉ์๋์ ํฌํจ๋ ๋ณ์
Class A {
int m;
int n;
void init(int a, int b) {
int c;
c = 3;
m = a;
n = b;
}
}
ํด๋น ์ฝ๋๋ ํ๋์ ์ง์ญ๋ณ์์ ์ด๋ฆ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ์ด๋ค. ํ๋๋ ํด๋์ค๊ฐ ์์ํ๋ ๋งจ ์์ ์ ์๋ ๋ณ์์ธ๋ฐ, ์ฌ๊ธฐ์๋ m๊ณผ n์ ๋งํ๋ค. ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ a์ b๊ฐ ๋๋ค. ํ๋ผ๋ฏธํฐ๋ ์ง์ญ๋ณ์๋ค. a๋ m์ ์ฎ๊ธฐ๊ณ , b๋ n์ ์ฎ๊ธฐ๋ ๊ฒ์ด ๋ฉ์๋ init์ด ํด์ผํ ์ผ์ด๋ค. ์ด๋๋ ํ๋์ ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ m๊ณผ n ์์ this.๋ฅผ ๋ถ์ด์ง ์์๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ๋ฑ๋กํด์ค๋ค.
โ๏ธ ํ๋์ ์ง์ญ๋ณ์ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ_ 255p
Class A {
int m;
int n;
void init(int m, int n) {
m = m;
n = n;
}
}
public class pratice {
public static void main(String[] args) {
A a = new A();
a.init(3,4);
System.out.println(a.m);
System.out,println(a.n);
}
}
ํด๋น ์ฝ๋๋ ํ๋์ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ค. ์ธ์ 3๊ณผ 4๋ฅผ ๋ค๋ฅธ ํด๋์ค์์ ๋ฐ์์๋ค. ๊ฐ ๊ฐ์ init ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ m๊ณผ n์ ๋ค์ด์๊ฒ ๋๋ค. m๊ณผ n์ ํ๋์ ์ ์ฅํ๊ณ ์ถ์์ ๊ฒ์ด๋ค. ํ์ง๋ง ํ๋์ ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ์ด ๊ฐ์ ๋ฐ๋์ ํ๋ผ๋ฏธํฐm์ ํ๋ผ๋ฏธํฐ m์ ์ฎ๊ธฐ๊ณ ํ๋ผ๋ฏธํฐ n์ ํ๋ผ๋ฏธํฐ n์ ์ฎ๊ธฐ๊ฒ ๋๋ค. ๊ทธ๋์ ํด๋์ค ํ๋๊ฐ m๊ณผ n์ ์๋ฏธํ๋ a.m๊ณผ a.n์ ๊ฒฐ๊ตญ ์ถ๋ ฅํ๊ฒ ๋๋๋ผ๊ณ ๊ฐ์ด ๋์ค์ง ์๋๋ค.
โ๏ธ this๋ฅผ ์ฃผ๋ก ์ฐ๋ ๊ฒฝ์ฐ (์ฑ ์ ์์)
์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค
B b = new B();
A a = new A(b);
a.addDataToB("Hello World!");
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ํด๋์ค B๋ b๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ํด๋์ค A๋ a๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฐ๋ฐ ์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์๊ฒ ์ง๋ง, ํด๋์ A๋ ํด๋์ค B๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค. ๋ addDataToB ๋ฉ์๋๊ฐ ํด๋์ค B์ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด a๋ ๊ฐ์ฒด b๋ฅผ ์ธ์๋ก ์์ฑ์ A์๊ฒ ๋ณด๋ด์ผ ํ๋ค.
๋ง์ฝ ๊ทธ๋ ๊ฒ ๋ณด๋ด์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
Q. ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ธ์ b๋ก ๋ณด๋ด์ง ์๋๋ค๋ฉด?
A. ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ ์ด์ ๋ ๊ฐ์ฒด a๋ฅผ ์์ฑํ๊ธฐ ์ , ์ด๋ฏธ ๊ฐ์ฒด ์์ฑ์์ ํด๋์ค B๋ฅผ b๋ผ๊ณ ์ง์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ์ฝ๋๋ ์ผ๋ฐ์ ์ธ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ๋๊ฐ ์๋๋ค. ๋ค๋ฅธ ํด๋์ค๋ฅผ ํ๋๋ก ์ค์ ํ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ ํด๋์ค B๋ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผํ๊ณ , ํ์ B๋ฅผ ๊ฐ์ ธ์ผํ๊ธฐ ๋๋ฌธ์ ์ธ์ b๋ฅผ ๋ณด๋ด์ผํ๋ค.
// ๋ฐ์ดํฐ ์ ์ฅ์
public class B {
// ํ๋ data
private String data;
// ๋ฐ์ดํฐ ์ ์ฅํ๋ค.
public void saveData(String data) {
// ์ธ์๋ก ๋ฐ์ data๋ฅผ ํ๋๋ก ์ฎ๊ธด๋ค.
this.data = data;
}
// ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ธ๋ค.
public String getData() {
// ํ๋๋ก ๋ฆฌํดํ๋ค.
return this.data;
}
}
// ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ์์ ์ ์ฅํ๊ณ ๊ฐ์ ์ถ๋ ฅ
public class A {
// ํด๋์ค B๋ฅผ ํ๋๋ก ์ ์.
private final B b;
// ์์ฑ์ A๋ก ์ ์ฅ์ b์ ํ๋ ๊ฐ์ ์ธ์๋ก ๋ฐ๋๋ค.
// ์ธ์๋ก ๋ฐ์ ๊ฐ์ A ํด๋์ค ํ๋ b์ ์ ์ฅ
public A(B b) {
this.b = b;
}
// ํด๋์ค B์ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ฉ์๋.
public void addDataToB(String data) {
b.saveData(data);
}
// B์ ๋ฉ์๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ณด์ฌ์ฃผ๋ ๋ฉ์๋.
public void printDataFromB() {
System.out.println("A: ์ ์ฅ๋ ๋ฐ์ดํฐ -> " + b.getData());
}
}
์์ฑ์ A์๊ฒ ์ธ์๊ฐ ์ ๋์ฐฉํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ์์ฑ์๋ ํ๋๋ก ๋ณด๋ด ํด๋์ค B์๊ฒ B์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ฒ์์ ์๋ ค์ผํ๋ค. ์ฆ, ํ์ B๋ฅผ ๊ฐ์ง ํ๋๋ฅผ ์ด๊ธฐํํ๋ค๋ ์๋ฏธ์ด๋ค. ์์ฑ์์ ๋งค๊ฐ๋ณ์์ b๊ฐ ๋ค์ด์ค๊ณ this.b์๊ฒ ๊ฐ์ ๋๊ธธ ๊ฒ์ด๋ค. this.b๋ ํ๋์ b๋ฅผ ๋งํ๋ค. ๊ทธ๋์ ์ธ์๋ก ๋ฐ์ b๋ผ๋ ๊ฐ (ํด๋์ค B๋ฅผ ํ๊ณ ์๋)์ ํ๋๋ก ๋ณด๋ด์ง๊ฒ ๋๋ค.
์ฌ๊ธฐ์ ์ง๊ด์ ์ธ ์ดํด๊ฐ ์ ๊ฐ์ง ์์๋ค. ๊ทธ๋์ ๋๋ ํ๋๋ก ๊ฐ์ด ๊ฐ๋ค๋ ์๋ฏธ๋ฅผ, ํ์ B๋ฅผ ๊ฐ์ง b๊ฐ ์์ ๊ณผ ๋๊ฐ์ ํ์ ์ธ ํ๋๋ฅผ ๋ง๋ ์ผํ๋ผ๊ณ ํ๋ ์ณค๋ค๋ ์์ผ๋ก ๋ฐ์๋๋ฆฌ๊ธฐ๋ก ํ๋ค. ์๋ฌดํผ ๊ทธ๋ ๊ฒ ํ๋์ ๊ฐ์ b๋ก ์ด๊ธฐํ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ํด๋์ค B๊ฐ ๊ฐ์ง ๋ฉ์๋๋ฅผ ๋ง์๊ป ์ธ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
B b = new B();
A a = new A(b);
a.addDataToB("Hello World!");
๋ค์ ์ฒ์์ผ๋ก ๋์์ค๊ฒ ๋ค. a.addDataToB๋ ๊ฐ์ฒด a(ํด๋์ค A)๋ฅผ ํตํด addDataToB๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ํด๋น ๋ฉ์๋์ "Hello World!"๋ผ๋ ์ฌ๋ฃ๋ฅผ ๋ฃ๊ฒ ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๋ A a = new A(b);๋ฅผ ํตํด ํด๋์ค A์ ์๋ ๋ชจ๋ ๊ฒ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ค ์ค๋น์์ผ๋จ๋ค. ๊ทธ๋ฌ๋ ๋ฌธ์ ์์ด a.addDataToB๋ ๋์๊ฐ ๊ฒ์ด๋ค.
a.addDataToB๋ String ํ์ ์ด ์ค๋ฉด ์คํ๋๋๋ก ์ค์ ํ๋ค. "Hello World!"๋ String ํ์ ์ด๋ ๋ฌธ์ ๊ฐ ์๋ค. ์ ๋๋ก ๋ ์ฌ๋ฃ๊ฐ ๋ค์ด๊ฐ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ addDataToB๋ "Hello World!"๋ฅผ data๋ผ๋ ๊ฒ์ผ๋ก ํฌ์ฅํ์ฌ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ค.
b. saveData(data)๋ data ๊ฐ(Hello World!)์ ํด๋์ค B์ ์๋ saveData๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๋ก ๋ณด๋ผ ๊ฒ์ด๋ค.
// ๋ฐ์ดํฐ ์ ์ฅ์
public class B {
// ํ๋ data
private String data;
// ๋ฐ์ดํฐ ์ ์ฅํ๋ค.
public void saveData(String data) {
// ์ธ์๋ก ๋ฐ์ data๋ฅผ ํ๋๋ก ์ฎ๊ธด๋ค.
this.data = data;
}
// ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ธ๋ค.
public String getData() {
// ํ๋๋ก ๋ฆฌํดํ๋ค.
return this.data;
}
}
saveData๋ data๋ผ๋ ํฌ์ฅ์ผ๋ก ๊ฐ์ธ์ง Hello World๋ฅผ ๋ฐ์๋ค. ์ด data๋ ํ๋ data์ ๋ณด๋ด์ง๊ฒ ๋๊ณ ๋์ค์ ๋ค๋ฅธ ๋ฉ์๋๊ฐ data์ ์๋ ๊ฐ์ด ํ์ํด์ง๋ฉด ๊ฐ์ ธ๋ค ์ธ ๊ฒ์ด๋ค. (getData์ฒ๋ผ)
public class Car {
String color; // ์๋์ฐจ์ ์๊น
int speed; // ์๋์ฐจ์ ์๋
// ์์ฑ์ ์ ์
public Car(String color, int speed) {
this.color = color; // ํ๋ ์ด๊ธฐํ
this.speed = speed; // ํ๋ ์ด๊ธฐํ
}
}
public class Main {
public static void main(String[] args) {
// ์์ฑ์๋ฅผ ์ฌ์ฉํด ์ด๊ธฐ๊ฐ์ ์ค์
Car myCar = new Car("red", 100);
System.out.println("์๊น: " + myCar.color + ", ์๋: " + myCar.speed);
}
}
์์ ์ฝ๋๋ ํด๋์ค๋ฅผ ํ๋๋ก ๋ฐ๋ ๊ฒฝ์ฐ์๋ค. ์ด๋ฒ ์ฝ๋๋ ๋จ์ํ ์ฝ๋๋ก ์ด๋ค ๊ฐ์ ๋ฐ๋ ๊ฒ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ทธ ์์ ๋ ๊ฐ์ ๋ฃ์๋ค. ํ๋๋ String ํ์ ์ด๊ณ , ๋ค๋ฅธ ํ๋๋ int ํ์ ์ด๋ค. ๊ทธ๋ฌ๋ฉด Car ํด๋์ค๋ก ๊ฐ์, ๋ ํ์ ์ ๊ฐ์ง๊ณ ์๋ ์์ฑ์๋ฅผ ์ฐพ๋๋ค. ๋ง๋ ์์ฑ์๋ฅผ ์ฐพ์ ๊ฐ ๊ฐ์ ์ธ์๋ก ๋ฐ๊ณ , ๋ฐ์ ์ธ์๋ ํ๋๋ฅผ ์ด๊ธฐํํ์ฌ ์ ์ฅํ๋ค.
๋ค์ Mainํด๋์ค๋ก ๊ฐ๊ฒ ๋ค. myCar.color์ myCar.speed๋ฅผ ์ถ๋ ฅํ๊ณ ์ ํ๋ค. myCar๋ Car ํด๋์ค๋ฅผ ํ์ ์ผ๋ก ์ง์ ํ ๊ฐ์ฒด ์ด๋ฆ์ด๋ค. ๊ทธ๋ฌ๋ฉด Car ํด๋์ค์ ์๋ color๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํ๋ ๊ฐ๊ณผ speed๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํ๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. ์ฐ๋ฆฌ๋ ์์์ red์ 100์ด๋ผ๋ ๊ฐ์ ๋ณด๋ธ ์ ์ ์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ํ๋์ ์ด๊ธฐํ์์ผฐ๊ธฐ ๋๋ฌธ์ red์ 100์ด๋ผ๋ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
โ๏ธ this( ) (259p)
Class A {
int m1, m2, m3. m4;
A() {
m1 = 1;
m2 = 2;
m3 = 3;
m4 = 4;
}
A(int a) {
this();
m1 = a;
}
A(int a, int b){
this(a);
m2 = b;
}
}
this( )๋ฅผ ์ฐ๋ฉด ๋ฐ๋ก ์์ ์๋ ์์ฑ์๋ฅผ ๋ค๊ณ ์จ๋ค. A(int a)๋ ์์ฑ์ A๊ฐ int ํ์ ์ธ ์ธ์ ํ๋๋ฅผ ๋ฐ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
A(int a)๋ this( );๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋๊น, ๋ฐ๋ก ์์ ์๋ A( )์ ์๋ ๊ฐ์ ๋ฐ์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด m1๋ถํฐ m4๊น์ง ๋ฐ๋๋ฐ ๊ทธ ํ m1์ a ๊ฐ์ผ๋ก ์ฎ๊ฒจ ๋ด๊ฒ ๋ค๋ ์๋ฏธ๋ ์ต์ข ์ ์ผ๋ก m1์ ๊ฐ๋ง ๋ค๋ฅด๊ณ m2์์ m4๊น์ง A( )์ ๊ฐ์ด ๊ฐ์ ๊ฒ์ด๋ค.
A๋ int ํ์ ์ธ a์ b์ธ ๋๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํ๋ค. this(a)๋ ๋ฐ๋ก ์์ ์๋ ์์ฑ์ A(int a)๋ฅผ ์๋ฏธํ๋ค. A(int a)์์ a๋ m1์ ์ฎ๊ธธ ๊ฒ์ ๋ช ์ํ์ผ๋ m1์ ๋ฐ์์จ a ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ m2๋ b์ ๊ฐ์ผ๋ก ๋ฐ๋ ๊ฒ์ด๋ค.