ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java ๊ธฐ์ดˆ] 13. ๋‹คํ˜•์„ฑ
    Dev/Java 2023. 3. 20. 13:13
    728x90

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

    Strack Overflow Trends

    • ์ž์ฃผ ํŠธ๋ Œ๋“œ ๊ทผํ™ฉ์„ ํ™•์ธํ•˜์ž

    Eclipse

    Extract Superclass

    ๐Ÿ’ก
    ์ž๋™์œผ๋กœ ์ƒ์† ๊ด€๊ณ„์™€ Super ํด๋ž˜์Šค๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

    Type Hierarchy

    • ํด๋ž˜์Šค๋ช…์—์„œ F4
    ๐Ÿ’ก
    ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๊ณ„์ธตํ™”๋œ ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ํด๋ž˜์Šค ๋น ๋ฅธ ์ด๋™

    • Ctrl + Shift + R

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

    ๐Ÿ’ก
    Java 8 ์ด์ƒ๋ถ€ํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ default ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. java์—์„œ mixin์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
    public interface Human{
    	default void hear() {
    	}
    }

    ๐Ÿ’ก
    ๋น„์–ด ์žˆ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ, ๋‹คํ˜•์„ฑ์„ ์œ„ํ•ด ๋น„์–ด์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ™์€ ํŠน์ง•๋“ค์„ ๊ฐ€์ง„ ํด๋ž˜์Šค๋“ค์„ ๋ฌถ๋Š” ๊ฒฝ์šฐ๋Š” ์žˆ๋‹ค.

    ๐Ÿ’ก
    ์ƒ์† ๊ด€๊ณ„์—์„œ super ํด๋ž˜์Šค์˜ ํ•„๋“œ ์†์„ฑ ๊ฐ’์„ protected๋กœ ์ •์˜ํ•œ๋‹ค๋ฉด, ํ•˜์œ„ sub ํด๋ž˜์Šค์—์„œ this ๋กœ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.


    ๐Ÿ“˜ 13์žฅ ๋‹คํ˜•์„ฑ (polymorphism)

    ๐Ÿ’ก
    ์–ด๋–ค ๊ฒƒ์„ ์ด๋ ‡๊ฒŒ๋„ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ์ €๋ ‡๊ฒŒ๋„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์„ธ๋ถ€์ ์ธ ๋ถ€๋ถ„์€ ๋‹ค๋ฅด์ง€๋งŒ, ํฌ๊ด„์ ์œผ๋กœ ๋ณด๋Š” ๊ฒƒ. ๊ทธ๋žœ์ €, ๋ฒ„์Šค, ์†Œ๋‚˜ํƒ€, โ€ฆ. โ†’ ์ฐจ

    ํฌ๊ด„์ ์œผ๋กœ ํ‰ ์น˜๊ธฐ

    ์„ ์–ธ์„ ์ถ”์ƒ์ ์ธ ์ƒ์œ„ ๊ฐœ๋…์œผ๋กœ ํ‰ ์น˜๊ณ  new ๋Š” ํ•˜์œ„ ๊ฐœ๋…์œผ๋กœ ํ•œ๋‹ค.

    ๐Ÿ’ก
    ๋” ํฐ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์„ ์–ธํ•˜๊ณ  = new๋ฅผ ํ•˜์œ„ ๊ฐœ๋… ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
    Character character1 = new Character();
    Character character2 = new SuperHero();

    ๋‹คํ˜•์„ฑ ์‹คํŒจ

    ๐Ÿ’ก
    Is-a์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†๋‹ค.

    ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

    public interface Life { }
    public class Wizard implements Life{ }
    public class Main {
        public static void main(String[] args) {
            Life life = new Wizard(); // ์œ„์ž๋“œ๋ฅผ ์‚ด์•„์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ‰์น˜๊ธฐ
        }
    }

    attack๊ณผ fireball์„ ์‚ฌ์šฉํ•˜๋Š” ๋งˆ๋ฒ•์‚ฌ

    attack, fireball์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ

    ๐Ÿ’ก
    ๊ธฐ์กด Wzard ์ธ์Šคํ„ด์Šค๋ฅผ Wizard ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•ด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉ

    ๋‹คํ˜•์„ฑ์„ ์ž˜๋ชป ์‚ฌ์šฉํ•œ ์˜ˆ

    ๐Ÿ’ก
    Character c = w; ์„ธ๋ถ€์ ์ธ wizard๋ฅผ ๋” ํฐ ๊ฐœ๋…์˜ Character๋กœ ๋„ฃ์—ˆ์„ ๊ฒฝ์šฐ Wizard๋Š” Character๋กœ์„œ ๋” ํฐ ๊ฐœ๋…์œผ๋กœ ๋ณด์ด๊ฒŒ ๋œ๋‹ค. wizard๋Š” Character๋กœ์„œ ๋ณด์ด๊ฒŒ ๋˜๋ฏ€๋กœ ๊ณตํ†ต ๋ฉ”์†Œ๋“œ์ธ run(), attack()์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, wizard๋งŒ์˜ ์„ธ๋ถ€์ ์ธ fireball()์€ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.

    ๋‹คํ˜•์„ฑ ๊ฒฐ๊ณผ ์˜ˆ์ธก

    ๐Ÿ’ก
    ๊ฒฐ๊ณผ : ์Šฌ๋ผ์ž„์€ ์Šฌ๊ธˆ์Šฌ๊ธˆ ๋„๋ง์ณค๋‹ค ์Šฌ๋ผ์ž„์€ ์Šฌ๊ธˆ์Šฌ๊ธˆ ๋„๋ง์ณค๋‹ค
    ๐Ÿ’ก
    ์‹ค์ฒด new๋กœ์„œ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋Š” Slime()์ด๊ณ , run() ๋ฉ”์†Œ๋“œ๋Š” Monster์™€ Slime๋ชจ๋‘ ๊ตฌํ˜„๋œ ๊ณตํ†ต ๋ฉ”์†Œ๋“œ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค Slime์˜ ์˜ค๋ฒ„๋ผ์ด๋“œ๋œ run() ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค!

    ํƒ€์ž… ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•

    ๐Ÿ’ก
    ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์„ ํƒ€์ž… ์บ์ŠคํŒ…์„ ํ†ตํ•ด ๊ตฌ์ฒดํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋” ํฐ ๊ฐœ๋…์œผ๋กœ ๋ฐ”๊พธ๋ ค๋ฉด, ์บ์ŠคํŒ…์ด ์•„๋‹Œ ๋‹จ์ˆœ ๋Œ€์ž…ํ•˜๋ฉด ๋œ๋‹ค.
    ๐Ÿ’ก
    ๋‹น์—ฐํžˆ ์ƒ์† ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํƒ€์ž… ์บ์ŠคํŒ…์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค! (๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ) ClassCastException

    ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž… ์ฒดํฌ instanceof

    ๐Ÿ’ก
    ํƒ€์ž… ์บ์ŠคํŒ…์„ ์‚ฌ์šฉํ•  ๋•Œ, ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— instanceof๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

    ๋‹คํ˜•์„ฑ์˜ ์žฅ์ ์„ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•œ ์ฝ”๋“œ

    ๐Ÿ’ก
    ์„ธ๋ถ€์ ์ธ ๊ฐ์ฒด๋กœ ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ๊ฐ์˜ setHP()์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ด ์ฝ”๋“œ์˜ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•œ๋‹ค.

    ์ฝ”๋“œ์˜ ์ค‘๋ณต ์ œ๊ฑฐ (๋‹คํ˜•์„ฑ์˜ ๋ฉ”๋ฆฌํŠธ : ๋™์ผํ•œ ํƒ€์ž…์œผ๋กœ ์ทจ๊ธ‰)

    ๐Ÿ’ก
    ๊ฐ ์„ธ๋ถ€์ ์ธ Hero, Thief, Wizard ๋“ฑ์„ ์ถ”์ƒ์ ์ธ Character ํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด๋กœ ๊ฐ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ArrayList()์— ๊ฐ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ฅผ ๋„ฃ๊ณ  ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•จ์œผ๋กœ, ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
    ๐Ÿ’ก
    ์„ธ๋ถ€์ ์ธ ์š”์†Œ๋“ค์„ ํŠน์ง•์ ์ธ ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฌถ๋Š”๋‹ค๋ฉด, ์ด๋Ÿฌํ•œ ๋‹คํ˜•์„ฑ์˜ ์žฅ์ ์„ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค..!!!

    ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•œ ๋‹ค์–‘ํ•œ ์ ์„ ๊ณต๊ฒฉํ•˜๋Š” Hero

    ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•œ Hero

    ํƒ€์ž…์„ ํ‰ ์น˜๊ณ , ์ž˜ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๊ธฐ

    13์žฅ ์ •๋ฆฌ

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

    ์ทจ๊ธ‰ ๋ณ€๊ฒฝ

    • ์บ์ŠคํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜๋ฉด, ๊ฐ•์ œ ๋Œ€์ž…์ด ๊ฐ€๋Šฅ
    • ๋ถ€์ •ํ•œ ๋Œ€์ž…์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ClassCastException ์ด ๋ฐœ์ƒ

    ๋‹คํ˜•์„ฑ

    • ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋™์ผ์‹œํ•˜์—ฌ, ๋ถ€๋ชจ ํด๋ž˜์Šค ํƒ€์ž…์˜ ๋ฐฐ์—ด์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค
    • ๋ถ€๋ชจ ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ธ์ˆ˜๋‚˜ ๋ฆฌํ„ด ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ, ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
    • ๋™์ผ์‹œ ์ทจ๊ธ‰ ํ•ด๋„, ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ ํด๋ž˜์Šค์˜ ์ •์˜๋ฅผ ๋”ฐ๋ฅด๊ณ  ๋‹ค๋ฅธ ๋™์ž‘์„ ํ•œ๋‹ค.


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

    13-1

    Item์€ ์ถ”์ƒํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

    ๐Ÿ’ก
    (1) ์ด๋ฏธ์ง€ : Sword, ํ•ด์„ค๋ฌธ : Sword, Item (2) ์ฝ”๋“œ : Monster, Slime, ์ด๋ฏธ์ง€ : Slime, ํ•ด์„ค๋ฌธ : Monster โ†’ ์ฆ‰, i ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ”๋ผ ๋ดค์„ ๋•Œ Item ๊ฐ์ฒด๋กœ ๋ณธ๋‹ค.

    13-2

    package Exam;
    
    public class Main {
    
        public static void main(String[] args) {
            // 1. obj์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ a, b, c ์ค‘์— ๊ณ ๋ฅด์‹œ์˜ค
            System.out.println("1๋ฒˆ ๋ฌธ์ œ");
            X obj = new A();
            obj.a();
            System.out.println();
            System.out.println("2๋ฒˆ ๋ฌธ์ œ");
            // 2. ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๋‚ด์šฉ ํ™•์ธ
            Y y1 = new A();
            Y y2 = new B();
            y1.a(); // A์— ๋Œ€ํ•œ ์ธ์Šคํ„ด์Šค์ด๋ฏ€๋กœ Aa
            y2.a(); // B์— ๋Œ€ํ•œ ์ธ์Šคํ„ด์Šค์ด๋ฏ€๋กœ Ba
        }
    }

    13-3

    ๐Ÿ’ก
    1. Y โ†’ A์™€ B์˜ ๊ณตํ†ต ํŠน์„ฑ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ Y ํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ์ œ๋„ค๋ฆญ์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

    package Exam;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
    
        public static void main(String[] args) {
            //Ch13-3
            List<Y> list = new ArrayList<Y>();
            Y aInstance = new A();
            Y bInstance = new B();
            
            list.add(aInstance);
            list.add(bInstance);
            
            for(Y instance : list) {
                instance.b();
            }
        }
    }


    ๐Ÿ’ก
    ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŠน์ง• : ์ƒ์†, ๋‹คํ˜•์„ฑ, ์บก์Аํ™” ๊ด€๋ จํ•ด์„œ ์ž˜ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.


    Uploaded by N2T

    728x90
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Keydi's Tistory