ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java ๊ธฐ์ดˆ] 12. ์ถ”์ƒํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค
    Dev/Java 2023. 3. 20. 13:09
    728x90

    ๐Ÿ“˜ 12์žฅ ์ถ”์ƒํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค

    ๊ธฐ์กด์˜ ์ƒ์† ๋ฌธ์ œ

    ์ƒ์„ธ ์ •์˜๊ฐ€ ๋ฏธ์ •์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„ ์ƒ์†์˜ ์žฌ๋ฃŒ๋กœ ์‚ฌ์šฉ๋  ํด๋ž˜์Šค

    ๋Œ€์ฑ…1. attack() ๋ฉ”์†Œ๋“œ์˜ ๋‚ด๋ถ€๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๋‘๊ธฐ

    ๐Ÿ’ก
    ๋ฏธ๋ž˜์— ํ•˜์œ„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•  ๊ฒƒ์„ ์˜ˆ์ƒ

    ๋ฌธ์ œ์  : ๋ฏธ๋ž˜์— ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ์•ˆ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

    ์˜๋„์น˜ ์•Š์€ new ์‚ฌ์šฉ

    ์ถ”์ƒ ํด๋ž˜์Šค

    ๐Ÿ’ก
    ๋ฏธ ๊ตฌํ˜„๋œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์ถ”์ƒํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

    ์ถ”์ƒ ๋ฉ”์†Œ๋“œ (abstract method)๋ฅผ ๊ฐ€์ง„ ์ถ”์ƒ ํด๋ž˜์Šค

    public abstract class Character {
        private String name;
        private int hp;
        
        public Character(String name) {
            this.name = name;
            hp = 100;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getHp() {
            return hp;
        }
    
        public void setHp(int hp) {
            this.hp = hp;
        }
        
        public abstract void attack(Kinoko kinoko);
    }
    ๐Ÿ’ก
    ๋ฏธ ๊ตฌํ˜„๋œ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„ ์ถ”์ƒ ํด๋ž˜์Šค. ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๋ ค๋ฉด ์ถ”์ƒ ํด๋ž˜์Šค์—ฌ์•ผ๋งŒ ํ•œ๋‹ค.

    ์ถ”์ƒํด๋ž˜์Šค์˜ ์ œ์•ฝ : ์ถ”์ƒํด๋ž˜์Šค๋Š” new์— ์˜ํ•œ ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ๊ธˆ์ง€๋˜์–ด ์žˆ๋‹ค.

    ์ถ”์ƒํด๋ž˜์Šค์˜ ์ œ์•ฝ : ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ•์ œ

    ์ถ”์ƒ ์ƒ์† ๋‹ค๊ณ„์ธต ๊ตฌ์กฐ

    ๐Ÿ’ก
    Italic ์ฒด์˜ ํด๋ž˜์Šค๋Š” ์ถ”์ƒ ํด๋ž˜์Šค์ด๋‹ค. Monster, WalkingMonster, FlyingMonster๋Š” ์ถ”์ƒ ํด๋ž˜์Šค์ด๋‹ค.

    ๐Ÿ’ก
    ์ถ”์ƒํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ถ”์ƒํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ  ๋” ์ถ”๊ฐ€ํ•  ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    ์ธํ„ฐํŽ˜์ด์Šค

    ๐Ÿ’ก
    ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋Š” ์ถ”์ƒ ๋ฉ”์†Œ๋“œ์—ฌ์•ผ ํ•œ๋‹ค. ํ•„๋“œ(์†์„ฑ)๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค.
    ๐Ÿ’ก
    ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๊ฐ€ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ ์ด๋ฏ€๋กœ, public abstract์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ–ˆ๋‹ค.

    ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ƒ์ˆ˜ ์„ ์–ธ

    ๐Ÿ’ก
    ํ•„๋“œ ์†์„ฑ ๊ฐ’์ด ์•„๋‹Œ, public static final์ด ์ƒ๋žต๋œ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ํ•ด๋‹น ์ƒ์ˆ˜๊ฐ’์€ ์ธํ„ฐํŽ˜์ด์Šค.์ƒ์ˆ˜๋ช… ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์„ธํƒ์†Œ ์ธํ„ฐํŽ˜์ด์Šค

    ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

    ๐Ÿ’ก
    implements ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด ๋ฏธ๊ตฌํ˜„๋œ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

    ๐Ÿ’ก
    ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ธํ„ฐํŽ˜์ด์Šค์˜ ํšจ๊ณผ

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

    ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์†

    ๐Ÿ’ก
    ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹ค๋ฅธ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์Œ์œผ๋กœ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ๋ฐ›๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

    implemnets์™€ extends์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ• ์ •๋ฆฌ

    ํ™œ์šฉ ์˜ˆ์‹œ) extends์™€ implements๋ฅผ ํ†ต์‹œ์— ์‚ฌ์šฉ


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

    12-1

    package Exam;
    
    public class Book extends TangibleAsset {
        private String isbn;
    
        public Book(String name, int price, String color, String isbn) {
            super(name, price, color);
            this.isbn = isbn;
        }
        
        public String getIsbn() {
            return this.isbn;
        }
    }
    package Exam;
    
    public class Computer extends TangibleAsset {
        private String makerName;
    
        public Computer(String name, int price, String color, String makerName) {
            super(name, price, color);
            this.makerName = makerName;
        }
    
        public String getMakerName() {
            return this.makerName;
        }
    }
    package Exam;
    
    public abstract class TangibleAsset {
        private String name;
        private int price;
        private String color;
        
        public TangibleAsset(String name, int price, String color){
            this.name = name;
            this.price = price;
            this.color = color;
        }
        
        public String getName() {
            return this.name;
        }
        
        public int getPrice() {
            return this.price;
        }
        
        public String getColor() {
            return this.color;
        }
    }

    12-2

    package Exam;
    
    public abstract class Asset {
        
        public abstract String getName();
        public abstract int getPrice();
        public abstract String getColor();
    }
    package Exam;
    
    public abstract class TangibleAsset extends Asset{
        private String name;
        private int price;
        private String color;
        
        public TangibleAsset(String name, int price, String color){
            this.name = name;
            this.price = price;
            this.color = color;
        }
    
        @Override
        public String getName() {
            return this.name;
        }
    
        @Override
        public int getPrice() {
            return this.price;
        }
    
        @Override
        public String getColor() {
            return this.color;
        }
        
    }

    12-3

    package Exam;
    
    public interface Thing {
        double getWeight();
        void setWeight(double weight);
    }

    12-4

    package Exam;
    
    public abstract class TangibleAsset extends Asset implements Thing{
        private String name;
        private int price;
        private String color;
        private double weight;
        
        public TangibleAsset(String name, int price, String color){
            this.name = name;
            this.price = price;
            this.color = color;
        }
    
        @Override
        public String getName() {
            return this.name;
        }
    
        @Override
        public int getPrice() {
            return this.price;
        }
    
        @Override
        public String getColor() {
            return this.color;
        }
    
        @Override
        public double getWeight() {
            return this.weight;
        }
    
        @Override
        public void setWeight(double weight) {
            this.weight = weight;
        }
    }
    package Exam;
    
    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Book book = new Book("์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3/E", 30000, "green", "A123");
            Computer computer = new Computer("gram", 1500000, "Black", "LG");
            book.setWeight(150.0);
            computer.setWeight(980.5);
    
            System.out.println(computer.getName() + " : " + computer.getPrice() + " "
                    + computer.getColor() + " " + computer.getMakerName() + " " + computer.getWeight());
            System.out.println(book.getName() + " : " + book.getPrice() + " " + book.getColor() + " "
                    + book.getIsbn() + " " + book.getWeight());
        }
    
    }


    Uploaded by N2T

    728x90
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Keydi's Tistory