λ‚˜λ§Œμ˜ μ˜€λž˜λ‹¬λ¦¬κΈ°λ₯Ό ν•˜λŠ” μ‚¬λžŒ

Become a ghost

Programming - Language/JAVA

[250306] JAVA κΈ°λ³Έ - 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP): λ‹€ν˜•μ„±(polymorphism)κ³Ό μΊ‘μŠν™”(encapsulation)

jennnnna 2025. 3. 8. 18:58

 

μžλ°”μ˜ 객체지ν–₯ν”„λ‘œκ·Έλž˜λ°μ„ 이해할 λ•Œ μ€‘μš”ν•œ κ°œλ…μœΌλ‘œ κΌ½νžˆλŠ” 것이 넀가지 μžˆλ‹€. 

 

1. 클래슀

2. 상속

3. λ‹€ν˜•μ„±

4. μΊ‘μŠν™” 

 

μ΄μ€‘μ—μ„œ ν΄λž˜μŠ€μ™€ 상속은 μ§€λ‚œ κ²Œμ‹œκΈ€λ“€μ„ 톡해 λ‹€λ£¨μ–΄λ΄€μœΌλ‹ˆ

μ˜€λŠ˜μ€ λ‹€ν˜•μ„±κ³Ό μΊ‘μŠν™”μ— λŒ€ν•΄ μ •λ¦¬ν•˜λŠ” μ‹œκ°„μ„ κ°€μ Έλ³΄μž.  

 

 

λ¨Όμ €, πŸ“Œ λ‹€ν˜•μ„±(polymorphism)μ΄λž€? 

- Polymorphism = Poly (λ§Žμ€, μ—¬λŸ¬ 개) + Morphism (ν˜•νƒœ, ꡬ쑰)
즉, μ—¬λŸ¬ 가지 ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€λŠ” 의미둜 μžλ°”μ˜ λ‹€ν˜•μ„± κ°œλ…μ—μ„œλŠ”

- 같은 λ©”μ„œλ“œ(λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€) κ°€ μ„œλ‘œ λ‹€λ₯Έ κ°μ²΄μ—μ„œ λ‹€λ₯΄κ²Œ λ™μž‘ν•  수 μžˆλŠ” 것을 μ˜λ―Έν•œλ‹€.

- 같은 λΆ€λͺ¨ 클래슀λ₯Ό 가진 객체가 μ—¬λŸ¬ ν˜•νƒœ(λ‹€μ–‘ν•œ νƒ€μž…)둜 λ™μž‘ν•  수 μžˆλŠ” 것
- μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ 클래슀의 νƒ€μž…μœΌλ‘œ 참쑰될 수 있음 (Bicycle myBike = new MountainBike();)

- "λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžμ‹μ„ 닀루고 μ˜€λ²„λΌμ΄λ”©μ„ ν™œμš©ν•˜λŠ” 것"

 

 

 

 

λ‹€ν˜•μ„±(polymorphism) 예제 

// λΆ€λͺ¨ 클래슀 
class Animal {
    void makeSound() {
        System.out.println("Some sound...");
    }
}


// μžμ‹ 클래슀 1 - dog 
class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Bark! Bark!");
    }
}


// μžμ‹ 클래슀 2 - cat 
class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("Meow! Meow!");
    }
}


// 메인 λ©”μ†Œλ“œ 
public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

		// 같은 λ©”μ†Œλ“œλ₯Ό λ‘κ°œμ˜ ν΄λž˜μŠ€μ—μ„œ λ‹€λ₯΄κ²Œ κ΅¬ν˜„ν•˜μ˜€λ‹€. 
        myDog.makeSound();  // 좜λ ₯: Bark! Bark!
        myCat.makeSound();  // 좜λ ₯: Meow! Meow!
    }
}

 

- Animal 클래슀의 makeSound() λ©”μ„œλ“œλ₯Ό 상속 받은 Dog, Cat ν΄λž˜μŠ€μ—μ„œ 각각 μ˜€λ²„λΌμ΄λ”©(μž¬μ •μ˜) 함. 

- μ—¬κΈ°μ„œ μ€‘μš”ν•œ 것은, Dogκ³Ό Cat 의 νƒ€μž…μ΄ λΆ€λͺ¨ 클래슀 νƒ€μž…μž„

- λ™μΌν•œ makeSound() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄λ„ 객체 νƒ€μž…μ— 따라 λ‹€λ₯Έ κ²°κ³Όκ°€ λ‚˜μ˜¨λ‹€. 

- λ‹€ν˜•μ„±μ˜ 핡심은 μ˜€λ²„λΌμ΄λ”©(Overriding) κ³Ό μΈν„°νŽ˜μ΄μŠ€(interface) ν™œμš©

- λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžμ‹ 객체λ₯Ό λ‹€λ£¨λ©΄μ„œ μ˜€λ²„λΌμ΄λ”©λœ λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 것이 λ‹€ν˜•μ„±μ˜ 핡심!

 

 

πŸ“Œ μΊ‘μŠν™”(encapsulation) λž€?

Encapsulation = En-(μ•ˆμ—) + Capsule(캑슐) + -ation(λͺ…μ‚¬ν˜• 접미사)

즉, 캑슐 μ•ˆμ— κ°€λ‘ , 포μž₯함, κ°μ‹Έμ„œ λ³΄ν˜Έν•¨μ΄λΌλŠ” 의미λ₯Ό κ°–κ³  있음 

ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 객체의 데이터(ν•„λ“œ)λ₯Ό μ™ΈλΆ€μ—μ„œ 직접 μ ‘κ·Όν•˜μ§€ λͺ»ν•˜λ„둝 κ°μ‹ΈλŠ” 것을 μ˜λ―Έν•˜λ©°

ν•„μš”ν•œ λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œλ§Œ 데이터 변경이 κ°€λŠ₯ν•˜λ„λ‘ μ œν•œν•˜λŠ” 것을 λ§ν•œλ‹€. 

 

-μžλ°”μ—μ„œλŠ”, 객체의 ν•„λ“œλ₯Ό 직접 μ ‘κ·Όν•˜μ§€ λͺ»ν•˜λ„둝 private ν‚€μ›Œλ“œλ₯Ό μΆ”κ°€ν•œ λ’€ 데이터에 μ•ˆμ „ν•˜κ²Œ μ ‘κ·Όν•˜λ„λ‘ getter/setter λ₯Ό μ œκ³΅ν•˜κ±°λ‚˜, λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€. 

- μΊ‘μŠν™”μ˜ 핡심은 데이터λ₯Ό λ³΄ν˜Έν•˜κ³ , μ•ˆμ „ν•œ μ ‘κ·Ό 방식을 μ œκ³΅ν•œλ‹€. 

 

 

μΊ‘μŠν™”(Encapsulation) 예제 

class BankAccount {
    private int balance = 0;  // 직접 μ ‘κ·Ό λΆˆκ°€λŠ₯ (private)

    // balance 값을 λ³€κ²½ν•˜λŠ” λ©”μ„œλ“œ (setter)
    public void deposit(int amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println(amount + "원이 μž…κΈˆλ˜μ—ˆμŠ΅λ‹ˆλ‹€.");
        } else {
            System.out.println("μ˜¬λ°”λ₯Έ κΈˆμ•‘μ„ μž…λ ₯ν•˜μ„Έμš”.");
        }
    }

    // balance 값을 μ½λŠ” λ©”μ„œλ“œ (getter)
    public int getBalance() {
        return balance;
    }
}

public class Main {
    public static void main(String[] args) {
        BankAccount account = new BankAccount();
        account.deposit(1000);
        System.out.println("ν˜„μž¬ μž”μ•‘: " + account.getBalance());
    }
}

 

 

 


 

μœ„ λ‚΄μš©μ„ μ§€ν”Όν‹°ν•œν…Œ λ¨Όμ € λ¬Όμ–΄λ΄μ„œ κ°œλ…μ„ λ‹€μ‹œ ν•œλ²ˆ 머리에 λ„£κ³ 

κ³΅μ‹λ¬Έμ„œ μ½λŠ” 버릇을 듀이기 μœ„ν•΄ κ³΅μ‹ λ¬Έμ„œλ₯Ό μ°Ύμ•„λ΄€λ‹€ 

 

 

λ‹€ν˜•μ„±(polymorphism)

 

πŸ“κ³΅μ‹ λ¬Έμ„œ λ‚΄μš© 정리 

λ‹€ν˜•μ„±(Polymorphism)은 μƒλ¬Όν•™μ—μ„œ ν•˜λ‚˜μ˜ μ’…μ΄λ‚˜ κ°œμ²΄κ°€ μ—¬λŸ¬ λ‹€λ₯Έ ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” νŠΉμ„±μ„ μ˜λ―Έν•œλ‹€. 

Java 같은 μ–Έμ–΄μ—μ„œ λΆ€λͺ¨ 클래슀의 κΈ°λŠ₯을 κ³΅μœ ν•˜λ©΄μ„œλ„, 각 μžμ‹ ν΄λž˜μŠ€κ°€ κ³ μœ ν•œ λ™μž‘μ„ μ •μ˜ν•  수 μžˆλ„λ‘ ν•˜λŠ” 원리

+ μžμ‹ ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”© 해야함. 

 

예제1 - λΆ€λͺ¨ 클래슀 (Bicycle) 

public class Bicycle {
    private int gear;
    private int cadence;
    private int speed;

    public Bicycle(int startCadence, int startSpeed, int startGear) {
        this.cadence = startCadence;
        this.speed = startSpeed;
        this.gear = startGear;
    }

    public void printDescription() {
        System.out.println("\nBike is in gear " + this.gear
                + " with a cadence of " + this.cadence +
                " and travelling at a speed of " + this.speed + ".");
    }
}

 

 

 

 

예제2 - μžμ‹ 클래슀 (MountainBike) 

public class MountainBike extends Bicycle {
    private String suspension;

    public MountainBike(int startCadence, int startSpeed, int startGear, String suspensionType) {
        super(startCadence, startSpeed, startGear);
        this.setSuspension(suspensionType);
    }

    public String getSuspension(){
      return this.suspension;
    }

    public void setSuspension(String suspensionType) {
        this.suspension = suspensionType;
    }

	@Override
    public void printDescription() {
        super.printDescription(); // λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œ 호좜
        System.out.println("The MountainBike has a " + getSuspension() + " suspension.");
    }
}

 

βœ… MountainBike 클래슀 μƒμ„±μžμ— this.setSuspension(suspensionType); λ₯Ό μΆ”κ°€ν•΄μ„œ ν΄λž˜μŠ€κ°€ 생성될 λ•Œ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 값이 private λ³€μˆ˜μΈ suspension 에 λ°”λ‘œ μ μš©λ˜λ„λ‘ 함. 

βœ… μ˜€λ²„λΌμ΄λ”© λ‚΄μš©: λΆ€λͺ¨ 클래슀의 printDescription()을 MountainBike의 printDescription() μ•ˆμ—μ„œ '호좜', 즉 μžμ‹ 클래슀의 printDescription μ•ˆμ—μ„œ λΆ€λͺ¨ 클래슀의 printDescription λ₯Ό 'μ‹€ν–‰'

βœ… μ˜€λ²„λΌμ΄λ”© λͺ©μ : κΈ°λ³Έ μžμ „κ±°(Bicycle)와 λ™μΌν•œ κΈ°λŠ₯을 κ°€μ§€λ©΄μ„œλ„, "MountainBikeμ—λŠ” μ–΄λ–€ μ„œμŠ€νŽœμ…˜μ΄ μžˆλŠ”μ§€"λ₯Ό μΆ”κ°€λ‘œ 좜λ ₯ν•˜λ„λ‘ printDescription()을 μ˜€λ²„λΌμ΄λ”©

πŸ’‘μ•Œμ•„λ‘˜ 것은 !!! λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œ 이름, λ§€κ°œλ³€μˆ˜, λ°˜ν™˜ νƒ€μž…μ΄ κ°™μŒ → μ˜€λ²„λΌμ΄λ”© μ„±λ¦½λœλ‹€ !!!!

 

 

 

예제3 - μžμ‹ 클래슀 (RoadBike) 

public class RoadBike extends Bicycle {
    private int tireWidth; // 타이어 λ„ˆλΉ„ (mm λ‹¨μœ„)

    public RoadBike(int startCadence, int startSpeed, int startGear, int newTireWidth) {
        super(startCadence, startSpeed, startGear);
        this.setTireWidth(newTireWidth);
    }

    public int getTireWidth() {
        return this.tireWidth;
    }

    public void setTireWidth(int newTireWidth) {
        this.tireWidth = newTireWidth;
    }

    @Override
    public void printDescription() { // μ˜€λ²„λΌμ΄λ”©λœ λ©”μ„œλ“œ
        super.printDescription(); // λΆ€λͺ¨μ˜ printDescription() μ‹€ν–‰
        System.out.println("The RoadBike has " + getTireWidth() + " MM tires.");
    }
}

 

βœ… μœ„ λ‚΄μš©κ³Ό 동일 !! 

βœ… tireWidrh 타이어 넓이λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜λ₯Ό μΆ”κ°€μ μœΌλ‘œ 생성해 printDescription λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•œ λ’€ 좜λ ₯ν•œλ‹€. ! 

 

이제 μ •μ˜ν•œ ν΄λž˜μŠ€λ“€μ„ 좜λ ₯ν•΄λ³΄μž !! 

 

예제4 - λ©”μΈν΄λž˜μŠ€ 

public class TestBikes {
    public static void main(String[] args) {
        Bicycle bike01, bike02, bike03;

        bike01 = new Bicycle(20, 10, 1);         // 일반 μžμ „κ±° 객체
        bike02 = new MountainBike(20, 10, 5, "Dual"); // μ‚°μ•… μžμ „κ±° 객체
        bike03 = new RoadBike(40, 20, 8, 23);    // λ„λ‘œμš© μžμ „κ±° 객체

        bike01.printDescription();
        bike02.printDescription();
        bike03.printDescription();
    }
}

 

 

좜λ ₯ κ²°κ³Ό 

Bike is in gear 1 with a cadence of 20 and travelling at a speed of 10.

Bike is in gear 5 with a cadence of 20 and travelling at a speed of 10.
The MountainBike has a Dual suspension.

Bike is in gear 8 with a cadence of 40 and travelling at a speed of 20.
The RoadBike has 23 MM tires.

 

βœ… λΆ€λͺ¨ 클래슀(Bicycle) νƒ€μž…μ˜ λ³€μˆ˜μ— μ—¬λŸ¬ μžμ‹ 클래슀(MountainBike, RoadBike)의 객체λ₯Ό ν• λ‹Ήν•  수 μžˆλ‹€.

βœ… 각각 객체 νƒ€μž…μ— λ§žλŠ” printDescription λ©”μ„œλ“œκ°€ μ‹€ν–‰λœλ‹€. 

 

JVM은 μ‹€μ œ 객체의 νƒ€μž…μ„ κΈ°μ€€μœΌλ‘œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€

  • λ³€μˆ˜μ˜ νƒ€μž…μ΄ Bicycleμ΄μ§€λ§Œ, μ‹€μ œ 객체가 MountainBike λ˜λŠ” RoadBike라면 ν•΄λ‹Ή 클래슀의 μ˜€λ²„λΌμ΄λ”©λœ λ©”μ„œλ“œκ°€ μ‹€ν–‰λœλ‹€.
  • 이런 λ™μž‘μ„ "가상 λ©”μ„œλ“œ 호좜(Virtual Method Invocation)"이라고 ν•œλ‹€.
  • 즉, JVM은 λ³€μˆ˜μ˜ μ„ μ–Έλœ νƒ€μž…(Bicycle)이 μ•„λ‹ˆλΌ, μ‹€μ œ 객체의 νƒ€μž…(MountainBike, RoadBike)을 κΈ°μ€€μœΌλ‘œ λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•œλ‹€.

 

λ‹€μŒμ— μΆ”κ°€ν•  것 

μ—…μΊμŠ€νŒ…(Upcasting)κ³Ό λ‹€μš΄μΊμŠ€νŒ…(Downcasting) κ°œλ… 

  • Bicycle myBike = new MountainBike(); (μ—…μΊμŠ€νŒ…)
  • MountainBike realBike = (MountainBike) myBike; (λ‹€μš΄μΊμŠ€νŒ…)

 

μ˜€λ²„λΌμ΄λ”©κ³Ό μ˜€λ²„λ‘œλ”© 차이점 

  • μ˜€λ²„λΌμ΄λ”©(Overriding) ≠ μ˜€λ²„λ‘œλ”©(Overloading)
  • μ˜€λ²„λ‘œλ”©μ€ 같은 μ΄λ¦„μ΄μ§€λ§Œ λ§€κ°œλ³€μˆ˜κ°€ 닀름, μ˜€λ²„λΌμ΄λ”©μ€ λΆ€λͺ¨ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜λŠ” 것

 

 

 

μΊ‘μŠν™”(Encapsulation)

 

πŸ“κ³΅μ‹ λ¬Έμ„œ λ‚΄μš© 정리 

μΊ‘μŠν™”(Encapsulation)λž€?

데이터λ₯Ό λ³΄ν˜Έν•˜κ³ , 직접 접근을 μ°¨λ‹¨ν•˜μ—¬ 잘λͺ»λœ 데이터 변경을 λ°©μ§€ν•˜λŠ” 기법

private 멀버 λ³€μˆ˜ + public λ©”μ„œλ“œ(getter, setter)λ₯Ό 톡해 μ ‘κ·Ό

직접 λ³€μˆ˜ 값을 μˆ˜μ •ν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜κ³ , λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œλ§Œ λ³€κ²½ κ°€λŠ₯ν•˜λ„λ‘ μ œν•œ

 

 

λ¨Όμ €, 

μžλ°”μ—μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” λ°©λ²•μ—λŠ” μ—¬λŸ¬ 가지가 μžˆλ‹€!

λ‹€μŒμ€ λ³€μˆ˜μ˜ μ’…λ₯˜μ΄λ‹€

1️⃣ 멀버 λ³€μˆ˜ (fields) → 클래슀 λ‚΄λΆ€μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜
2️⃣ 지역 λ³€μˆ˜ (local variables) → λ©”μ„œλ“œλ‚˜ μ½”λ“œ 블둝 μ•ˆμ—μ„œ μ„ μ–Έλœ λ³€μˆ˜
3️⃣ λ§€κ°œλ³€μˆ˜ (parameters) → λ©”μ„œλ“œ μ„ μ–Έμ—μ„œ μ „λ‹¬λ°›λŠ” λ³€μˆ˜

 

μžλ°”μ—μ„œλŠ” μ ‘κ·Ό μ œν•œμž(public, private λ“±)λ₯Ό μ‚¬μš©ν•˜μ—¬ 클래슀 μ™ΈλΆ€μ—μ„œ νŠΉμ • λ³€μˆ˜(ν•„λ“œ)λ‚˜ λ©”μ„œλ“œμ— μ ‘κ·Όν•  수 μžˆλŠ” λ²”μœ„λ₯Ό μ œμ–΄ν•  수 μžˆλ‹€.
일반적으둜 μΊ‘μŠν™”(Encapsulation)의 원칙을 지킀기 μœ„ν•΄ 멀버 λ³€μˆ˜λŠ” private으둜 μ„ μ–Έν•˜κ³ , public λ©”μ„œλ“œλ₯Ό 톡해 μ ‘κ·Όν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.

 

예제1 - private μ ‘κ·Ό μ œν•œμž μ‚¬μš©ν•˜μ—¬ 클래슀 멀버 λ³€μˆ˜ μ„ μ–Έ 

public class Bicycle {
        
    private int cadence;
    private int gear;
    private int speed;
}

 

βœ… 멀버 λ³€μˆ˜λ₯Ό private으둜 μ„€μ •ν•˜λ©΄ μ™ΈλΆ€ ν΄λž˜μŠ€μ—μ„œ 직접 μ ‘κ·Όν•  수 μ—†μŒ
βœ… ν•˜μ§€λ§Œ private λ³€μˆ˜μ— μ ‘κ·Όν•˜κΈ° μœ„ν•œ getter와 setter λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•˜λ©΄ 값을 μ‘°μž‘ν•  수 있음

 

getter & setter μ‚¬μš© 이유

  • 직접 λ³€μˆ˜ 접근을 막고, μ•ˆμ „ν•œ λ°©λ²•μœΌλ‘œ 값을 μ½κ±°λ‚˜ λ³€κ²½ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
  • getλ³€μˆ˜λͺ…(), setλ³€μˆ˜λͺ…(κ°’) ν˜•μ‹μœΌλ‘œ μ‚¬μš©

 

 

예제2- μΊ‘μŠν™”λ₯Ό μ μš©ν•œ Bicycle 클래슀 

public class Bicycle {
        
    private int cadence;
    private int gear;
    private int speed;
        
    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }
        
    // Getter & Setter λ©”μ„œλ“œ (μΊ‘μŠν™”)
    public int getCadence() {
        return cadence;
    }
        
    public void setCadence(int newValue) {
        cadence = newValue;
    }
        
    public int getGear() {
        return gear;
    }
        
    public void setGear(int newValue) {
        gear = newValue;
    }
        
    public int getSpeed() {
        return speed;
    }
        
    public void applyBrake(int decrement) {
        speed -= decrement;
    }
        
    public void speedUp(int increment) {
        speed += increment;
    }
}

 

 

 + λ³€μˆ˜ νƒ€μž…(μžλ£Œν˜•)

  • μžλ°”μ˜ λͺ¨λ“  λ³€μˆ˜λŠ” μžλ£Œν˜•(type)을 κ°€μ Έμ•Ό ν•œλ‹€.
  • κΈ°λ³Έ νƒ€μž…(Primitive Type): int, float, boolean λ“±
  • μ°Έμ‘° νƒ€μž…(Reference Type): String, λ°°μ—΄(Array), 객체(Object) λ“±

 

+  넀이밍 κ·œμΉ™ 

βœ… λͺ¨λ“  λ³€μˆ˜λͺ…, ν•„λ“œλͺ…, λ©”μ„œλ“œλͺ…은 μžλ°”μ˜ 넀이밍 κ·œμΉ™μ„ 따라야 ν•œλ‹€.
βœ… 클래슀λͺ…: PascalCase (λŒ€λ¬Έμžλ‘œ μ‹œμž‘, 단어 μ—°κ²° μ‹œ λŒ€λ¬Έμžλ‘œ ꡬ뢄)
βœ… λ³€μˆ˜λͺ…, λ©”μ„œλ“œλͺ…: camelCase (μ†Œλ¬Έμžλ‘œ μ‹œμž‘, 단어 μ—°κ²° μ‹œ λŒ€λ¬Έμžλ‘œ ꡬ뢄)

 

 

 

λ‹€μŒμ— μΆ”κ°€ν•  것 

- "μ™œ μΊ‘μŠν™”λ₯Ό ν•΄μ•Ό ν•˜λŠ”κ°€?"에 λŒ€ν•œ μ‹€μš©μ μΈ 예제

(ex. setSpeed() λ©”μ„œλ“œμ— κ°’ 검증(Validation) λ‘œμ§μ„ μΆ”κ°€ν•΄μ„œ, 잘λͺ»λœ 값이 λ“€μ–΄κ°€λŠ” κ±Έ λ§‰λŠ” 예제 )

 


 

 

Oracle Java νŠœν† λ¦¬μ–Ό λ¬Έμ„œ μ’Œν‘œ 

1. λ‹€ν˜•μ„±(Polymorphism)

https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html 

 

Polymorphism (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Dev.java for updated tutorials taking advantag

docs.oracle.com

 

2. μΊ‘μŠν™”(Encapsulation) 

https://docs.oracle.com/javase/tutorial/java/javaOO/variables.html 

 

Declaring Member Variables (The Java™ Tutorials > Learning the Java Language > Classes and Objects)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Dev.java for updated tutorials taking advantag

docs.oracle.com

(곡식 λ¬Έμ„œμ— μžˆλŠ” λ‚΄μš©μ€ μ›Œλ‚™ λ‚΄μš©μ΄ λ°©λŒ€ν•˜κ³  λ§Žλ‹€λ³΄λ‹ˆ 이게 λ‹€κ°€ 아닐 것이닀? )

 

 

Oracle Java νŠœν† λ¦¬μ–Όμ—μ„œλŠ” λ‹€ν˜•μ„±(Polymorphism)κ³Ό μΊ‘μŠν™”(Encapsulation) κ°€ λ‹€λ₯Έ μΉ΄ν…Œκ³ λ¦¬λ‘œ λΆ„λ₯˜λ˜μ–΄ μžˆλ‹€. 

 

λ‘˜ λ‹€ 객체지ν–₯ν”„λ‘œκ·Έλž˜λ°(OOP) 의 μ£Όμš” κ°œλ…μ΄μ§€λ§Œ 

μœ„μ—μ„œ λ³Έ κ²ƒμ²˜λŸΌ λ‹€ν˜•μ„±μ€  상속(Inheritance)κ³Ό μΈν„°νŽ˜μ΄μŠ€(Interfaces) κ°œλ…κ³Ό λ°€μ ‘ν•˜κ²Œ μ—°κ²°λ˜μ–΄ 있고 

μΊ‘μŠν™”(Encapsulation)λŠ” 객체 λ‚΄λΆ€ 데이터λ₯Ό λ³΄ν˜Έν•˜λŠ” κ°œλ…μ΄λ―€λ‘œ ν΄λž˜μŠ€μ™€ 객체 κ°œλ…μ„ μ„€λͺ…ν•˜λŠ” λΆ€λΆ„μ—μ„œ 닀뀄진닀.