본문 바로가기

프로그래밍언어/Java

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

 

객체 지향 프로그래밍


2024.07.02 - [Java] - [Java 기본] 절차 지향 프로그래밍

 

이전 포스팅에서 개발한 음악 플레이어는 데이터와 기능이 분리된 절자 지향적인 프로그램이었다. 

이번에는 데이터와 기능을 하나로 묶어서 프로그래밍 해보자 .

 

객체 지향 음악 플레이어


프로그램의 실행 순서보다는 프로그램이 어떤 속성(데이터)를 가지고 어떤 기능(메서드)를 제공하는 지에 초점을 맞춰서 개발해보자. 

  • 속성: Volumne, isOn
  • 기능: on(), off(), volume(), volumeDown(), showStatus
public class MusicPlayer {
    int volume;
    boolean isOn;

    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 showStatuc() {
        System.out.println("음악 플레이어 상태 확인");
        if(isOn) {
            System.out.println("음악 플레이어 ON, 볼륨: " + volume);
        } else {
            System.out.println("음악 플레이어 OFF ");
        }
    }
}

=> 속성과 기능을 정의했다. 

 

이제 MusicPlayer를 잘 모르는 다른 개발자가 사용한다고 생각하고 아래 코드를 보자.

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 상태에 '대기' 상태가 추가된다고 가정해보자. 우리는 Music Player만 수정하면 된다. 이를 가져다 쓰는 곳에서는 변경할 필요가 없다. 

 

 

 

* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다. 

'프로그래밍언어 > Java' 카테고리의 다른 글

[Java 기본] 생성자  (0) 2024.07.04
[Java 기본] 객체란?  (0) 2024.07.04
[Java 기본] 클래스와 메서드  (0) 2024.07.03
[Java 기본] 절차 지향 프로그래밍  (0) 2024.07.02
[Java 기본] null  (0) 2024.07.02