Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[자바/Java] - 객체 지향, 절차 지향 본문

Study/Java

[자바/Java] - 객체 지향, 절차 지향

luke-king 2024. 1. 8. 16:59

객체 지향, 절차 지향

객체 지향과 절차 지향 프로그래밍에 대해 정리하는 시간을 가지려 한다.

 

절차 지향 프로그래밍

  • 절차 지향 프로그래밍은 이름 그대로 절차를 지향한다. 쉽게 이야기하면 실행 순서를 중요하게 생각하는 방식이다.
  • 절차 지향 프로그래밍은 프로그램의 흐름을 순차적으로 따르며 처리하는 방식이다. 즉, "어떻게"를 중심으로 프로그래밍 한다.

 

객체 지향 프로그래밍

  • 객체 지향 프로그래밍은 이름 그대로 객체를 지향한다. 쉽게 이야기하면 객체를 중요하게 생각하는 방식이다.
  • 객체 지향 프로그래밍은 실제 사물이나 사건을 객체로 보고, 이러한 객체들 간의 상호작용을 중심으로 프로그래밍하는 방식이다. 즉, "무엇을" 중심으로 프로그래밍 한다.

 

절차 지향 프로그래밍과 객체 지향 프로그래밍의 차이점

  • 절차 지향은 데이터와 해당 데이터에 대한 처리 방식이 분리되어 있다. 반면 객체 지향에서는 데이터와 그 데이터에 대한 행동(메서드)이 하나의 '객체' 안에 포함되어 있다.

 

절차 지향 프로그래밍 코드를 봐보겠다.

 

<절차 지향 프로그래밍 코드>

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

 

<Main>

public class MusicPlayer {

    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("Start MusicPlayer.");
    }
    static void off(MusicPlayerData data) {
        data.isOn = false;
        System.out.println("MusicPlayer END");
    }

    static void volumeUp(MusicPlayerData data) {
        data.volume++;
        System.out.println("MusicPlayer volume: " + data.volume);
    }

    static void volumeDown(MusicPlayerData data) {
        data.volume--;
        System.out.println("MusicPlayer volume: " + data.volume);
    }

    static void showStatus(MusicPlayerData data) {
        System.out.println("MusicPlayer status");
        if (data.isOn) {
            System.out.println("MusicPlayer ON, volume: " + data.volume);
        } else {
            System.out.println("MusicPlayer OFF");
        }
    }
}

 

각각의 메서드를 보면 " MuiscPlayerData "의 데이터를 사용한다. 따라서 이후에 관련 데이터가 변경되면 

" MusicPlayerMain " 부분의 메서드들도 함께 변경해야 한다. 그리고 이렇게 데이터와 기능이 분리되어 있으면 유지보수 관점에서도 관리 포인트가  2곳으로 늘어난다.

결국 지금과 같이 데이터와 기능이 분리되어 있다는걸 확인할수 있다. 하지만 객체 지향 프로그래밍을 한다면 데이터와 기능을 하나로 묶어서 사용할 수 있게 된다.

 

바로 객체 지향 프로그래밍 코드를 보겠다.

 

<객체 지향 프로그래밍 코드>

public class MusicPlayer {

    int volume = 0;
    boolean isOn = false;

    void on() {
        isOn = true;
        System.out.println("Start MusicPlayer.");
    }
    void off() {
        isOn = false;
        System.out.println("MusicPlayer END");
    }

    void volumeUp() {
        volume++;
        System.out.println("MusicPlayer volume: " + volume);
    }

    void volumeDown() {
        volume--;
        System.out.println("MusicPlayer volume: " + volume);
    }

    void showStatus() {
        System.out.println("MusicPlayer status");
        if (isOn) {
            System.out.println("MusicPlayer ON, volume: " + volume);
        } else {
            System.out.println("MusicPlayer OFF");
        }
    }
}

위 클래스를 보면 필요한 속성과 기능을 모두 정의한걸 볼수 있다. 이제 이 클래스만 있으면 메인 클래스에서 플레이어를 생성해서 사용할 수 있다. 필요한 모든 속성과 기능이 하나의 클래스에 포함되어 있는 것이다.

 

<Main>

public class MusicPlayerMain {

    public static void main(String[] args) {
        MusicPlayer player = new MusicPlayer();
        //음악 플레이어 켜기
        player.on();
        //볼륨 증가
        player.volumeUp();
        //볼륨 증가
        player.volumeUp();
        //볼륨 감소
        player.volumeDown();
        //음악 플레이어 상태
        player.showStatus();
        //음악 플레이어 끄기'
        player.off();

    }
}

 

 

 

※ 출처: Inflearn 김영한-Java 강의 중