Java

[인프런] 객체 지향 프로그래밍

sejin2 2024. 5. 21. 13:24

데이터와 기능을 하나로 묶어서 하나의 클래스에 담아서 사용한다.
프로그램을 작성하는 절차도 중요하지만 음악 플레이어라는 하나의 개념을 객체로 온전하게 만드는 것이 더 중요하다. 그러기 위해서는 프로그램의 수행 순서보다는 음악 플레이어 클래스를 만드는 것 자체에 집중해야한다.
음악 플레이어가 어떤 속성을 가지고 어던 기능을 제공하는지에 초점을 맞추어야 한다. 

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 클래스에 음악 플레이어에 필요한 속성과 기능을 모두 정의했으므로, 음악 플레이어가 필요한 곳에서 이 클래스만을 가지고 음악 플레이어를 생성해서 사용할 수 있다. 
음악 플레이어를 사용하는데 필요한 모든 속성과 기능이 하나의 클래스에 포함되어 있다. 
그 다음 필요한 곳에서 사용하면 된다.

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의 데이터인 volume, isOn 같은 데이터는 전혀 사용하지 않는다. 또 내부에 어떤 속성이 있는지 몰라도 되며, 단순하게 MusicPlayer가 제공하는 기능 중 필요한 기능을 호출해서 사용하기만 하면 된다. 

캡슐화

MusicPlayer를 보면 음악 플레이어를 구성하기 위한 속성과 기능들이 마치 하나의 캡슐에 쌓여있는 것과 같이  속성과 기능을 하나로 묶어서 필요한 기능을 메서드를 통해 외부에 제공하는 것을 캡슐화라고 한다.
이렇게 구성하면 코드가 더 읽기 쉬워지고, 속성과 기능이 한 곳에 있기 때문에 변경도 쉬워진다. 

객체 지향 프로그래밍은 모든 사물을 속성과 기능을 가진 객체로 생각하는 것이다. 객체에는 속성과 기능만 존재한다.
객체 지향의 특징은 속성과 기능을 하나로 묶는 것 뿐 만 아니라 캡슐화, 상혹, 다형성, 추상화, 메시지 같은 다양한 특징들이 있다. 

'Java' 카테고리의 다른 글

[인프런] 패키지  (0) 2024.05.22
[인프런] 생성자, this  (0) 2024.05.21
[인프런] 클래스와 메서드  (0) 2024.05.21
[인프런] 절차 지향 프로그래밍  (0) 2024.05.21
[인프런] null과 NullPointerException  (1) 2024.05.20