

์์ฑ์์์ this()์ super()์ ์ญํ ๊ณผ ๊ท์น์ ์ฝ๊ฒ ์ดํดํ๊ธฐ
Java์์ ์์ฑ์๋ฅผ ์ฌ์ฉํ ๋ ์ฒซ ์ค์ this() ๋๋ super()๋ฅผ ๊ผญ ์จ์ผ ํ๋ฉฐ,
๋ ๋ค ๋์์ ์ธ ์ ์๋ ์ด์ ๋ฅผ ์ดํดํ๋ ค๋ฉด,
์์ฑ์์ ์ญํ ๊ณผ ํด๋์ค์ ๊ตฌ์กฐ๋ฅผ ์ดํดํด์ผ ํ๋ค.
1. ์์ฑ์์ ์ญํ
์์ฑ์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํ์ํ ์ด๊ธฐํ ์์ ์ ์ํํ๋ค.
1.1 ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์ ํธ์ถ (super())
ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์๋ฐ๋ ๊ฒฝ์ฐ, ์์ ํด๋์ค๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ ์ ๋ถ๋ชจ ํด๋์ค์ ์ด๊ธฐํ ์์ ์ด ๋จผ์ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
• ์๋ฅผ ๋ค์ด, ์ฌ๋์ด ํ์ด๋ ๋ ์ ์ ์ ๋ณด๋ฅผ ๋ถ๋ชจ๋ก๋ถํฐ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๋ถ๋ชจ๊ฐ ์ด๊ธฐํ๋์ง ์์ผ๋ฉด ์์ ํด๋์ค๋ ์ ๋๋ก ๋์ํ ์ ์๋ค.
๊ทธ๋์ Java๋ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๋ super()๋ฅผ ๊ฐ์ ํ๋ค.
1.2 ์์ ์ ๋ค๋ฅธ ์์ฑ์ ํธ์ถ (this())
ํด๋์ค ๋ด๋ถ์ ์ฌ๋ฌ ์์ฑ์๊ฐ ์์ ๋, ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ ค๊ณ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ ์ ์๋ค.
• ์๋ฅผ ๋ค์ด, ๊ฐ์ ํด๋์ค ์์์ ์กฐ๊ธ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ค๊ณ ํ ๋, this()๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ ์ค๋ณต์ ์ค์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค.
2. ์ฒซ ์ค์ this() ๋๋ super()๋ฅผ ์ ์ด์ผ ํ๋ ์ด์
Java๋ “๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ๋ถ๋ชจ ํด๋์ค๋ถํฐ ์ ๋๋ก ์ด๊ธฐํ๋์ด์ผ ํ๋ค”๋ ์์น์ ๋ฐ๋ฅธ๋ค.
2.1 super()์ ์ญํ
์์ ๊ด๊ณ์์ ๋ถ๋ชจ ํด๋์ค์ ์ด๊ธฐํ๊ฐ ์๋ฃ๋์ง ์์ผ๋ฉด, ์์ ํด๋์ค๋ ์ ๋๋ก ๋์ํ ์ ์๋ค.
๊ทธ๋์ super()๊ฐ ์์ฑ์์ ์ฒซ ์ค์ ์์ผ๋ฉด, ์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ์๋์ผ๋ก ํธ์ถํ๋ค.
• ์์:
class Parent {
Parent() {
System.out.println("Parent ์์ฑ์ ํธ์ถ!");
}
}
class Child extends Parent {
Child() {
// ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก super() ์ฝ์
!
System.out.println("Child ์์ฑ์ ํธ์ถ!");
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
Parent ์์ฑ์ ํธ์ถ!
Child ์์ฑ์ ํธ์ถ!
2.2 this()์ ์ญํ
๋ง์ฝ ๊ฐ์ ํด๋์ค ๋ด์์ ๋น์ทํ ์ด๊ธฐํ ์์ ์ด ํ์ํ๋ค๋ฉด, ์์ ์ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ์ฌ ์ฝ๋ ์ค๋ณต์ ์ค์ผ ์ ์๋ค.
• ์์:
class MyClass {
MyClass() {
this(100); // ๋ค๋ฅธ ์์ฑ์ ํธ์ถ
System.out.println("๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ!");
}
MyClass(int value) {
System.out.println("๊ฐ์ ๊ฐ์ง ์์ฑ์ ํธ์ถ! value = " + value);
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ:
๊ฐ์ ๊ฐ์ง ์์ฑ์ ํธ์ถ! value = 100
๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ!
3. this()์ super()๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์๋ ์ด์
Java๋ ์์ฑ์์์ ์ด๊ธฐํ ์์ ์ด ๋ช ํํ๊ฒ ํ๋์ ๊ฒฝ๋ก๋ง ์์ด์ผ ํ๋ค๋ ๊ท์น์ ๋ฐ๋ฅธ๋ค.
• this()๋ ์๊ธฐ ์์ ์ ๋ค๋ฅธ ์์ฑ์ ํธ์ถ์ด๊ณ , super()๋ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์ ํธ์ถ์ด๊ธฐ ๋๋ฌธ์ ๋ ๋ค ๋์์ ์ฌ์ฉํ ์ ์๋ค.
• ์์ฑ์์ ์ฒซ ์ค์์:
1. this()๊ฐ ์์ผ๋ฉด ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ ํ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ ๊ฒฐ๊ตญ ๊ทธ ๋ค๋ฅธ ์์ฑ์์์ ํธ์ถํ๋ค.
2. super()๊ฐ ์์ผ๋ฉด ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๋ฉฐ, ์๊ธฐ ํด๋์ค์ ๋ค๋ฅธ ์์ฑ์๋ ํธ์ถํ์ง ์๋๋ค.
• ์ถฉ๋ ์ด์ :
• this()์ super() ๋ ๋ค ์ฒซ ์ค์ ์์ด์ผ ํ๋ฏ๋ก ๋ ์ค ํ๋๋ง ์ ํํ ์ ์๋ค.
• ๋ ๋ค ๋์์ ์ฌ์ฉํ๋ฉด, Java๊ฐ ์ด๋ ๊ฒฝ๋ก๋ฅผ ๋จผ์ ์ด๊ธฐํํด์ผ ํ๋์ง ๋ชจํธํด์ง๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์์ฑ์ ํธ์ถ ์์๋
์ง์ ์ง์ ๋, ๋ถ๋ชจ ํด๋์ค๋ “๊ธฐ์ด ๊ณต์ฌ”,
์์ ํด๋์ค๋ “์ง ๋ด๋ถ ๊ณต์ฌ”๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
super()๋ ๋ถ๋ชจ ํด๋์ค๊ฐ ๊ธฐ์ด ๊ณต์ฌ๋ฅผ ๋จผ์ ํ๊ฒ ํ๋ ์ญํ ์ด๋ค.
this()๋ ๊ฐ์ ํด๋์ค ๋ด๋ถ์์ ๋น์ทํ ๊ณต์ฌ๋ฅผ ์ฌํ์ฉํ๊ฒ ๋ง๋๋ ์ญํ ์ด๋ค.
๊ธฐ์ด ๊ณต์ฌ(super())์ ๋ด๋ถ ๊ณต์ฌ ์ฌํ์ฉ(this())์ ๋์์ ์์ํ ์ ์์ผ๋, ํ๋์ฉ ์์๋๋ก ์งํํด์ผ ํ๋ค.
• ์์ฑ์์ ์ฒซ ์ค์ this() ๋๋ super()๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๊ฐ์ฒด ์ด๊ธฐํ ์์๋ฅผ ๋ช ํํ ํ๊ณ , ์์ ๊ตฌ์กฐ๋ฅผ ์์ ํ๊ฒ ์ ์งํ๊ธฐ ์ํจ์ด๋ค.
• this()์ super()๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์๋ ์ด์ ๋ ๋ ๋ค ์ฒซ ์ค์ ์์ด์ผ ํ๋ฏ๋ก, ์ด๊ธฐํ ๊ฒฝ๋ก๊ฐ ์ถฉ๋ํ๊ธฐ ๋๋ฌธ์ด๋ค.