Post

[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()); // ์ž์‹ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ถ€๋ชจ ๋ณ€์ˆ˜ ๋ฐ˜ํ™˜
    }
}

Desktop View

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๋กœ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์ž.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.