โ this ํค์๋ ์๋ฏธ
์๋ฐ์์ this ํค์๋๋ ํ์ฌ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ๋ณ์์ ๋๋ค.
= this ํค์๋๋ ์๊ธฐ ์์ ์ ๊ฐ๋ฆฌํด.
= ์ธ์คํด์ค๊ฐ ์๊ธฐ ์์ ์ ์ฃผ์๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
์ฌ๊ธฐ์ "ํ์ฌ ๊ฐ์ฒด"๋ ํ์ฌ ๋ฉ์๋๊ฐ ํธ์ถ๋๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํฉ๋๋ค. ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค ๊ฐ ์ธ์คํด์ค๋ ๊ณ ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๋ฉฐ, ์ด๋ฅผ ๊ฐ์ฒด๋ผ๊ณ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๋ง๋ค ํด๋น ๋ฉ์๋๊ฐ ์ํ ๊ฐ์ฒด๋ฅผ ์ง์นญํ ์ ์์ด์ผ ํฉ๋๋ค.
โ this ํค์๋์ ์ฐ์
- ์ธ์คํด์ค ๋ณ์์ ๋ก์ปฌ ๋ณ์ ๊ตฌ๋ถ: ๋ฉ์๋ ๋ด์์ ์ธ์คํด์ค ๋ณ์์ ๋ก์ปฌ ๋ณ์์ ์ด๋ฆ์ด ์ถฉ๋ํ ๋, this๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค ๋ณ์์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ช ํํ๊ฒ ๋ณ์์ ๋ฒ์๋ฅผ ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
- ๋ค๋ฅธ ์์ฑ์ ํธ์ถ: ํ๋์ ์์ฑ์์์ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ ์์ฑ์ ๊ฐ ์ฝ๋์ ์ค๋ณต์ ๋ฐฉ์งํ๊ณ ์์ฑ์ ์ค๋ฒ๋ก๋ฉ์ ์ ์ฉํฉ๋๋ค.
- ์ธ์คํด์ค ๋ฉ์๋ ๋ด์์ ํ์ฌ ๊ฐ์ฒด ์ฐธ์กฐ: ์ธ์คํด์ค ๋ฉ์๋์์ ํ์ฌ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ์๋ ๋ด์์ ํด๋น ๊ฐ์ฒด์ ๋ค๋ฅธ ๋ฉ์๋๋ ๋ณ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์ต๋ช ํด๋์ค์์ ๋ฐ๊นฅ ํด๋์ค์ ์ธ์คํด์ค ์ฐธ์กฐ: ์ต๋ช ํด๋์ค ๋ด์์ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ ๋ this๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ์ ํนํ ์ ์ฉํฉ๋๋ค.
- ์ธ์คํด์ค ์์ฑ: this๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋ฐํํ๋ ์ธ์คํด์ค ์์ฑ ๋ฉ์๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
โ ์ฌ์ฉ ์์
1. ์ธ์คํด์ค ๋ณ์์ ๋ก์ปฌ ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ ๋: ๋ฉ์๋๋ ์์ฑ์ ๋ด์์ ์ธ์คํด์ค ๋ณ์์ ๋ก์ปฌ ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ, ์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด this ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
public class MyClass {
private int x;
public void setX(int x) {
this.x = x; // "this.x"๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ๊ฐ๋ฆฌํด
}
}
2. ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ ๋: ํ๋์ ์์ฑ์์์ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ ๋, ์์ฑ์ ํธ์ถ๋ฌธ์ ํด๋์ค์ ์ฒซ ์ค์ ์์นํด์ผ ํฉ๋๋ค. ์ด ๋ this()๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
public class MyClass {
private int x;
private int y;
public MyClass() {
this(0, 0); // ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํจ
}
public MyClass(int x, int y) {
this.x = x;
this.y = y;
}
}
3. ์ธ์คํด์ค ๋ฉ์๋ ๋ด์์ ํ์ฌ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋: ์ธ์คํด์ค ๋ฉ์๋ ๋ด์์ ํ์ฌ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋ this๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
public class MyClass {
private int x;
public void setX(int x) {
this.x = x;
}
public void printX() {
System.out.println("x์ ๊ฐ์ " + this.x + "์
๋๋ค.");
}
}
this๋ ํ์ฌ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก, ์ธ์คํด์ค ๋ฉ์๋ ๋ด์์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ this๋ฅผ ๋ช ์์ ์ผ๋ก ์ฌ์ฉํ์ง ์์๋ ๋ฉ๋๋ค. ํ์ง๋ง ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด this๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
public class MyClass {
private int x;
// ์์ฑ์
public MyClass(int x) {
this.x = x; // "this.x"๋ ํ์ฌ ๊ฐ์ฒด์ x ๋ณ์๋ฅผ ๊ฐ๋ฆฌํด
}
// ๋ฉ์๋: ํ์ฌ ๊ฐ์ฒด์ x ๊ฐ์ ๋ฐํ
public int getX() {
return this.x; // "this.x"๋ ํ์ฌ ๊ฐ์ฒด์ x ๋ณ์๋ฅผ ๊ฐ๋ฆฌํด
}
// ๋ฉ์๋: ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ํ์ฌ ๊ฐ์ฒด์ x ๊ฐ์ ์ถ๋ ฅ
public void printX() {
System.out.println("ํ์ฌ ๊ฐ์ฒด์ x ๊ฐ์ " + this.getX() + "์
๋๋ค.");
// "this.getX()"๋ ํ์ฌ ๊ฐ์ฒด์ getX() ๋ฉ์๋๋ฅผ ํธ์ถ
}
// ๋ฉ์๋: ํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐํ
public MyClass getThis() {
return this; // ํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐํ
}
public static void main(String[] args) {
MyClass obj1 = new MyClass(5);
MyClass obj2 = new MyClass(10);
System.out.println("obj1์ x ๊ฐ: " + obj1.getX());
obj1.printX();
System.out.println("obj2์ x ๊ฐ: " + obj2.getX());
obj2.printX();
MyClass obj3 = obj1.getThis(); // obj1์ ์ฐธ์กฐ๋ฅผ ๋ฐํ
System.out.println("obj3์ x ๊ฐ: " + obj3.getX());
// obj3๋ obj1๊ณผ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก obj1๊ณผ ๋์ผํ x ๊ฐ์ ๊ฐ์ง
}
}
์ด ์ฝ๋์์ this.x๋ ํ์ฌ ๊ฐ์ฒด์ ์ธ์คํด์ค ๋ณ์ x๋ฅผ ๊ฐ๋ฆฌํค๊ณ , this.getX()๋ ํ์ฌ ๊ฐ์ฒด์ getX() ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ๋ํ this๋ฅผ ์ฌ์ฉํ์ฌ getThis() ๋ฉ์๋์์ ํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ this ํค์๋๊ฐ ํ์ฌ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.