ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java ๊ธฐ์ดˆ] 10. ์บก์Аํ™”(Encapsulation)
    Dev/Java 2023. 3. 20. 13:03
    728x90

    ๐Ÿ“˜ 10์žฅ ์บก์Аํ™”(Encapsulation)

    ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์•ก์„ธ์Šค ์ œ์–ด

    ์ ‘๊ทผ ์ง€์ •์ž (access modifier)

    HP๋ฅผ private๋กœ ์ง€์ •

    ๐Ÿ’ก
    ์ƒ์„ฑ์ž, ๋ฉ”์†Œ๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ์ฝ”๋“œ์—์„œ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ public์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.

    ๐Ÿ’ก
    + : public - : private ~ : default

    ๋ฉค๋ฒ„ ์•ก์„ธ์Šค ์ง€์ • ์ •์„

    ๐Ÿ’ก
    ํ•„๋“œ ์†์„ฑ์€ ์ฃผ๋กœ private ๋ฉ”์†Œ๋“œ๋Š” ์ฃผ๋กœ public * static ๋ณ€์ˆ˜๋Š” public์„ ์‚ฌ์šฉ

    getter์™€ setter

    • ๋ชจ๋“  ํ•„๋“œ๋ฅผ private๋กœ ์ง€์ • ํ•ด์„œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ ‘๊ทผ์ด ์•ˆ ๋˜๋„๋ก ๋ง‰๋Š”๋‹ค.
    • ๋”ฐ๋ผ์„œ, ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ์ ‘๊ทผ ํ•˜๋„๋ก ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ์ด๋‹ค!
    Name์— ๋Œ€ํ•œ getter์™€ setter ๋ฉ”์†Œ๋“œ

    King ํด๋ž˜์Šค์˜ talk() ๋ฉ”์†Œ๋“œ๋ฅผ ์ˆ˜์ •

    ์บก์Аํ™” ์ „๊ณผ ํ›„ ๋น„๊ต

    getter / setter ํ™œ์šฉ

    ๐Ÿ’ก
    1. Read Only, Write Only์˜ ํ•„๋“œ์˜ ์‹คํ˜„ 2. ํ•„๋“œ์˜ ์ด๋ฆ„ ๋“ฑ, ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ์„ค๊ณ„๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 3. ํ•„๋“œ๋กœ์˜ ์•ก์„ธ์Šค๋ฅผ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ

    ๐Ÿ’ก
    setter ๋ฉ”์†Œ๋“œ ๋‚ด ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ํƒ€๋‹น์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œ์–ด

    ๐Ÿ’ก
    ํด๋ž˜์Šค ๋˜ํ•œ ๋‹ค๋ฅธ ์ฝ”๋“œ์—์„œ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, public์„ ์‚ฌ์šฉํ•œ๋‹ค.
    ๐Ÿ’ก
    ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€ ๋•Œ, class๋ฅผ ๊ฐ™์€ ํŒŒ์ผ ๋‚ด ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด package private๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (๊ทธ ์™ธ์—๋Š” ์ž˜ ์•ˆ์“ฐ์ž„) ๋น„ public ํด๋ž˜์Šค์˜ ํŠน์ง• 1. ํด๋ž˜์Šค๋ช…์€ ์†Œ์Šค ํŒŒ์ผ๋ช…๊ณผ ๋‹ฌ๋ผ๋„ ๋œ๋‹ค. 2. ํ•œ ์†Œ์Šค ํŒŒ์ผ์— ์—ฌ๋Ÿฌ ํด๋ž˜์Šค ์„ ์–ธ ๊ฐ€๋Šฅ


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

    10-1

    package Exam;
    
    public class Wizard {
        private int hp;
        private int mp;
        private String name;
        private Wand wand;
    
        public void heal(Hero hero) {
            int basePoint = 10; // ๊ธฐ๋ณธ ํšŒ๋ณต ํฌ์ธํŠธ
            int recovPoint = (int) (basePoint * this.wand.power); // ์ง€ํŒก์ด์— ์˜ํ•œ ์ฆํญ
            hero.setHp(hero.getHp() + recovPoint); // ์šฉ์‚ฌ์˜ HP๋ฅผ ํšŒ๋ณต
        }
    }
    package Exam;
    
    public class Wand {
        private String name; // ์ง€ํŒก์ด ์ด๋ฆ„
        private double power; // ์ง€ํŒก์ด ๋งˆ๋ ฅ
    }

    10-2

    package Exam;
    
    public class Wizard {
        private int hp;
        private int mp;
        private String name;
        private Wand wand;
        
        public int getHp() {
            return hp;
        }
        
        public int getMp() {
            return mp;
        }
        
        public String getName() {
            return name;
        }
        
        public Wand getWand() {
            return wand;
        }
        
        public void setHp(int hp) {
            this.hp = hp;
        }
        
        public void setMp(int mp) {
            this.mp = mp;
        }
        
        public void setName(String name) {
            this.name = name;
        }
        
        public void setWand(Wand wand) {
            this.wand = wand;
        }
    
        public void heal(Hero hero) {
            int basePoint = 10; // ๊ธฐ๋ณธ ํšŒ๋ณต ํฌ์ธํŠธ
            int recovPoint = (int) (basePoint * this.wand.getPower()); // ์ง€ํŒก์ด์— ์˜ํ•œ ์ฆํญ
            hero.setHp(hero.getHp() + recovPoint); // ์šฉ์‚ฌ์˜ HP๋ฅผ ํšŒ๋ณต
        }
    }
    package Exam;
    
    public class Wand {
        private String name; // ์ง€ํŒก์ด ์ด๋ฆ„
        double power; // ์ง€ํŒก์ด ๋งˆ๋ ฅ
        
        public double getPower() {
            return power;
        }
        
        public String getName() {
            return name;
        }
        
        public void setName(String name) {
            this.name = name;
        }
        
        public void setPower(double power) {
            this.power = power;
        }
    }

    10-3

    package Exam;
    
    public class Wizard {
        private int hp;
        private int mp;
        private String name;
        private Wand wand;
    
        public int getHp() {
            return hp;
        }
    
        public int getMp() {
            return mp;
        }
    
        public String getName() {
            return name;
        }
    
        public Wand getWand() {
            return wand;
        }
    
        public void setHp(int hp) {
            if (hp < 0) {
                this.hp = 0;
            }
            this.hp = hp;
        }
    
        public void setMp(int mp) {
            if (mp < 0) {
                throw new IllegalArgumentException("๋งˆ๋ฒ•์‚ฌ์˜ MP๋Š” 0 ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
            }
            this.mp = mp;
        }
    
        public void setName(String name) {
            if (name == null || name.length() < 3) {
                throw new IllegalArgumentException("์ด๋ฆ„์€ null ๋ถˆ๊ฐ€๋Šฅ, 3๊ธ€์ž ์ด์ƒ");
            } else {
                this.name = name;
            }
        }
    
        public void setWand(Wand wand) {
            if (wand == null) {
                throw new IllegalArgumentException("์™„๋“œ๋Š” null ๋ถˆ๊ฐ€๋Šฅ");
            }
            this.wand = wand;
        }
    
        public void heal(Hero hero) {
            int basePoint = 10; // ๊ธฐ๋ณธ ํšŒ๋ณต ํฌ์ธํŠธ
            int recovPoint = (int) (basePoint * this.wand.getPower()); // ์ง€ํŒก์ด์— ์˜ํ•œ ์ฆํญ
            hero.setHp(hero.getHp() + recovPoint); // ์šฉ์‚ฌ์˜ HP๋ฅผ ํšŒ๋ณต
        }
    }
    package Exam;
    
    public class Wand {
        private String name; // ์ง€ํŒก์ด ์ด๋ฆ„
        private double power; // ์ง€ํŒก์ด ๋งˆ๋ ฅ
    
        public double getPower() {
            return power;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            if (name == null || name.length() < 3) {
                throw new IllegalArgumentException("์ด๋ฆ„์€ null ๋ถˆ๊ฐ€๋Šฅ, 3๊ธ€์ž ์ด์ƒ");
            } else {
                this.name = name;
            }
        }
    
        public void setPower(double power) {
            if (0.5 <= power && power <= 100.0) {
                this.power = power;
            } else {
                throw new IllegalArgumentException("๋งˆ๋ ฅ์€ 0.5 ์ด์ƒ 100.0 ์ดํ•˜๋งŒ ๊ฐ€๋Šฅ");
            }
        }
    }
    package Exam;
    
    public class Main {
    
        public static void main(String[] args) {
            Wizard wizard = new Wizard();
            Wand wand = new Wand();
            
            wand.setName("๋‚˜๋ฌด ์ง€ํŒก์ด");
            wand.setPower(10.5);
            
            wizard.setHp(50);
            wizard.setMp(10);
            wizard.setName("ํ•ด๋ฆฌํฌํ„ฐ");
            wizard.setWand(wand);
            
            System.out.println("์บ๋ฆญํ„ฐ์ด๋ฆ„ : " + wizard.getName() + ", HP: " + wizard.getHp() + ", MP: " + wizard.getMp());
            System.out.println("์žฅ์ฐฉํ•œ ์™„๋“œ: " + wizard.getWand().getName() + ", ํŒŒ์›Œ : " + wizard.getWand().getPower());
        }
    
    }



    Uploaded by N2T

    728x90
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Keydi's Tistory