[Java] ์์
๐ ๋ค์ด๊ฐ๋ฉฐ
ํธ๋ํฐ์ 2G ํด๋ํฐ์์ 3G, 4G, ์ง๊ธ์ 5G๋ก ๋ฐ์ ํ๋ค. ์ธ๋๊ฐ ์ฌ๋ผ๊ฐ ๋๋ง๋ค ๊ธฐ์กด ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ๋๊ณ ์ ๊ธฐ๋ฅ์ ์น๋๋ค. ๋ง์ฝ ์ ์ธ๋๊ฐ ๋์ฌ ๋๋ง๋ค ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฒ์๋ถํฐ ๋ค์ ๋ง๋ค๋ผ๊ณ ํ๋ฉด ๊ฐ๋ฐ์๋ค์ด ํด์ฌํ ๊ฒ์ด๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฐ๋ ์ด ์์(inheritance)์ด๋ค.
์์์ด๋? ๊ธฐ์กด ํด๋์ค์ ํ๋๋ฅผ ์ ํด๋์ค๊ฐ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ๋ ๊ฒ. ๊ณตํต ํ๋๋ฅผ ๋ถ๋ชจ ํด๋์ค์ ๋ฌถ์ด๋๊ณ , ์์ ํด๋์ค๊ฐ ์ด์ด๋ฐ์ ๊ทธ ์์ ํนํ๋ ๊ธฐ๋ฅ์ ์น๋๋ค.
1. ์์ ๋ฌธ๋ฒ
1
2
3
4
5
6
7
class A {
// A ํ๋
}
class B extends A {
// A ํ๋ + B ํ๋
}
๋ถ๋ชจ ํด๋์ค A๋ฅผ ์์ ํด๋์ค B๊ฐ extends A๋ก ์์ํ๋ฉด, B ์์ A์ ํ๋๊ฐ ๊ณ ์ค๋ํ ๋ค์ด๊ฐ๋ค. ๋ถ๋ชจยท์์์ ์ฌ๋ฌ ์ด๋ฆ์ผ๋ก ๋ถ๋ฆฐ๋ค.
| ํด๋์ค | ๋ค๋ฅธ ์ด๋ฆ๋ค |
|---|---|
| A (๋ถ๋ชจ) | ์์ ํด๋์ค, ์ํผ ํด๋์ค, ๊ธฐ๋ฐ ํด๋์ค |
| B (์์) | ํ์ ํด๋์ค, ์๋ธ ํด๋์ค, ํ์ ํด๋์ค |
2. super() โ ๋ถ๋ชจ ์์ฑ์ ํธ์ถ
์์ ์์ฑ์๋ฅผ ํธ์ถํ๋ฉด ์์ ํ๋๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๊ฒ ๊ฐ์ง๋ง, ์ฌ์ค ์์ ์์ฑ์๋ ํญ์ ๋ถ๋ชจ ์์ฑ์๋ฅผ ๋จผ์ ํธ์ถํ๋ค. ๊ทธ๋์ ๋ถ๋ชจยท์์ ํ๋๊ฐ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ค. ์ด๋ ๋ถ๋ชจ ์์ฑ์๋ฅผ ๋ถ๋ฅด๋ ๊ฒ์ด
super()๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class A {
public A() {
System.out.println("๋ถ๋ชจ ์์ฑ์ ํธ์ถ");
}
int aData = 100;
void printAData() { System.out.println(aData); }
void printData() { System.out.println(aData); }
}
class B extends A {
public B() {
super(); // ์๋ต ๊ฐ๋ฅ (์๋ต ์ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ๋ฃ์ด์ค)
System.out.println("์์ ์์ฑ์ ํธ์ถ");
}
int bData = 10000;
int getAData() { return aData; } // ๋ถ๋ชจ ํ๋ ์ฌ์ฉ ๊ฐ๋ฅ
int getBData() { return bData; }
}
public class InheritanceTest {
public static void main(String[] args) {
B b = new B(); // ์์ ์์ฑ์๋ง ํธ์ถ
b.printData(); // ๋ถ๋ชจ ๋ฉ์๋ ์ฌ์ฉ
System.out.println(b.getAData()); // ์์ ๋ฉ์๋๊ฐ ๋ถ๋ชจ ๋ณ์ ๋ฐํ
}
}
1
2
new B() โโโบ super() ์๋ ํธ์ถ โโโบ "๋ถ๋ชจ ์์ฑ์ ํธ์ถ"
"์์ ์์ฑ์ ํธ์ถ"
์์ ์์ฑ์๋ง ์ผ๋๋ฐ ๋ถ๋ชจ ์์ฑ์๊น์ง ํธ์ถ๋๋ค. ๋ถ๋ชจ ํ๋๋ฅผ ์ฐ๋ ค๋ฉด ๋ถ๋ชจ ์์ฑ์๊ฐ ์คํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ ๊ฒฐ๊ณผ ์์ ๊ฐ์ฒด๋ก ๋ถ๋ชจ ๋ฉ์๋๋, ๋ถ๋ชจ ๋ณ์๋ ์ฌ์ฉํ ์ ์๋ค.
3. ์ค๋ฒ๋ผ์ด๋ฉ (์ฌ์ ์)
๋ถ๋ชจ์ ๋ฉ์๋๊ฐ ์์์๊ฒ ์ ์ด์ธ๋ฆด ๋, ์์์์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ค์ ์ ์ํ๋ ๊ฒ์ด ์ค๋ฒ๋ผ์ด๋ฉ์ด๋ค.
๋์ ์๋ฆฌ: ๋ถ๋ชจ ํ๋๊ฐ ๋จผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค. ์์์ด ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ฉด, ์๋ก ๋ง๋๋ ๊ฒ ์๋๋ผ ๊ธฐ์กด ๋ฉ์๋ ์ ์ฅ์์ ์ฃผ์๋ฅผ ์์ ์ฝ๋๋ก ๋ฎ์ด์ด๋ค. ๊ทธ๋์ ์์ ๊ฐ์ฒด๋ก ์ ๊ทผํ๋ฉด ์ฌ์ ์๋ ๋ด์ฉ์ด ์ฝํ๋ค.
์ฌ์ค ์ด๊ฑด ์ฐ๋ฆฌ๊ฐ ์๋ ๋์ ๊ณผ ๊ฐ์ ๊ฐ๋ ์ด๋ค.
1
2
int a = 100;
a = 200; // ์ดํ a๋ฅผ ์ถ๋ ฅํ๋ฉด? โ 200 (๋์ค ๊ฐ์ด ๋ฎ์ด์)
์ค๋ฒ๋ผ์ด๋ฉ๋ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ถ๋ชจยท์์์ ๊ฐ์ ์ด๋ฆ์ ํ๋๊ฐ ์์ผ๋ฉด ๋์ค์ ์์ ํ๋๊ฐ ์ฌ์ฉ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Car {
String brand, color;
int price;
public Car() {}
public Car(String brand, String color, int price) {
super();
this.brand = brand; this.color = color; this.price = price;
}
void engineStart() { System.out.println("์ด์ ๋ก ์๋ ์ผ๊ธฐ"); }
void engineStop() { System.out.println("์ด์ ๋ก ์๋ ๋๊ธฐ"); }
}
class SuperCar extends Car {
String mode;
@Override
void engineStart() { // ๋ถ๋ชจ ๋ฉ์๋ ์ฌ์ ์
System.out.println("์์ฑ์ผ๋ก ์๋ ํด");
}
void openRoof() { System.out.println("์ฌ๋ฃจํ ์ด๋ฆผ"); }
void closeRoof() { System.out.println("์ฌ๋ฃจํ ๋ซํ"); }
}
public class Road {
public static void main(String[] args) {
SuperCar ferrari = new SuperCar();
ferrari.engineStart(); // "์์ฑ์ผ๋ก ์๋ ํด" (์ฌ์ ์๋ ๊ฒ)
ferrari.openRoof();
}
}
์ํผ์นด๊ฐ ์ด์ ๋ก ์๋์ ์ผ๋ ๊ฑด ์ด์ธ๋ฆฌ์ง ์์ผ๋, engineStart()๋ฅผ โ์์ฑ์ผ๋ก ์๋ ํดโ์ผ๋ก ์ฌ์ ์ํ๋ค.
๐ก
@Override๋ โ์ด ๋ฉ์๋๋ ๋ถ๋ชจ ๊ฒ์ ์ฌ์ ์ํ๋คโ๋ ํ์๋ค. ์์๋ฐ๋ ํ์ํ ๋ฉ์๋๋ง ์ ํ์ ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค๋ ๊ฒ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋งค๋ ฅ์ด๋ค.
๐ ์ ๋ฆฌ
1
2
3
4
5
์์(inheritance)
โโ ๋ฌธ๋ฒ class ์์ extends ๋ถ๋ชจ โ ๋ถ๋ชจ ํ๋ ๋ฌผ๋ ค๋ฐ์
โโ super() ์์ ์์ฑ์๋ ๋ถ๋ชจ ์์ฑ์๋ฅผ ๋จผ์ ํธ์ถ (์๋ต ๊ฐ๋ฅ)
โโ ์ฌ์ฌ์ฉ ์์ ๊ฐ์ฒด๋ก ๋ถ๋ชจ ํ๋ยท๋ฉ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
โโ ์ค๋ฒ๋ผ์ด๋ฉ @Override๋ก ๋ถ๋ชจ ๋ฉ์๋๋ฅผ ์ ํ์ ์ผ๋ก ์ฌ์ ์
| ๊ฐ๋ | ํ ์ค ์ ์ |
|---|---|
| ์์ | ๋ถ๋ชจ์ ํ๋๋ฅผ ์์์ด ๋ฌผ๋ ค๋ฐ๋ ๊ฒ |
| super() | ๋ถ๋ชจ ์์ฑ์ ํธ์ถ (์๋ ์ฝ์ ๋จ) |
| ์ค๋ฒ๋ผ์ด๋ฉ | ๋ถ๋ชจ ๋ฉ์๋๋ฅผ ์์์์ ์ฌ์ ์ |
์์์ โ๊ณตํต์ ๋ถ๋ชจ์, ํนํ๋ ์์์โ๋ผ๋ ์ฌ์ฌ์ฉ์ ํต์ฌ ๋๊ตฌ๋ค. super()๋ก ๋ถ๋ชจ๊ฐ ํจ๊ป ์ด๊ธฐํ๋๋ค๋ ์ , ๊ทธ๋ฆฌ๊ณ @Override๋ก ํ์ํ ๋ถ๋ถ๋ง ๋ฐ๊ฟ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ์.

Comments powered by Disqus.