λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Today I Learned(TIL)/Java

Java 기본편 κ°•μ˜_객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

by carrot0911 2024. 11. 26.

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

 

절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 1 - μ‹œμž‘

절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ° vs 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ 이름 κ·ΈλŒ€λ‘œ 절차λ₯Ό 지ν–₯ν•œλ‹€. μ‰½κ²Œ μ΄μ•ΌκΈ°ν•΄μ„œ μ‹€ν–‰ μˆœμ„œλ₯Ό μ€‘μš”ν•˜κ²Œ μƒκ°ν•˜λŠ” 방식이닀.
  • 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ ν”„λ‘œκ·Έλž¨μ˜ 흐름을 순차적으둜 λ”°λ₯΄λ©° μ²˜λ¦¬ν•˜λŠ” 방식이닀. 즉, "μ–΄λ–»κ²Œ"λ₯Ό μ€‘μ‹¬μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ° ν•œλ‹€.

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ 이름 κ·ΈλŒ€λ‘œ 객체λ₯Ό 지ν–₯ν•œλ‹€. μ‰½κ²Œ μ΄μ•ΌκΈ°ν•΄μ„œ 객체λ₯Ό μ€‘μš”ν•˜κ²Œ μƒκ°ν•˜λŠ” 방식이닀.
  • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μ‹€μ œ μ„Έκ³„μ˜ μ‚¬λ¬Όμ΄λ‚˜ 사건을 객체둜 보고, μ΄λŸ¬ν•œ 객체듀 κ°„μ˜ μƒν˜Έμž‘μš©μ„ μ€‘μ‹¬μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ°ν•˜λŠ” 방식이닀. 즉, "무엇을" μ€‘μ‹¬μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ° ν•œλ‹€.

λ‘˜μ˜ μ€‘μš”ν•œ 차이

  • 절차 지ν–₯은 데이터와 ν•΄λ‹Ή 데이터에 λŒ€ν•œ 처리 방식이 λΆ„λ¦¬λ˜μ–΄ μžˆλ‹€. 반면 객체 지ν–₯μ—μ„œλŠ” 데이터와 κ·Έ 데이터에 λŒ€ν•œ 행동(λ©”μ„œλ“œ)이 ν•˜λ‚˜μ˜ '객체' μ•ˆμ— ν•¨κ»˜ ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

 

절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

package oop1;

public class MusicPlayerMain1 {

    public static void main(String[] args) {
        int volume = 0;
        boolean inOn = false;

        // μŒμ•… ν”Œλ ˆμ΄μ–΄ 켜기
        inOn = true;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.");

        // λ³Όλ₯¨ 증가
        volume++;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + volume);
        // λ³Όλ₯¨ 증가
        volume++;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + volume);
        // λ³Όλ₯¨ κ°μ†Œ
        volume--;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + volume);

        // μŒμ‚­ ν”Œλ ˆμ΄μ–΄ μƒνƒœ
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ μƒνƒœ 확인");
        if (inOn) {
            System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ ON, λ³Όλ₯¨: " + volume);
        } else {
            System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ OFF");
        }

        // μŒμ•… ν”Œλ ˆμ΄μ–΄ 끄기
        inOn = false;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό μ’…λ£Œν•©λ‹ˆλ‹€.");
    }
}

 

절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 2 - 데이터 묢음

package oop1;

public class MusicPlayerData {
    int volume = 0;
    boolean isOn = false;
}

μŒμ•… ν”Œλ ˆμ΄μ–΄μ— μ‚¬μš©λ˜λŠ” voulume, isOn 속성을 MusicPlayerData의 멀버 λ³€μˆ˜μ— ν¬ν•¨ν–ˆλ‹€.

package oop1;

public class MusicPlayerMain2 {

    public static void main(String[] args) {
        MusicPlayerData data = new MusicPlayerData();

        // μŒμ•… ν”Œλ ˆμ΄μ–΄ 켜기
        data.isOn = true;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.");

        // λ³Όλ₯¨ 증가
        data.volume++;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + data.volume);
        // λ³Όλ₯¨ 증가
        data.volume++;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + data.volume);
        // λ³Όλ₯¨ κ°μ†Œ
        data.volume++;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + data.volume);

        // μŒμ‚­ ν”Œλ ˆμ΄μ–΄ μƒνƒœ
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ μƒνƒœ 확인");
        if (data.isOn) {
            System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ ON, λ³Όλ₯¨: " + data.volume);
        } else {
            System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ OFF");
        }

        // μŒμ•… ν”Œλ ˆμ΄μ–΄ 끄기
        data.isOn = false;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό μ’…λ£Œν•©λ‹ˆλ‹€.");
    }
}

μŒμ•… ν”Œλ ˆμ΄μ–΄μ™€ κ΄€λ ¨λœ λ°μ΄ν„°λŠ” MusicPlayerData ν΄λž˜μŠ€μ— μ‘΄μž¬ν•œλ‹€.
이후에 ν”„λ‘œκ·Έλž¨ 둜직이 더 λ³΅μž‘ν•΄μ Έμ„œ λ‹€μ–‘ν•œ λ³€μˆ˜λ“€μ΄ μΆ”κ°€λ˜λ”λΌλ„ μŒμ•… ν”Œλ ˆμ΄μ–΄μ™€ κ΄€λ ¨λœ λ³€μˆ˜λ“€μ€ MusicPlayerData 객체에 μ†ν•΄μžˆμœΌλ―€λ‘œ μ‰½κ²Œ ꡬ뢄할 수 μžˆλ‹€.

 

절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 3 - λ©”μ„œλ“œ μΆ”μΆœ

μ€‘λ³΅λ˜λŠ” 뢀뢄이 μ‘΄μž¬ν•œλ‹€.

// λ³Όλ₯¨ 증가
data.volume++;
System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + data.volume);

// λ³Όλ₯¨ 증가
data.volume++;
System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + data.volume);

그리고 각각의 κΈ°λŠ₯듀은 이후에 μž¬μ‚¬μš©λ  κ°€λŠ₯성이 λ†’λ‹€.

  • μŒμ•… ν”Œλ ˆμ΄μ–΄ 켜기, 끄기
  • λ³Όλ₯¨ 증가, κ°μ†Œ
  • μŒμ•… ν”Œλ ˆμ΄μ–΄ μƒνƒœ 좜λ ₯
package oop1;

public class MusicPlayerMain2 {

    public static void main(String[] args) {
        MusicPlayerData data = new MusicPlayerData();

        // μŒμ•… ν”Œλ ˆμ΄μ–΄ 켜기
        on(data);

        // λ³Όλ₯¨ 증가
        volumeUp(data);
        // λ³Όλ₯¨ 증가
        volumeUp(data);
        // λ³Όλ₯¨ κ°μ†Œ
        volumeDown(data);

        // μŒμ‚­ ν”Œλ ˆμ΄μ–΄ μƒνƒœ
        showStatus(data);

        // μŒμ•… ν”Œλ ˆμ΄μ–΄ 끄기
        off(data);
    }

    static void on(MusicPlayerData data) {
        data.isOn = true;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.");
    }

    static void off(MusicPlayerData data) {
        data.isOn = false;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό μ’…λ£Œν•©λ‹ˆλ‹€.");
    }

    static void volumeUp(MusicPlayerData data) {
        data.volume++;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + data.volume);
    }

    static void volumeDown(MusicPlayerData data) {
        data.volume--;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + data.volume);
    }

    static void showStatus(MusicPlayerData data) {
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ μƒνƒœ 확인");
        if (data.isOn) {
            System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ ON, λ³Όλ₯¨: " + data.volume);
        } else {
            System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ OFF");
        }
    }
}

각각의 κΈ°λŠ₯을 λ©”μ„œλ“œλ‘œ λ§Œλ“  덕뢄에 각각의 κΈ°λŠ₯이 λͺ¨λ“ˆν™”λ˜μ—ˆλ‹€. 덕뢄에 λ‹€μŒκ³Ό 같은 μž₯점이 생겼닀.

  • 쀑볡 제거 : 둜직 쀑볡이 μ œκ±°λ˜μ—ˆλ‹€. 같은 둜직이 ν•„μš”ν•˜λ©΄ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬λ²ˆ ν˜ΈμΆœν•˜λ©΄ λœλ‹€.
  • λ³€κ²½ 영ν–₯ λ²”μœ„ : κΈ°λŠ₯을 μˆ˜μ •ν•  λ•Œ ν•΄λ‹Ή λ©”μ„œλ“œ λ‚΄λΆ€λ§Œ λ³€κ²½ν•˜λ©΄ λœλ‹€.
  • λ©”μ„œλ“œ 이름 μΆ”κ°€ : λ©”μ„œλ“œ 이름을 톡해 μ½”λ“œλ₯Ό 더 μ‰½κ²Œ 이해할 수 μžˆλ‹€.

 

βœ”οΈ λͺ¨λ“ˆν™”

μ‰½κ²Œ μ΄μ•ΌκΈ°ν•΄μ„œ 레고 블둝을 μƒκ°ν•˜λ©΄ λœλ‹€.
ν•„μš”ν•œ 블둝을 κ°€μ Έλ‹€ κΌ½μ•„μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. μ—¬κΈ°μ„œλŠ” μŒμ•… ν”Œλ ˆμ΄μ–΄μ˜ κΈ°λŠ₯이 ν•„μš”ν•˜λ©΄ ν•΄λ‹Ή κΈ°λŠ₯을 λ©”μ„œλ“œ 호좜만으둜 μ†μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ ν•œκ³„

μ§€κΈˆκΉŒμ§€ 클래슀λ₯Ό μ‚¬μš©ν•΄μ„œ κ΄€λ ¨λœ 데이터λ₯Ό ν•˜λ‚˜λ‘œ λ¬Άκ³ , 또 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ 각각의 κΈ°λŠ₯을 λͺ¨λ“ˆν™”ν–ˆλ‹€. 덕뢄에 μƒλ‹Ήνžˆ κΉ”λ”ν•˜κ³  읽기 μ’‹κ³ , μœ μ§€λ³΄μˆ˜ ν•˜κΈ° 쒋은 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμ—ˆλ‹€.

μž‘μ„±ν•œ μ½”λ“œμ˜ ν•œκ³„λŠ” λ°”λ‘œ 데이터와 κΈ°λŠ₯이 λΆ„λ¦¬λ˜μ–΄ μžˆλ‹€λŠ” 점이닀. μŒμ•… ν”Œλ ˆμ΄μ–΄μ˜ λ°μ΄ν„°λŠ” MusicPlayerData에 μžˆλŠ”λ°, κ·Έ 데이터λ₯Ό μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯은 MusicPlayerMain2에 μžˆλŠ” 각각의 λ©”μ„œλ“œμ— λΆ„λ¦¬λ˜μ–΄ μžˆλ‹€. κ·Έλž˜μ„œ μŒμ•… ν”Œλ ˆμ΄μ–΄μ™€ κ΄€λ ¨λœ λ°μ΄ν„°λŠ” MusicPlayerDataλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜κ³ , μŒμ•… ν”Œλ ˆμ΄μ–΄μ™€ κ΄€λ ¨λœ κΈ°λŠ₯은 MusicPlayerMain2의 각 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

데이터와 κ·Έ 데이터λ₯Ό μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯은 맀우 λ°€μ ‘ν•˜κ²Œ μ—°κ΄€λ˜μ–΄ μžˆλ‹€. 각각의 λ©”μ„œλ“œλ₯Ό 보면 λŒ€λΆ€λΆ„ MusicPlayerData의 데이터λ₯Ό μ‚¬μš©ν•œλ‹€. λ”°λΌμ„œ 이후에 κ΄€λ ¨λœ 데이터가 λ³€κ²½λ˜λ©΄ MusicPlayerMain2 λΆ€λΆ„μ˜ λ©”μ„œλ“œλ“€λ„ ν•¨κ»˜ λ³€κ²½ν•΄μ•Ό ν•œλ‹€. 그리고 μ΄λ ‡κ²Œ 데이터와 κΈ°λŠ₯이 λΆ„λ¦¬λ˜μ–΄ 있으면 μœ μ§€λ³΄μˆ˜ κ΄€μ μ—μ„œλ„ 관리 ν¬μΈνŠΈκ°€ 2곳으둜 λŠ˜μ–΄λ‚œλ‹€.

객체 지ν–₯ ν”„λ‘œκ·Έλž¨μ΄ λ‚˜μ˜€κΈ° μ „κΉŒμ§€λŠ” μ§€κΈˆκ³Ό 같이 데이터와 κΈ°λŠ₯이 λΆ„λ¦¬λ˜μ–΄ μžˆμ—ˆλ‹€.
ν•˜μ§€λ§Œ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄ λ‚˜μ˜€λ©΄μ„œ 데이터와 κΈ°λŠ₯을 μ˜¨μ „νžˆ ν•˜λ‚˜λ‘œ λ¬Άμ–΄μ„œ μ‚¬μš©ν•  수 있게 λ˜μ—ˆλ‹€.

 

ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œ

package oop1;

public class ValueData {
    int value;
}
package oop1;

public class ValueDataMain {

    public static void main(String[] args) {
        ValueData valueData = new ValueData();

        add(valueData);
        add(valueData);
        add(valueData);
        System.out.println("μ΅œμ’… 숫자: " + valueData.value);
    }

    static void add(ValueData valueData) {
        valueData.value++;
        System.out.println("숫자 증가 value: " + valueData.value);
    }
}

숫자λ₯Ό μ¦κ°€μ‹œν‚€λŠ” κΈ°λŠ₯도 ν΄λž˜μŠ€μ— ν•¨κ»˜ ν¬ν•¨ν•΄μ„œ μ •μ˜ν•΄λ³΄μž.

package oop1;

public class ValueData {
    int value;

    void add() {
        value++;
        System.out.println("숫자 증가 value: " + value);
    }
}

 

βœ”οΈ μ°Έκ³  - add( ) λ©”μ„œλ“œμ—λŠ” static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

λ©”μ„œλ“œλŠ” 객체λ₯Ό 생성해야 ν˜ΈμΆœν•  수 μžˆλ‹€. 그런데 static이 λΆ™μœΌλ©΄ 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€.

 

package oop1;

public class ValueObjectMain {

    public static void main(String[] args) {
        ValueData valueData = new ValueData();

        valueData.add();
        valueData.add();
        valueData.add();
        
        System.out.println("μ΅œμ’… 숫자: " + valueData.value);
    }
}

정리

  • ν΄λž˜μŠ€λŠ” 속성(데이터, λ©€λ²„λ³€μˆ˜)κ³Ό κΈ°λŠ₯(λ©”μ„œλ“œ)을 μ •μ˜ν•  수 μžˆλ‹€.
  • κ°μ²΄λŠ” μžμ‹ μ˜ λ©”μ„œλ“œλ₯Ό 톡해 μžμ‹ μ˜ 멀버 λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλ‹€.
    • 객체의 λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μ ‘κ·Όν•˜λŠ” 멀버 λ³€μˆ˜λŠ” 객체 μžμ‹ μ˜ 멀버 λ³€μˆ˜μ΄λ‹€.

 

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

이제 데이터와 κΈ°λŠ₯을 ν•˜λ‚˜λ‘œ λ¬Άμ–΄μ„œ μŒμ•… ν”Œλ ˆμ΄μ–΄λΌλŠ” κ°œλ…μ„ μ˜¨μ „νžˆ ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ— λ‹΄μ•„λ³΄μž. ν”„λ‘œλ₯΄κ°¬μ„ μž‘μ„±ν•˜λŠ” μ ˆμ°¨λ„ μ€‘μš”ν•˜μ§€λ§Œ μŒμ•… ν”Œλ ˆμ΄μ–΄λΌλŠ” κ°œλ…μ„ 객체둜 μ˜¨μ „νžˆ λ§Œλ“œλŠ” 것이 더 μ€‘μš”ν•˜λ‹€.
그러기 μœ„ν•΄μ„œλŠ” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ μˆœμ„œλ³΄λ‹€λŠ” μŒμ•… ν”Œλ ˆμ΄μ–΄ 클래슀λ₯Ό λ§Œλ“œλŠ” 것 μžμ²΄μ— 집쀑해야 ν•œλ‹€. μŒμ•… ν”Œλ ˆμ΄μ–΄κ°€ μ–΄λ–€ 속성(데이터)을 가지고 μ–΄λ–€ κΈ°λŠ₯(λ©”μ„œλ“œ)을 μ œκ³΅ν•˜λŠ”μ§€ 이 뢀뢄에 μ΄ˆμ μ„ λ§žμΆ”μ–΄μ•Ό ν•œλ‹€.

μŒμ•… ν”Œλ ˆμ΄μ–΄

  • 속성 : volume, isOn
  • κΈ°λŠ₯ : on( ), off( ), volumeUp( ), volumeDown( ), showStatus( )

객체 지ν–₯ μŒμ•… ν”Œλ ˆμ΄μ–΄

package oop1;

public class MusicPlayer {

    int volume = 0;
    boolean isOn = false;

    void on() {
        isOn = true;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.");
    }

    void off() {
        isOn = false;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό μ’…λ£Œν•©λ‹ˆλ‹€.");
    }

    void volumeUp() {
        volume++;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + volume);
    }

    void volumeDown() {
        volume--;
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ λ³Όλ₯¨: " + volume);
    }

    void showStatus() {
        System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ μƒνƒœ 확인");
        if (isOn) {
            System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ ON, λ³Όλ₯¨: " + volume);
        } else {
            System.out.println("μŒμ•… ν”Œλ ˆμ΄μ–΄ OFF");
        }
    }
}

MusicPlayer ν΄λž˜μŠ€μ— μŒμ•… ν”Œλ ˆμ΄μ–΄μ— ν•„μš”ν•œ 속성과 κΈ°λŠ₯을 λͺ¨λ‘ μ •μ˜ν–ˆλ‹€. 이제 μŒμ•… ν”Œλ ˆμ΄μ–΄κ°€ ν•„μš”ν•œ κ³³μ—μ„œ 이 클래슀만 있으면 μ˜¨μ „ν•œ μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό μ‚¬μš©ν•˜λŠ”λ° ν•„μš”ν•œ λͺ¨λ“  속성과 κΈ°λŠ₯이 ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ— ν¬ν•¨λ˜μ–΄ μžˆλ‹€!

package oop1;

public class MusicPlayerMain4 {
    public static void main(String[] args) {
        MusicPlayer musicPlayer = new MusicPlayer();

        // μŒμ•… ν”Œλ ˆμ΄μ–΄ 켜기
        musicPlayer.on();

        // λ³Όλ₯¨ 증가
        musicPlayer.volumeUp();
        // λ³Όλ₯¨ 증가
        musicPlayer.volumeUp();
        // λ³Όλ₯¨ κ°μ†Œ
        musicPlayer.volumeDown();

        // μŒμ‚­ ν”Œλ ˆμ΄μ–΄ μƒνƒœ
        musicPlayer.showStatus();
        // μŒμ•… ν”Œλ ˆμ΄μ–΄ 끄기
        musicPlayer.off();
    }
}

MusicPlayer 객체λ₯Ό μƒμ„±ν•˜κ³  ν•„μš”ν•œ κΈ°λŠ₯(λ©”μ„œλ“œ)을 ν˜ΈμΆœν•˜κΈ°λ§Œ ν•˜λ©΄ λœλ‹€. ν•„μš”ν•œ λͺ¨λ“  것은 MusicPalyer μ•ˆμ— λ“€μ–΄μžˆλ‹€!

  • MusicPlayerλ₯Ό μ‚¬μš©ν•˜λŠ” μž…μž₯μ—μ„œλŠ” MusicPlayer의 데이터인 volume, isOn 같은 λ°μ΄ν„°λŠ” μ „ν˜€ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • MusicPlayerλ₯Ό μ‚¬μš©ν•˜λŠ” μž…μž₯μ—μ„œλŠ” 이제 MusicPlayer 내뢀에 μ–΄λ–€ 속성(데이터)이 μžˆλŠ”μ§€ μ „ν˜€ λͺ°λΌλ„ λœλ‹€.
    MusicPlayerλ₯Ό μ‚¬μš©ν•˜λŠ” μž…μž₯μ—μ„œλŠ” λ‹¨μˆœν•˜κ²Œ MusicPlayerκ°€ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯ 쀑에 ν•„μš”ν•œ κΈ°λŠ₯을 ν˜ΈμΆœν•΄μ„œ μ‚¬μš©ν•˜κΈ°λ§Œ ν•˜λ©΄ λœλ‹€.

μΊ‘μŠν™”

MusicPlayerλ₯Ό 보면 μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό κ΅¬μ„±ν•˜κΈ° μœ„ν•œ 속성과 κΈ°λŠ₯이 마치 ν•˜λ‚˜μ˜ μΊ‘μŠμ— μŒ“μ—¬μžˆλŠ” 것 κ°™λ‹€. μ΄λ ‡κ²Œ 속성과 κΈ°λŠ₯을 ν•˜λ‚˜λ‘œ λ¬Άμ–΄μ„œ ν•„μš”ν•œ κΈ°λŠ₯을 λ©”μ„œλ“œλ₯Ό 톡해 외뢀에 μ œκ³΅ν•˜λŠ” 것을 μΊ‘μŠν™”λΌκ³  ν•œλ‹€.

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 덕뢄에 μŒμ•… ν”Œλ ˆμ΄μ–΄ 객체λ₯Ό μ‚¬μš©ν•˜λŠ” μž…μž₯μ—μ„œ μ§„μ§œ μŒμ•… ν”Œλ ˆμ΄μ–΄λ₯Ό λ§Œλ“€κ³  μ‚¬μš©ν•˜λŠ” κ²ƒμ²˜λŸΌ μΉœμˆ™ν•˜κ²Œ λŠκ»΄μ§„λ‹€. κ·Έλž˜μ„œ μ½”λ“œκ°€ 더 읽기 μ‰¬μš΄ 것은 물둠이고, 속성과 κΈ°λŠ₯이 ν•œ 곳에 있기 λ•Œλ¬Έμ— 변경도 더 μ‰¬μ›Œμ§„λ‹€.
예λ₯Ό λ“€μ–΄μ„œ MusicPlayer λ‚΄λΆ€ μ½”λ“œκ°€ λ³€ν•˜λŠ” κ²½μš°μ— λ‹€λ₯Έ μ½”λ“œλŠ” λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. MusicPlayer의 volumeμ΄λΌλŠ” ν•„λ“œ 이름이 λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ λ³€ν•œλ‹€κ³  ν•  λ•Œ MusicPlayer λ‚΄λΆ€λ§Œ λ³€κ²½ν•˜λ©΄ λœλ‹€. 또 μŒμ•… ν”Œλ ˆμ΄μ–΄κ°€ λ‚΄λΆ€μ—μ„œ 좜λ ₯ν•˜λŠ” λ©”μ‹œμ§€λ₯Ό λ³€κ²½ν•  λ•Œλ„ MusicPlayer λ‚΄λΆ€λ§Œ λ³€κ²½ν•˜λ©΄ λœλ‹€. 이 경우 MusicPlayerλ₯Ό μ‚¬μš©ν•˜λŠ” κ°œλ°œμžλŠ” μ½”λ“œλ₯Ό μ „ν˜€ λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. λ¬Όλ‘  μ™ΈλΆ€μ—μ„œ ν˜ΈμΆœν•˜λŠ” MusicPlayer의 λ©”μ„œλ“œ 이름을 λ³€κ²½ν•œλ‹€λ©΄ MusicPlayerλ₯Ό μ‚¬μš©ν•˜λŠ” 곳의 μ½”λ“œλ„ λ³€κ²½ν•΄μ•Ό ν•œλ‹€.

 

 

정리

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° vs 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°κ³Ό 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μ„œλ‘œ λŒ€μΉ˜λ˜λŠ” κ°œλ…μ΄ μ•„λ‹ˆλ‹€. 객체 지ν–₯이라도 ν”„λ‘œκ·Έλž¨μ˜ μž‘λ™ μˆœμ„œ λŠ” μ€‘μš”ν•˜λ‹€. λ‹€λ§Œ μ–΄λ””에 λ” μ΄ˆμ μ„ λ§žμΆ”λŠ”κ°€μ— λ‘˜μ˜ μ°¨μ΄κ°€ μžˆλ‹€. 
객체 μ§€ν–₯의 κ²½μš° κ°μ²΄μ˜ μ„€κ³„와 κ΄€κ³„λ₯Ό μ€‘μ‹œν•œλ‹€. λ°˜λ©΄ μ ˆμ°¨ μ§€ν–₯의 κ²½μš° λ°μ΄ν„°μ™€ κΈ°λŠ₯이 λΆ„λ¦¬λ˜μ–΄ μžˆκ³ , ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ κ·Έ μˆœμ„œμ— μ΄ˆμ μ„ λ§žμΆ˜λ‹€.

절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ 이름 κ·ΈλŒ€λ‘œ 절차λ₯Ό 지ν–₯ν•œλ‹€. μ‰½κ²Œ μ΄μ•ΌκΈ°ν•΄μ„œ μ‹€ν–‰ μˆœμ„œλ₯Ό μ€‘μš”ν•˜κ²Œ μƒκ°ν•˜λŠ” 방식이 λ‹€.
  • 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ ν”„λ‘œκ·Έλž¨μ˜ 흐름을 순차적으둜 λ”°λ₯΄λ©° μ²˜λ¦¬ν•˜λŠ” 방식이닀. 즉, "μ–΄λ–»κ²Œ"λ₯Ό μ€‘μ‹¬μœΌλ‘œ ν”„λ‘œ 그래밍 ν•œλ‹€.

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ 이름 κ·ΈλŒ€λ‘œ 객체λ₯Ό 지ν–₯ν•œλ‹€. μ‰½κ²Œ μ΄μ•ΌκΈ°ν•΄μ„œ 객체λ₯Ό μ€‘μš”ν•˜κ²Œ μƒκ°ν•˜λŠ” 방식이닀.
  • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μ‹€μ œ μ„Έκ³„μ˜ μ‚¬λ¬Όμ΄λ‚˜ 사건을 객체둜 보고, μ΄λŸ¬ν•œ 객체듀 κ°„μ˜ μƒν˜Έμž‘μš©μ„ μ€‘μ‹¬μœΌλ‘œ ν”„ λ‘œκ·Έλž˜λ°ν•˜λŠ” 방식이닀. 즉, "무엇을" μ€‘μ‹¬μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ° ν•œλ‹€.

λ‘˜μ˜ μ€‘μš”ν•œ 차이

  • 절차 μ§€ν–₯은 λ°μ΄ν„°μ™€ ν•΄λ‹Ή λ°μ΄ν„°μ— λŒ€ν•œ μ²˜λ¦¬ λ°©μ‹μ΄ λΆ„λ¦¬λ˜μ–΄ μžˆλ‹€. λ°˜λ©΄ κ°μ²΄ μ§€ν–₯μ—μ„œλŠ” λ°μ΄ν„°μ™€ κ·Έ λ°μ΄ν„° μ— λŒ€ν•œ ν–‰λ™(λ©”μ„œλ“œ)이 ν•˜λ‚˜μ˜ '객체' μ•ˆμ— ν•¨κ»˜ ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

객체

μ„Έμƒμ˜ λͺ¨λ“  μ‚¬λ¬Όμ„ λ‹¨μˆœν•˜κ²Œ μΆ”상화해보면 μ†μ„±(데이터)κ³Ό κΈ°λŠ₯ λ”± 2κ°€μ§€λ‘œ μ„€λͺ…ν•  μˆ˜ μžˆλ‹€.

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ λͺ¨λ“  μ‚¬λ¬Όμ„ μ†μ„±κ³Ό κΈ°λŠ₯을 κ°€μ§„ κ°μ²΄λ‘œ μƒκ°ν•˜λŠ” κ²ƒμ΄λ‹€. κ°μ²΄μ—λŠ” μ†μ„±κ³Ό κΈ°λŠ₯만 μ‘΄μž¬ν•œλ‹€. 
μ΄λ ‡κ²Œ λ‹¨μˆœν™”ν•˜λ©΄ μ„Έμƒμ— μžˆλŠ” κ°μ²΄λ“€μ„ μ»΄ν“¨ν„° ν”„λ‘œκ·Έλž¨μœΌλ‘œ μ‰½κ²Œ μ„€κ³„ν•  μˆ˜ μžˆλ‹€.
이런 μž₯점듀 λ•λΆ„에 μ§€κΈˆμ€ κ°μ²΄ μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄ κ°€μž₯ λ§Žμ΄ μ‚¬μš©λœλ‹€.
참고둜 싀세계와 객체가 항상 1:1둜 λ§€μΉ­λ˜λŠ” 것은 μ•„λ‹ˆλ‹€.

객체 지ν–₯의 νŠΉμ§•μ€ 속성과 κΈ°λŠ₯을 ν•˜λ‚˜λ‘œ λ¬ΆλŠ” 것 뿐만 μ•„λ‹ˆλΌ μΊ‘μŠν™”, 상속, λ‹€ν˜•μ„±, 좔상화, λ©”μ‹œμ§€ 전달 같은 λ‹€μ–‘ν•œ νŠΉμ§•λ“€μ΄ μžˆλ‹€.