ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java ๊ธฐ์ดˆ] 11. ์ƒ์†(Ingeritance)
    Dev/Java 2023. 3. 20. 13:05
    728x90

    ๐Ÿ‘€์œ ์šฉํ•œ ์ •๋ณด

    Java ๊ฐ€๋ณ€ ์ธ์ˆ˜

    public class Main {
        public void something(int... nums) {
            int i = nums[0];
        }
    }

    Eclipse ๋‹จ์ถ•ํ‚ค

    • Ctrl + D : ํ•œ ์ค„ ์ง€์šฐ๊ธฐ
    • Ctrl + Alt + โ†“ : ์ค„ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ

    ๐Ÿ’ก10์žฅ ํ”ผ๋“œ๋ฐฑ Tip

    ๐Ÿ’ก
    ํด๋ž˜์Šค ๋‚ด field์— ์ •์˜๋œ ๋ณ€์ˆ˜๋Š” private ์ •์˜ํ•œ ๋ฉ”์†Œ๋“œ๋Š” public


    ๐Ÿ“˜ 11์žฅ ์ƒ์† (Inheritance)

    ๐Ÿ’ก
    ์ด์ „์— ๋งŒ๋“  ํด๋ž˜์Šค์™€ ๋‹ฎ์•˜์ง€๋งŒ, ์ผ๋ถ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

    ์ƒ์†์„ ํ•˜๋Š” ์ด์œ 

    ๐Ÿ’ก
    ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ •์˜๋œ ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ด๋ฏธ ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์ƒˆ๋กœ์šด ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜(override)ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ƒ์†์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๊ณ , ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๊ณ„์ธต์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์‹ธ์šฐ๊ธฐ์™€ ๋„๋ง๋งŒ ๊ฐ€๋Šฅํ•œ Hero ํด๋ž˜์Šค

    fly(), land()๊ฐ€ ๊ฐ€๋Šฅํ•œ SuperHero ํด๋ž˜์Šค

    ์œ„ ์ฝ”๋“œ์˜ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ฌธ์ œ์ 

    • ์ถ”๊ฐ€, ์ˆ˜์ •์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ
    • ์†Œ์Šค์˜ ํŒŒ์•…์ด๋‚˜ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ ์ง„๋‹ค.
    ๐Ÿ’ก
    ์ƒ์†์„ ํ†ตํ•ด ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    Hero ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์€ SuperHero

    ๐Ÿ’ก
    SuperHero๋Š” Hero๋ฅผ ์ƒ์†(ํ™•์žฅ)ํ•จ์œผ๋กœ, ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ƒ์†๊ด€๊ณ„์˜ ํ‘œํ˜„ (ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ)

    Java์—์„œ ๋‹ค์ค‘์ƒ์† ๊ธˆ์ง€

    ๋‹ค์ค‘ ์ƒ์†์˜ ๋ฌธ์ œ์ 

    ๐Ÿ’ก
    ๋‹ค์ค‘ ์ƒ์†์ด๋ž€, ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†์„ ๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹ค์ค‘ ์ƒ์†์˜ ๋ฌธ์ œ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋‹ค์ด์•„๋ชฌ๋“œ ๋ฌธ์ œ(diamond problem)์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ์‚ฌ์šฉํ•  ๋•Œ, ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์„ ๊ฒฝ์šฐ, ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ• ์ง€ ๋ชจํ˜ธํ•ด์ง€๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ž˜์Šค A์™€ B๊ฐ€ ํด๋ž˜์Šค C๋ฅผ ์ƒ์†ํ•˜๊ณ , ํด๋ž˜์Šค D๊ฐ€ A์™€ B๋ฅผ ์ƒ์†ํ•˜๋Š” ๊ฒฝ์šฐ, ๋งŒ์•ฝ A์™€ B๊ฐ€ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด, D๋Š” ์ด๋ฅผ ์ƒ์†๋ฐ›๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    ๐Ÿ’ก
    ๋Œ€์‹  ์ธํ„ฐํŽ˜์ด์Šค(Interface)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ค‘ ์ƒ์†๊ณผ ์œ ์‚ฌํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ  ๋‹ค์ด์•„๋ชฌ๋“œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์˜ค๋ฒ„๋ผ์ด๋“œ (Override) - ์žฌ์ •์˜

    ๐Ÿ’ก
    ์ƒ์† ๋ฐ›์€ SuperHero์—์„œ run() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜(override) ํ–ˆ๋‹ค.

    ์ƒ์†, ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ธˆ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ• (final)

    ๐Ÿ’ก
    final class๋ฅผ ํ†ตํ•ด ์ƒ์†์„ ๊ธˆ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์†Œ๋“œ์— final ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด, ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ๊ธˆ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. String ํด๋ž˜์Šค๋Š” final๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ƒ์†์ด ๊ธˆ์ง€๋˜์–ด ์žˆ๋‹ค.

    super()

    ๐Ÿ’ก
    super()๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.
    ๐Ÿ’ก
    ์ž์‹ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, ์ž๋™์œผ๋กœ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๋Š”๋ฐ, ์ด๋•Œ super()๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค!
    class Parent {
        private int num;
    
        public Parent(int num) {
            this.num = num;
        }
    
        public int getNum() {
            return num;
        }
    }
    /////////////////////////////////////////////////////
    class Child extends Parent {
        private String name;
    
        public Child(int num, String name) {
            super(num); // Parent ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    }
    
    // ์‚ฌ์šฉ ์˜ˆ์‹œ
    Child child = new Child(10, "Alice");
    System.out.println(child.getNum()); // 10
    System.out.println(child.getName()); // "Alice"

    ์ƒ์†๊ณผ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์ˆœ์„œ

    ๐Ÿ’ก
    ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๋จผ์ € ์ƒ์„ฑ๋œ ์ดํ›„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

    ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์—†์„ ๋•Œ์˜ ์˜ค๋ฅ˜

    ๐Ÿ’ก
    ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋Š” ์Šˆํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

    ์˜ฌ๋ฐ”๋ฅธ ์ƒ์† ๋ฐฉ๋ฒ•

    ๐Ÿ’ก
    Is-a ์›์น™ ๋”ฐ๋ฅด๊ธฐ โ†’ SuperHero is a Hero (์Šˆํผํžˆ์–ด๋กœ๋Š” ํžˆ์–ด๋กœ์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค.)

    ์ž˜๋ชป๋œ ์ƒ์†

    ๐Ÿ’ก
    ๊ฐœ๋…์ ์œผ๋กœ Is-a ๊ด€๊ณ„๊ฐ€ ๋˜์ง€ ๋ชป ํ•จ์—๋„ ์ƒ์†์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์ž˜๋ชป๋œ ์ƒ์†์ด๋‹ค. - ํ˜„์‹ค์„ธ๊ณ„์™€ ๋ชจ์ˆœ ๋ฐœ์ƒ - ๋‹คํ˜•์„ฑ์„ ์ด์šฉ ๋ถˆ๊ฐ€
    1. ๋ณต์žก์„ฑ ์ฆ๊ฐ€: ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ๊ณผ ์ƒํƒœ๊ฐ€ ์ž์‹ ํด๋ž˜์Šค์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    1. ์˜์กด์„ฑ ์ฆ๊ฐ€: ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์— ๊ฐ•ํ•˜๊ฒŒ ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์ด ์ž์‹ ํด๋ž˜์Šค์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์„ฑ์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    1. ์œ ์—ฐ์„ฑ ๊ฐ์†Œ: ์ƒ์†์€ ํด๋ž˜์Šค์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ, ๊ณ„์ธต ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ํด๋ž˜์Šค์™€ ๋ถ€๋ชจ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ณ ์ •์‹œํ‚ค๋ฏ€๋กœ, ์œ ์—ฐ์„ฑ์ด ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    1. ํด๋ž˜์Šค ๋กœ๋”ฉ ๋ฌธ์ œ: ์ž๋ฐ”์—์„œ๋Š” ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ, ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๋จผ์ € ๋กœ๋”ฉ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๊ตฌ์ฒดํ™”์™€ ์ผ๋ฐ˜ํ™”์˜ ๊ด€๊ณ„

    ๐Ÿ’ก
    (Sub Class)์ž์‹ ํด๋ž˜์Šค์ผ ์ˆ˜๋ก ๋” ๊ตฌ์ฒดํ™”๋˜๊ณ , (Super Class)๋ถ€๋ชจ ํด๋ž˜์Šค์ผ ์ˆ˜๋ก ์ถ”์ƒ์ ์ธ ๊ฒƒ์œผ๋กœ ์ผ๋ฐ˜ํ™” ๋œ๋‹ค.

    11์žฅ ์ •๋ฆฌ

    ์ƒ์†์˜ ๊ธฐ์ดˆ

    • extends ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ดˆ๋กœ ํ•˜๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ •์˜ ๊ฐ€๋Šฅ (์ƒ์†)
    • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋Š” ์ž๋™์ ์œผ๋กœ ์ž์‹ ํด๋ž˜์Šค์— ์ƒ์† โ†’ ์ž์‹ ํด๋ž˜์Šค์—๋Š” ์ถ”๊ฐ€ ๋œ ๋ถ€๋ถ„๋งŒ ๊ธฐ์ˆ  ํ•˜๋ฉด ๋œ๋‹ค
    • ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ, ์ž์‹ ํด๋ž˜์Šค์—์„œ ์žฌ์ž‘์„ฑ ํ•  ๊ฒฝ์šฐ ์ด๊ฒƒ์„ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค
    • final ์„ ๋ถ™์ธ ํด๋ž˜์Šค๋Š” ์ƒ์†์ด ๋˜์ง€ ์•Š๊ณ , final ์ด ๋ถ™์€ ๋ฉ”์†Œ๋“œ๋Š” ์˜ค๋ฒ„๋ผ์ด๋“œ ๋˜์ง€ ์•Š๋Š”๋‹ค
    • ์˜ฌ๋ฐ”๋ฅธ ์ƒ์†์ด๋ž€ โ€œ์ž์‹ ํด๋ž˜์Šค is-a ๋ถ€๋ชจ ํด๋ž˜์Šค"
    • ์ƒ์†์—๋Š” โ€œ์ถ”์ƒ์ , ๊ตฌ์ฒด์ " ๊ด€๊ณ„์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ •์˜ํ•˜๋Š” ์—ญํ• ๋„ ์žˆ์Œ

    ์ธ์Šคํ„ด์Šค

    • ์ธ์Šคํ„ด์Šค๋Š” ๋‚ด๋ถ€์— ๋ถ€๋ชจํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๋Š” ๋‹ค์ค‘๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค
    • ๋ณด๋‹ค ์™ธ์ธก์˜ ์ธ์Šคํ„ด์Šค์— ์†ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค
    • ์™ธ์ธก์˜ ์ธ์Šคํ„ด์Šค์— ์†ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” super ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด์ธก ์ธ์Šคํ„ด์Šค์˜ ๋ฉค๋ฒ„์— ์ ๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค

    ์ƒ์„ฑ์ž ๋™์ž‘

    • ๋‹ค์ค‘๊ตฌ์กฐ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ, JVM ๋Š” ์ž๋™์ ์œผ๋กœ ๊ฐ€์žฅ ์™ธ์ธก ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ
    • ๋ชจ๋“  ์ƒ์„ฑ์ž๋Š”, โ€œ๋ถ€๋ชจ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ์ž"๋ฅผ ํ˜ธ์ถœ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค
    • ์ƒ์„ฑ์ž์˜ ์„ ๋‘์— super() ๊ฐ€ ์—†์œผ๋ฉด, ์•”๋ฌต์ ์ธ โ€œsuper();โ€ ๊ฐ€ ์ถ”๊ฐ€ ๋จ


    ๐Ÿ“์—ฐ์Šต ๋ฌธ์ œ

    11-1

    ๐Ÿ’ก
    2, 3, 5

    11-2

    ๐Ÿ’ก
    (1) ๋ถ€๋ชจ : ์ „์ž ๊ธฐ๊ธฐ, ์ž์‹ : ์•„์ดํฐ (2) ๋ถ€๋ชจ : ๊ตํ†ต ์ˆ˜๋‹จ, ์ž์‹ : ํ˜„๋Œ€์ฐจ (3) ๋ถ€๋ชจ : ์ฑ…, ์ž์‹ : ์˜์–ด ์‚ฌ์ „

    11-3

    • ๋… ๊ณต๊ฒฉ์˜ ๋‚จ์€ ํšŸ์ˆ˜๋Š” getter setter ์•ˆ ๋งŒ๋“ค์–ด๋„ ๋จ. (๋‚ด๋ถ€์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ)

    package Exam;
    
    public class Kinoko {
        int hp = 50;
        private char suffix;
        
        public Kinoko(char suffix) {
            this.suffix = suffix;
        }
    
        void attack(Hero hero) {
            System.out.println("ํ‚ค๋…ธ์ฝ” " + this.suffix + " ์˜ ๊ณต๊ฒฉ");
            System.out.println("10์˜ ๋ฐ๋ฏธ์ง€");
            hero.setHp(hero.getHp() - 10);
        }
    }
    package Exam;
    
    public class PoisonKinoko extends Kinoko{
        private int poisonCount;
        
        public PoisonKinoko(char suffix) {
            super(suffix);
            poisonCount = 5;
        }
        
        @Override
        void attack(Hero hero) {
            super.attack(hero);
            if(poisonCount != 0) {
                System.out.println("์ถ”๊ฐ€๋กœ, ๋… ํฌ์ž๋ฅผ ์‚ดํฌํ–ˆ๋‹ค!");
                int damage = (int) (hero.getHp() * 0.2);
                hero.setHp(hero.getHp() - damage);
                System.out.println(damage + "ํฌ์ธํŠธ์˜ ๋ฐ๋ฏธ์ง€");
                poisonCount--;
            } else {
                System.out.println("๋…์„ ์“ฐ์ง„ ๋ชปํ–ˆ๋‹ค.");
            }
        }
    }
    package Exam;
    
    public class Hero {
        private String name;
        private int hp;
    
        public Hero(String name, int hp) {
            this.name = name;
            this.hp = hp;
        }
    
        public int getHp() {
            return hp;
        }
    
        public void setHp(int hp) {
            this.hp = hp;
        }
        
        public String getName() {
            return name;
        }
    }
    package Exam;
    
    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Kinoko kinoko = new Kinoko('A');
            PoisonKinoko poisonKinoko = new PoisonKinoko('B');
            Hero hero = new Hero("์šฉ์‚ฌ1", 100);
            
            poisonKinoko.attack(hero);
            System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
            System.out.println("-------------------------------------------");
            poisonKinoko.attack(hero);
            System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
            System.out.println("-------------------------------------------");
            poisonKinoko.attack(hero);
            System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
            System.out.println("-------------------------------------------");
            poisonKinoko.attack(hero);
            System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
            System.out.println("-------------------------------------------");
            poisonKinoko.attack(hero);
            System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
            System.out.println("-------------------------------------------");
            poisonKinoko.attack(hero);
            System.out.println(hero.getName() + "์˜ HP: " + hero.getHp());
    
        }
    }


    ๐Ÿ’ก
    ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” ๊ด€๋ จ๋œ ์ฝ”๋“œ๋Š” ์ƒ์„ฑ์ž ์ฝ”๋“œ์— ์ ๋Š”๊ฒŒ ์ข‹๋‹ค!
    ๐Ÿ’ก
    ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด Java์˜ Annotation @override ๋ช…์‹œ๋ฅผ ์ž˜ํ•˜์ž!


    Uploaded by N2T

    728x90
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Keydi's Tistory