๋ชฉ์ฐจ
1. super์ ๊ฐ๋
2. super()์ ๊ฐ๋ - (์กฐ์ ํด๋์ค ์์ฑ์)
1. super์ ๊ฐ๋
super๋ ์์ ํด๋์ค์์ ์กฐ์ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ๋ฉค๋ฒ๋ฅผ ์ฐธ์กฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฐธ์กฐ ๋ณ์์ ๋๋ค. ๋ฉค๋ฒ ๋ณ์์ ์ง์ญ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ ๋ this๋ฅผ ๋ถ์ฌ์ ๊ตฌ๋ณํ๋ฏ์ด ์์๋ฐ์ ๋ฉค๋ฒ์ ์์ ์ ๋ฉค๋ฒ์ ์ด๋ฆ์ด ๊ฐ์ ๋๋ super๋ฅผ ๋ถ์ฌ์ ๊ตฌ๋ณํ ์ ์์ต๋๋ค.
์กฐ์ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ๋ฉค๋ฒ๋ ์์ ํด๋์ค ์์ ์ ๋ฉค๋ฒ์ด๋ฏ๋ก super๋์ this๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. (๊ทธ๋๋ ์กฐ์ ํด๋์ค์ ๋ฉค๋ฒ์ ์์ ํด๋์ค์ ๋ฉค๋ฒ๊ฐ ์ค๋ณต ์ ์๋์ด ์๋ก ๊ตฌ๋ณํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ง super๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.)
์กฐ์์ ๋ฉค๋ฒ์ ์์ ์ ๋ฉค๋ฒ๋ฅผ ๊ตฌ๋ณํ๋ ๋ฐ ์ฌ์ฉ๋๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ super์ this๋ ๊ทผ๋ณต์ ์ผ๋ก ๊ฐ์ต๋๋ค. ๋ชจ๋ ์ธ์คํด์ค ๋ฉ์๋์๋ ์์ ์ด ์ํ ์ธ์คํด์ค์ ์ฃผ์๊ฐ ์ง์ญ๋ณ์๋ก ์ ์ฅ๋๋๋ฐ, ์ด๊ฒ์ด ์ฐธ์กฐ ๋ณ์์ธ this์ super์ ๊ฐ์ด ๋ฉ๋๋ค.
static๋ฉ์๋(class ๋ฉ์๋)๋ ์ธ์คํด์ค์ ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค. ๊ทธ๋์ this์ ๋ง์ฐฌ๊ฐ์ง๋ก super ์ญ์ static๋ฉ์๋์์๋ ์ฌ์ฉํ ์ ์๊ณ ์ธ์คํด์ค ๋ฉ์๋์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.์๋ ์์ ์ฝ๋๋ฅผ ํตํด ํ๋ฒ ๋ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
class SuperTest {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent {
int x=10;
}
class Child extends Parent {
void method() {
System.out.println("x=" + x);
System.out.println("this.x=" + this.x);
System.out.println("super.x="+ super.x);
}
}
ํ์ฌ ์ ์ฝ๋์ ๊ฒฝ์ฐ x, this.x, super.x ๋ชจ๋ ๊ฐ์ ๋ณ์๋ฅผ ์๋ฏธํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ ๊ฐ์ ๊ฐ์ด ์ถ๋ ฅ๋์์ต๋๋ค.
class SuperTest2 {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent {
int x=10;
}
class Child extends Parent {
int x=20;
void method() {
System.out.println("x=" + x);
System.out.println("this.x=" + this.x);
System.out.println("super.x="+ super.x);
}
}
์ด๋ฒ ์ฝ๋์์๋ ์ด์ ๊ณผ ๋ฌ๋ฆฌ ๊ฐ์ ์ด๋ฆ์ ๋ฉค๋ฒ ๋ณ์๊ฐ ์กฐ์ ํด๋์ค์ธ Parent์๋ ์๊ณ , ์์ ํด๋์ค์ธ Childํด๋์ค์๋ ์์ต๋๋ค. ์ด๋ด ๋์๋ super.x์ this.x๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ ์ฐธ์กฐํ๊ฒ ๋ฉ๋๋ค. super.x๋ ์กฐ์ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ๋ฉค๋ฒ ๋ณ์ x๋ฅผ ๋ปํ๋ฉฐ, this.x๋ ์์ ํด๋์ค์ ์ ์ธ๋ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๋ปํฉ๋๋ค.
์ด์ฒ๋ผ ์กฐ์ ํด๋์ค์ ์ ์ธ๋ ๋ฉค๋ฒ ๋ณ์์ ๊ฐ์ ์ด๋ฆ์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ์์ ํด๋์ค์์ ์ค๋ณตํด์ ์ ์ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ฉฐ ์ฐธ์กฐ ๋ณ์ super๋ฅผ ์ด์ฉํด์ ์๋ก ๊ตฌ๋ณํ ์ ์์ต๋๋ค.
๋ณ์๋ง์ด ์๋๋ผ ๋ฉ์๋ ์ญ์ super๋ฅผ ์จ์ ํธ์ถํ ์ ์์ต๋๋ค. ํนํ ์กฐ์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉํ ๊ฒฝ์ฐ์ ์๋ ์ฝ๋์ฒ๋ผ super.๋ฉ์๋()๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถ์ด ๊ฐ๋ฅํฉ๋๋ค.
class Point {
int x;
int y;
String getLocation() {
return "x :" + x + ", y: " + y;
}
}
class Point3D extends Point {
int z;
String getLocation() { // ์ค๋ฒ๋ผ์ด๋ฉ
return super.getLocation() + ", z: " + z; //์กฐ์์ ๋ฉ์๋ ํธ์ถ
}
}
2. super()์ ๊ฐ๋ - (์กฐ์ ํด๋์ค ์์ฑ์)
this()์ ๋ง์ฐฌ๊ฐ์ง๋ก super() ์ญ์ ์์ฑ์์ ๋๋ค. this()๋ ๊ฐ์ ํด๋์ค์ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง, super()๋ ์กฐ์ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด, ์์์ ๋ฉค๋ฒ์ ์กฐ์์ ๋ฉค๋ฒ๊ฐ ๋ชจ๋ ํฉ์ณ์ง ํ๋์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ฉ๋๋ค. ๊ทธ๋์ ์์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์กฐ์ ํด๋์ค์ ๋ฉค๋ฒ๋ค์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋๋ค. ์ด๋ ์กฐ์ ํด๋์ค ๋ฉค๋ฒ์ ์ด๊ธฐํ ์์ ์ด ์ํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์์ ํด๋์ค์ ์์ฑ์์์ ์กฐ์ ํด๋์ค์ ์์ฑ์๊ฐ ํธ์ถ๋์ด์ผ ํฉ๋๋ค.
์์ฑ์์ ์ฒซ ์ค์์ ์กฐ์ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํด์ผ ํ๋ ์ด์ ๋ ์์ ํด๋์ค์ ๋ฉค๋ฒ๊ฐ ์กฐ์ ํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ ์๋ ์์ผ๋ฏ๋ก ์กฐ์์ ๋ฉค๋ฒ๋ค์ด ๋จผ์ ์ด๊ธฐํ๋์ด ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด์ ๊ฐ์ ์กฐ์ ํด๋์ค ์์ฑ์์ ํธ์ถ์ ํด๋์ค์ ์์๊ด๊ณ๋ฅผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉด์ ๊ณ์ ๋ฐ๋ณต๋ฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ชจ๋ ํด๋์ค์ ์ต๊ณ ์กฐ์์ธ Objectํด๋์ค์ ์์ฑ์์ธ Object()๊น์ง ๊ฐ์์ผ ๋์ด ๋ฉ๋๋ค.
Objectํด๋์ค๋ฅผ ์ ์ธํ ๋ชจ๋ ํด๋์ค์ ์์ฑ์๋ ์ฒซ ์ค์ ๋ฐ๋์ ์์ ์ ๋ค๋ฅธ ์์ฑ์ ๋๋ ์กฐ์์ ์์ฑ์๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค.
๋ง์ฝ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ถ๊ฐํ์ง ์๋๋ค๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ์์ฑ์์ ์ฒซ ์ค์ 'super();'๋ฅผ ์ถ๊ฐํฉ๋๋ค.
import java.util.ArrayList;
class Test {
public static void main(String[] args) {
Point3D point3D = new Point3D(1, 2, 3);
System.out.println(point3D.toString());
}
}
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
String getLocation() {
return "x: " + x + ", y: " + y;
}
}
class Point3D extends Point {
int z;
Point3D(int x, int y, int z) {
// ์์ฑ์ ์ฒซ์ค์์ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ์ง ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ๊ฐ super();๋ฅผ ์ฌ๊ธฐ์ ์๋์ผ๋ก ์ถ๊ฐํ๋ค.
this.x = x;
this.y = y;
this.z = z;
}
}
์ ์ฝ๋๊ฐ ์ ๋๋ก ์ปดํ์ผ์ด ์งํ๋ ๊น์? ๊ฒฐ๋ก ์ ๋จผ์ ๋ง์๋๋ฆฌ์๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. Point3D ํด๋์ค์ ์์ฑ์์ ์ฒซ ์ค์ด ์์ฑ์(์กฐ์์ ๊ฒ์ด๋ ์์ ์ ๊ฒ์ด๋ )๋ฅผ ํธ์ถํ๋ ๋ฌธ์ฅ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฝ๋์ ์ฃผ์ ๋ถ๋ถ์ ์๋์ผ๋ก super();๋ฅผ ์ถ๊ฐํด์ฃผ๊ฒ ๋ฉ๋๋ค.
Point3D(int x, int y, int z) {
super();
this.x = x;
this.y = y;
this.z = z;
}
๊ทธ๋์ Point3Dํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด, ์์ฑ์ Point3D(int x, int y, int z)๊ฐ ํธ์ถ๋๋ฉด์ ์ฒซ ๋ฌธ์ฅ์ธ super();๋ฅผ ์ํํ๊ฒ ๋ฉ๋๋ค. super()๋ Point3Dํด๋์ค์ ์กฐ์์ธ Pointํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์์ธ Point()์ ๊ฐ์ ์๋ฏธ์ ๋๋ค. ํ์ง๋ง Point() ํด๋์ค์ ์์ฑ์ Point()๊ฐ ์ ์๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ์์ฑํด์ผ ์ ์์ ์ผ๋ก ์๋ํ๊ฒ ๋ฉ๋๋ค.
Point3D(int x, int y, int z) {
super(x, y);
this.x = x;
this.y = y;
this.z = z;
}
์กฐ์ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๋ ์ด์ฒ๋ผ ์กฐ์์ ์์ฑ์์ ์ํด ์ด๊ธฐํ๋๋๋ก ํด์ผ ํ๋ ๊ฒ์ ๋๋ค.
'BackEnd๐ฑ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ArrayList vs LinkedList (0) | 2022.04.06 |
---|---|
[Java] String ํด๋์ค (0) | 2022.04.05 |
[Java] ์ธํฐํ์ด์ค(interface) ์ด ์ ๋ฆฌ (0) | 2022.03.30 |
[Java] static ๊ณผ instance์ ์ฐจ์ด (0) | 2022.03.21 |
[Java] JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ์์์ ์์ญ์ ๊ดํ ๊ณ ์ฐฐ (0) | 2022.03.18 |
[Java] ์ด๋ฆ ๋ถ์ ๋ฐ๋ณต๋ฌธ(Labeled-Loop) (0) | 2022.03.13 |
๋๊ธ