λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[OOP] ν΄λž˜μŠ€μ™€ 객체의 관계

λ°œλ‹¨

μžλ°” μž…λ¬Έμ„œμ— λ‚˜μ˜€λŠ” "클래슀의 볡제본인 객체"λΌλŠ” ν‘œν˜„μ— μ˜κ΅¬μ‹¬μ„ 가짐. 이해λ₯Ό 돕기 μœ„ν•œ λΉ„μœ λ‘œ μž‘κ°€κ°€ μ‚¬μš©ν•˜μ‹  λ“― 함. λ‘˜ μ‚¬μ΄μ˜ μ •ν™•ν•œ 관계에 λŒ€ν•΄ μ•Œκ³  μ‹Άμ–΄μ‘Œλ‹€.

좜처

ChatGPT


클래슀(Class)와 객체(Object)의 μ •μ˜μ™€ 관계

클래슀 Class

μ •μ˜

ν΄λž˜μŠ€λŠ” 객체의 청사진(blueprint) λ˜λŠ” ν…œν”Œλ¦Ώμ΄λ‹€. ν΄λž˜μŠ€λŠ” 객체가 κ°€μ Έμ•Ό ν•  속성(attributes)와 행동(behaviors)을 μ •μ˜ν•œλ‹€.

 

κ΅¬μ„±μš”μ†Œ

 

  • ν•„λ“œ(fields): ν΄λž˜μŠ€μ— μ •μ˜λœ μ†μ„±μœΌλ‘œ, 객체의 μƒνƒœλ₯Ό μ €μž₯ν•˜λŠ” λ³€μˆ˜λ“€μ΄λ‹€.
  • λ©”μ„œλ“œ(methods): 객체가 μˆ˜ν–‰ν•  수 μžˆλŠ” ν–‰λ™μœΌλ‘œ, 클래슀 λ‚΄λΆ€μ—μ„œ μ •μ˜λœ ν•¨μˆ˜λ‹€.
  • μƒμ„±μž(constructor): 객체λ₯Ό μƒμ„±ν•˜κ³  μ΄ˆκΈ°ν™”ν•˜λŠ” νŠΉλ³„ν•œ λ©”μ„œλ“œλ‹€.

 

νŠΉμ§•

 

  • 정적(Static): ν΄λž˜μŠ€λŠ” μ½”λ“œλ‘œ μ •μ˜λœ 정적인 ꡬ쑰이며, λŸ°νƒ€μž„μ— λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.
  • μ •μ˜: 클래슀λ₯Ό 톡해 객체가 μ–΄λ–»κ²Œ λ™μž‘ν• μ§€λ₯Ό μ„€κ³„ν•œλ‹€.

 

μ˜ˆμ‹œ

public class Car {
    // ν•„λ“œ(속성)
    private String model;
    private String color;

    // μƒμ„±μž
    public Car(String model, String color) {
        this.model = model;
        this.color = color;
    }

    // λ©”μ„œλ“œ(행동)
    public void startEngine() {
        System.out.println("Engine started.");
    }

    public void drive() {
        System.out.println("Car is driving.");
    }
}

 

 

 

객체 Object

μ •μ˜

κ°μ²΄λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€(instance)이닀. κ°μ²΄λŠ” 클래슀λ₯Ό 기반으둜 μƒμ„±λ˜λ©°, ν΄λž˜μŠ€μ—μ„œ μ •μ˜λœ μ†μ„±μ˜ μ‹€μ œ 값을 가지고 행동을 μˆ˜ν–‰ν•œλ‹€.

 

νŠΉμ§•

 

  • 동적(Dynamic): κ°μ²΄λŠ” λŸ°νƒ€μž„μ— μƒμ„±λ˜λ©°, 각각의 κ°μ²΄λŠ” ν΄λž˜μŠ€μ—μ„œ μ •μ˜λœ μ†μ„±μ˜ ꡬ체적인 값을 가지고 μžˆλ‹€.
  • 싀체(Concrete): κ°μ²΄λŠ” μ‹€μ œλ‘œ μ‘΄μž¬ν•˜λ©°, 클래슀의 ꡬ쑰λ₯Ό 따라 μ‹€μ œ 데이터λ₯Ό λ‹΄κ³  행동을 μˆ˜ν–‰ν•œλ‹€.

 

ꡬ성 μš”μ†Œ

 

  • μƒνƒœ(state): ν•„λ“œμ— μ €μž₯된 λ°μ΄ν„°μ˜ μ‹€μ œ κ°’.
  • 행동(behavior): λ©”μ„œλ“œλ₯Ό 톡해 κ΅¬ν˜„λœ κΈ°λŠ₯.
  • μ‹λ³„μž(identity): 각 κ°μ²΄λŠ” λ©”λͺ¨λ¦¬ μƒμ—μ„œ 고유의 μ£Όμ†Œλ₯Ό 가짐.

 

μ˜ˆμ‹œ

public class Main {
    public static void main(String[] args) {
        // 객체 생성
        Car car1 = new Car("Toyota", "Red");
        Car car2 = new Car("Honda", "Blue");

        // 객체의 μƒνƒœ
        System.out.println("Car 1 model: " + car1.model); // Output: Toyota
        System.out.println("Car 2 color: " + car2.color); // Output: Blue

        // 객체의 행동
        car1.startEngine(); // Output: Engine started.
        car2.drive(); // Output: Car is driving.
    }
}

 

ν΄λž˜μŠ€μ™€ 객체의 관계

ν΄λž˜μŠ€μ™€ 객체의 관계λ₯Ό μ΄ν•΄ν•˜λ €λ©΄ λͺ‡ 가지 핡심 κ°œλ…μ„ λͺ…ν™•μ‹œ ν•  ν•„μš”κ°€ μžˆλ‹€.

 

1. 청사진과 μ‹€μ œ

ν΄λž˜μŠ€λŠ” 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ 청사진이닀. μ‹€μ œλ‘œ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λ˜λŠ” 것은 객체이며, ν΄λž˜μŠ€λŠ” κ·Έ 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ μ •μ˜μΌ 뿐이닀.

 

2. μΈμŠ€ν„΄μŠ€ν™”

κ°μ²΄λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€μ΄λ‹€. ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ 속성 및 λ©”μ„œλ“œλ₯Ό μ‹€μ œλ‘œ 가지고 μžˆλŠ” 싀체가 객체이닀.

 

3. λ‹€μ–‘μ„±

λ™μΌν•œ ν΄λž˜μŠ€μ—μ„œ μ—¬λŸ¬ 객체λ₯Ό 생성할 수 있으며, 각 κ°μ²΄λŠ” 클래슀의 ν•„λ“œμ— λŒ€ν•΄ μ„œλ‘œ λ‹€λ₯Έ μƒνƒœλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

 

4. ν–‰λ™μ˜ 곡유

ν΄λž˜μŠ€λŠ” 행동(λ©”μ„œλ“œ)λ₯Ό μ •μ˜ν•˜κ³ , κ·Έ 행동은 λͺ¨λ“  객체가 κ³΅μœ ν•œλ‹€. κ°μ²΄λŠ” 이 행동을 μ‹€ν–‰ν•¨μœΌλ‘œμ¨ ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ λ™μž‘μ„ μˆ˜ν–‰ν•œλ‹€.

 

"볡제본"의 μ˜€ν•΄

λ³΅μ œλ³Έμ΄λΌλŠ” ν‘œν˜„μ˜ ν•œκ³„ : "객체가 클래슀의 λ³΅μ œλ³Έμ΄λ‹€"λΌλŠ” ν‘œν˜„μ€ ν΄λž˜μŠ€μ™€ 객체의 관계λ₯Ό μ„€λͺ…ν•˜λŠ” 데에 μ‚¬μš©λ  수 μžˆμ§€λ§Œ, μ΄λŠ” λ³΅μ œλΌλŠ” μš©μ–΄κ°€ κ°€λ¦¬ν‚€λŠ” 의미λ₯Ό 잘λͺ» 전달할 수 μžˆλ‹€.

 

  • 볡제본: 일반적으둜 λ³΅μ œλ³Έμ€ 원본과 λ™μΌν•œ 볡사본을 μ˜λ―Έν•œλ‹€. κ·ΈλŸ¬λ‚˜ κ°μ²΄λŠ” 클래슀의 μ™„μ „ν•œ 볡사본이 μ•„λ‹ˆλ‹€.
  • 싀체화: κ°μ²΄λŠ” 클래슀의 섀계에 따라 μ‹€μ²΄ν™”λœ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€μ΄λ©°, ν΄λž˜μŠ€μ™€ λ™μΌν•œ ꡬ쑰λ₯Ό κ°€μ§ˆ 뿐, 객체 κ°„μ˜ μƒνƒœκ°€ μ„œλ‘œ λ‹€λ₯Ό 수 μžˆλ‹€.

 

μ •ν™•ν•œ λΉ„μœ 

1. 건좕 섀계도와 건물

 

  • 클래슀: 건좕 섀계도에 λΉ„μœ ν•  수 μžˆλ‹€. μ„€κ³„λ„λŠ” 건물의 ꡬ쑰와 κΈ°λŠ₯을 μ •μ˜ν•˜μ§€λ§Œ, μžμ²΄λ‘œλŠ” 물리적인 ν˜•νƒœλ₯Ό 가지지 μ•ŠλŠ”λ‹€.
  • 객체: 섀계도λ₯Ό 기반으둜 지어진 건물둜 λΉ„μœ ν•  수 μžˆλ‹€. 각 건물은 섀계도λ₯Ό 기반으둜 λ§Œλ“€μ–΄μ§€μ§€λ§Œ, μ‹€μ œλ‘œλŠ” 독립적인 μ‹€μ²΄λ‘œ μ‘΄μž¬ν•œλ‹€.

2. μΏ ν‚€ ν‹€κ³Ό μΏ ν‚€

 

  • 클래슀: μΏ ν‚€λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ μΏ ν‚€ ν‹€κ³Ό κ°™λ‹€. μΏ ν‚€ 틀은 μΏ ν‚€μ˜ λͺ¨μ–‘을 κ²°μ •ν•˜μ§€λ§Œ, 틀이 μ‹€μ œ μΏ ν‚€κ°€ λ˜λŠ” 것은 μ•„λ‹ˆλ‹€.
  • 객체: μΏ ν‚€ 틀을 μ‚¬μš©ν•˜μ—¬ λ§Œλ“€μ–΄μ§„ 각각의 μΏ ν‚€λ‹€. 쿠킀듀은 λͺ¨λ‘ 같은 λͺ¨μ–‘을 κ°€μ§€μ§€λ§Œ, κ°œλ³„μ μœΌλ‘œ μ‘΄μž¬ν•œλ‹€.