[Java] 객체 지향 프로그래밍

코드 속의 "진돌"·2024년 2월 2일
0
post-thumbnail

✅ 객체 지향 프로그래밍


데이터와 기능을 하나로 묶어서 음악 플레이어라는 개념을 온전히 하나의 클래스에 담아보자. 음악 플레이어라는 개념을 객체로 온전히 만드는 것이 중요하다.
그러기 위해서는 프로그램의 실행 순서 보다는 음악 플레이어 클래스를 만드는 것 자체에 집중해야 한다. 음악 플레이어가 어떤 속성(데이터)을 가지고 어떤 기능(메서드)을 제공하는지 이 부분에 초점을 맞추어야 한다.




✅ 객체 지향 음악 플레이어


음악 플레이어

  • 속성 : volume, isOn
  • 기능 : on(), off(), volumeUp(), volumeDown(), showStatus()

✏️ MusicPlayer

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 클래스에 음악 플레이어에 필요한 속성과 기능을 모두 정의했다. 이제 음악 플레이어가 필요한 곳에서 이 클래스만 있으면 온전한 음악 플레이어를 생성해서 사용할 수 있다.



✏️ MusicPlayerMain4

package oop1;

/**
 * 객체 지향
 */
public class MusicPlayerMain4 {

  public static void main(String[] args) {
    MusicPlayer player = new MusicPlayer();

    // 음악 플레이어 켜기
    player.on();;

    // 볼륨 증가
    player.volumeUp();
    // 볼륨 증가
    player.volumeUp();

    // 볼륨 감소
    player.volumeDown();

    // 음악 플레이어 상태
    player.showStatus();

    // 음악 플레이어 끄기
    player.off();
  }
}



🖥️ 실행 결과

MusicPlayer를 사용하는 코드를 보자. MusicPlayer 객체를 생성하고 필요한 기능(메서드)을 호출하기만 하면 된다.

  • MusicPlayer를 사용하는 입장에서는 MusicPlayer의 데이터인 volume, isOn 같은 데이터는 전혀 사용하지 않는다.
  • MusicPlayer를 사용하는 입장에서는 이제 MusicPlayer 내부에 어떤 속성(데이터)이 있는지 전혀 몰라도 된다. MusicPlayer를 사용하는 입장에서는 단순하게 MusicPlayer가 제공하는 기능 중에 필요한 기능을 호출해서 사용하기만 하면 된다.



💡 캡슐화

MusicPlayer를 보면 음악 플레이어를 구성하기 위한 속성과 기능이 마치 하나의 캡슐에 쌓여있는 것 같다. 속성과 기능을 하나로 묶어서 필요한 기능을 메서드를 통해 외부에 제공하는 것을 캡슐화라 한다.


객체 지향 프로그래밍을 사용한 후 코드가 더 읽기 쉬운 것은 물론이고, 속성과 기능이 한 곳에 있기 때문에 변경도 더 쉬워졌다.
예를 들어서 MusicPlayer 내부 코드가 변하는 경우에 다른 코드는 변경하지 않아도 된다. MusicPlayervolume이라는 필드 이름이 다른 이름으로 변한다고 할 때 MusicPlayer 내부만 변경하면 된다. 이 경우 MusicPlayer를 사용하는 개발자는 코드를 전혀 변경하지 않아도 된다.
물론 외부에서 호출하는 MusicPlayer의 메서드 이름을 변경한다면 MusicPlayer를 사용하는 곳의 코드도 변경해야 한다.

profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글