ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 7. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°, 8. μΈμŠ€ν„΄μŠ€μ™€ 클래슀
    Dev/Java 2023. 3. 13. 17:28
    728x90

    πŸ“˜ 7μž₯

    객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)μ΄λž€?

    • OOPλŠ” 객체λ₯Ό μ€‘μ‹¬μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„ν•˜λŠ” 방법둠
    • OOPλ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ΄ λ†’μ•„μ§„λ‹€. κ°μ²΄λŠ” 데이터와 처리 κΈ°λŠ₯을 ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ λ¬Άμ–΄μ„œ κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ—, μ½”λ“œμ˜ 쀑볡이 쀄어듀고 μˆ˜μ •μ΄ μš©μ΄ν•˜λ‹€.
    • 객체 κ°„ μƒν˜Έμž‘μš©μ„ 톡해 λ³΅μž‘ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 있으며, μ½”λ“œμ˜ 가독성도 λ†’μ•„μ§‘λ‹ˆλ‹€.

    객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ μ£Όμš” νŠΉμ§•

    • μΊ‘μŠν™” (Encapsulation)
      • 객체의 λ‚΄λΆ€ μƒνƒœμ™€ 행동을 μ™ΈλΆ€μ—μ„œ λ³΄ν˜Έν•˜λŠ” κ°œλ…μœΌλ‘œ, 객체의 λ‚΄λΆ€λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ μ™ΈλΆ€μ—μ„œ 객체에 μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•œλ‹€.
    • 상속 (Inheritance)
      • λΆ€λͺ¨ 클래슀의 νŠΉμ„±μ„ μžμ‹ ν΄λž˜μŠ€κ°€ λ¬Όλ €λ°›μ•„ μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” κ°œλ…
    • λ‹€ν˜•μ„± (Polymorphism)
      • ν•˜λ‚˜μ˜ λ©”μ„œλ“œλ₯Ό λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ ν˜ΈμΆœν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” κ°œλ…

    객체와 클래슀

    객체 (object)

    • ν˜„μ‹€ 세계에 μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  것

    클래슀 (class)

    • 컴퓨터 μ„Έκ³„μ—μ„œ 객체λ₯Ό ꡬ체화 ν•œ ν‹€, 섀계도

    객체 μ§€ν–₯ μž₯점

    • ν”„λ‘œκ·Έλž¨μ˜ μˆ˜μ •μ΄ 용이
    • ν”„λ‘œκ·Έλž¨μ˜ 일뢀λ₯Ό κ°„λ‹¨ν•˜κ²Œ 재 μ‚¬μš© κ°€λŠ₯

    객체의 ν˜•νƒœ

    객체 κ°„ μƒν˜Έμž‘μš©

    πŸ’‘
    객체 μƒν˜Έμž‘μš©μ€ λ©”μ‹œμ§€ 전달과 응닡에 μ˜ν•΄ 이루어지며, 이λ₯Ό 톡해 κ°μ²΄λŠ” λ‹€λ₯Έ 객체와 ν˜‘λ ₯ν•˜μ—¬ μ›ν•˜λŠ” κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    πŸ“˜ 8μž₯ μΈμŠ€ν„΄μŠ€μ™€ 클래슀

    객체(object) λ„μΆœ μˆœμ„œ

    πŸ’‘
    각 객체가 κ°€μ§€κ³  μžˆμ„λ§Œν•œ β€œμ†μ„±β€μ΄λ‚˜ β€œλ™μž‘β€μ„ μ •μ˜ν•˜κ³  λ„μΆœ, λ™μž‘μ‹œμΌœ λ³΄λŠ” 것

    1. μš”κ΅¬μ‚¬ν•­ 식별 및 뢄석
      1. 업무 μ •μ˜μ„œ λ“± μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œ μ œκ³΅ν•΄μ•Ό ν•˜λŠ” μš”κ΅¬μ‚¬ν•­μ„ μ‹λ³„ν•˜μ—¬ 업무와 데이터λ₯Ό νŒŒμ•…
    1. 객체 λ„μΆœ
      1. λΆ„μ„ν•œ λ‚΄μš©μ„ 기반으둜 객체의 속성과 λ™μž‘ κΈ°λŠ₯, 객체 κ°„μ˜ 관계λ₯Ό κ³ λ―Όν•©λ‹ˆλ‹€.
    1. κ°μ²΄κ°„μ˜ 관계 λ„μΆœ
      1. λ„μΆœν•œ 객체듀 κ°„μ˜ 관계λ₯Ό νŒŒμ•…ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ‹œμŠ€ν…œμ—μ„œ μΌμ–΄λ‚˜λŠ” 데이터 처리 흐름을 μ΄ν•΄ν•˜κ³  κ°μ²΄κ°„μ˜ μ—­ν• κ³Ό μ±…μž„μ„ λΆ€μ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    1. 객체 λͺ¨λΈλ§
      1. κ°μ²΄λ“€μ˜ ꡬ쑰와 μƒν˜Έμž‘μš© 방법을 λͺ¨λΈλ§ν•˜μ—¬ μ‹œκ°ν™”
    1. 검증 및 μˆ˜μ • λ¬Έμ„œν™”

    μš©μ–΄ 정리

    πŸ’‘
    객체(object) ν˜„μ‹€ μ„Έκ³„μ˜ κ°œμ²΄λ‚˜ κ°œλ…μ μΈ 개체λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μΆ”μƒν™”λœ κ°œλ…μž…λ‹ˆλ‹€. κ°μ²΄λŠ” νŠΉμ •ν•œ μƒνƒœλ₯Ό μœ μ§€ν•˜κ³ , κ·Έ μƒνƒœλ₯Ό λ³€κ²½ν•  수 있으며, ν–‰μœ„λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - 속성(데이터)κ³Ό λ©”μ„œλ“œ(ν–‰μœ„)둜 이루어져 μžˆλ‹€.
    πŸ’‘
    클래슀(class) ν΄λž˜μŠ€λŠ” 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ μΌμ’…μ˜ μ„€κ³„λ„μž…λ‹ˆλ‹€. 객체λ₯Ό μ •μ˜ν•˜κ³ , 객체가 κ°€μ§€λŠ” 속성과 ν–‰μœ„λ₯Ό μ •μ˜ν•˜μ—¬ μ‹€μ œ 객체λ₯Ό μƒμ„±ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€. ν΄λž˜μŠ€λŠ” 객체λ₯Ό μƒμ„±ν•˜λŠ”λ° ν•„μš”ν•œ ꡬ쑰와 ν–‰μœ„λ₯Ό μ •μ˜ν•˜κ³ , 객체의 속성과 ν–‰μœ„λ₯Ό μ •μ˜ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.
    πŸ’‘
    μΈμŠ€ν„΄μŠ€(instance) 클래슀λ₯Ό 기반으둜 μƒμ„±λœ 객체λ₯Ό μΈμŠ€ν„΄μŠ€λΌκ³  ν•©λ‹ˆλ‹€. ν΄λž˜μŠ€λŠ” 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ 섀계도이고, μΈμŠ€ν„΄μŠ€λŠ” κ·Έ 섀계도λ₯Ό 기반으둜 μ‹€μ œλ‘œ λ§Œλ“€μ–΄μ§„ κ°μ²΄μž…λ‹ˆλ‹€. κ°μ²΄λŠ” 클래슀λ₯Ό 기반으둜 ν•˜μ§€λ§Œ, μΈμŠ€ν„΄μŠ€λŠ” 클래슀의 ꡬ쑰λ₯Ό λ°”νƒ•μœΌλ‘œ λ§Œλ“€μ–΄μ§„ μ‹€μ²΄μž…λ‹ˆλ‹€. κ°μ²΄λŠ” 속성과 ν–‰μœ„λ₯Ό κ°€μ§€κ³  μžˆμ§€λ§Œ, μΈμŠ€ν„΄μŠ€λŠ” κ·Έ 속성과 ν–‰μœ„λ₯Ό μ‹€μ œλ‘œ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, 클래슀λ₯Ό 기반으둜 객체λ₯Ό μƒμ„±ν•˜μ—¬ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄ λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

    클래슀 Java μ½”λ“œ ν‘œν˜„

    package com.example.game;
    
    public class Hero {
        String name;
        int hp;
        
        void attack() {}
        void run() {}
        void sit(int sec) {}
        void slip() {}
        void sleep() {}
    }

    public class Kinoko {
        int hp;
        final int LEVEL = 10;
    }

    클래슀λͺ…κ³Ό λ©€λ²„λ³€μˆ˜λͺ…μ˜ λͺ…λͺ… κ·œμΉ™

    클래슀 μ •μ˜μ— λ”°λ₯Έ 효과

    • μ •μ˜ν•œ 클래슀둜 μΈμŠ€ν„΄μŠ€ 생성 κ°€λŠ₯
    • ν•΄λ‹Ή 클래슀둜 μƒμ„±ν•œ μΈμŠ€ν„΄μŠ€λ₯Ό 넣을 수 μžˆλŠ” μƒˆλ‘œμš΄ λ³€μˆ˜μ˜ νƒ€μž…μ΄ 이용 κ°€λŠ₯ν•΄ μ§„λ‹€.
      • ex) Hero νƒ€μž…μ˜ λ³€μˆ˜ (Hero hero;)

    πŸ’‘
    클래슀λ₯Ό μ •μ˜ν•˜λ©΄ Javaμ—μ„œ 이용 κ°€λŠ₯ν•œ νƒ€μž…μ˜ μ’…λ₯˜κ°€ 점점 λŠ˜μ–΄λ‚œλ‹€.


    πŸ“μ—°μŠ΅ 문제

    8-1

    package com.example.Exam;
    
    public class Cleric {
    
    }

    8-2

    package com.example.Exam;
    
    public class Cleric {
        String name;
        int HP = 50;
        final int maxHP = 50;
        int MP = 10;
        final int maxMP = 10;
    }

    8-3

    package com.example.Exam;
    
    public class Cleric {
        String name;
        int HP = 50;
        final int maxHP = 50;
        int MP = 10;
        final int maxMP = 10;
        
        void selfAid() {
            this.MP = MP - 5;
            this.HP = maxHP;
        }
    }

    8-4

    package com.example.Exam;
    
    import java.util.Random;
    
    public class Cleric {
        String name;
        int HP = 50;
        int MP = 10;
        static final int MAX_HP = 50;
        static final int MAX_MP = 10;
    
        void selfAid() {
            this.MP = MP - 5;
            this.HP = MAX_HP;
        }
    
        int pray(int sec) {
            int realAmount = 0;
    
            Random random = new Random();
            int oldMP = this.MP;
            int Amount = (random.nextInt(3) + sec);
            this.MP = (this.MP + Amount) <= MAX_MP ? (this.MP + Amount) : MAX_MP;
            realAmount = this.MP - oldMP;
    
            return realAmount;
        }
    }

    ν…ŒμŠ€νŠΈ κ²°κ³Ό

    package com.example.Exam;
    
    public class Main {
    
        public static void main(String[] args) {
            Cleric cleric = new Cleric();
            
            System.out.println("초기 MP : " + cleric.MP);
            cleric.selfAid();
            System.out.println("selfAid λ°œλ™ ν›„ MP : " + cleric.MP);
            System.out.println("----------------------------------");
            System.out.println("pary 3초 λ°œλ™");
            System.out.println("μ‹€μ œ νšŒλ³΅λŸ‰ : " + cleric.pray(3));
            System.out.println("λ°œλ™ ν›„ MP : " + cleric.MP);
        }
    }


    Uploaded by N2T

    728x90
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Keydi's Tistory