[자바] 절차 지향, 객체지향

brand_mins·2024년 1월 15일

Java

목록 보기
41/47

1. 절차 지향 프로그래밍

  • 객체 지향 프로그래밍을 알기 위해 우선 절차 지향 프로그래밍을 알아야 할 필요가 있다.
  • 절차 지향 프로그래밍은 실행 순서를 중요하게 생각하고 처리하는 방식이다.
package oop1;

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

        // 음악 플레이어 켜기
        isOn = true;
        System.out.println("음악 플레이어를 시작합니다.");

        // 볼륨 증가
        volume++;
        System.out.println("음악 플레이어 볼륨:" + volume);

        // 볼륨 증가
        volume++;
        System.out.println("음악 플레이어 볼륨:" + volume);

        // 볼륨 감소
        volume--;
        System.out.println("음악 플레이어 볼륨:" + volume);

        // 음악 플레이어 상태
        System.out.println("음악 플레이어 상태 확인");
        if(isOn) {
            System.out.println("음악 플레이어 ON, 볼륨:" + volume);
        } else {
            System.out.println("음악 플레이어 OFF");
        }

        // 음악 플레이어 끄기
        isOn = false;
        System.out.println("음악 플레이어를 종료합니다.");
    }
}
  • 메인 메서드에 정의된 전역변수들을 하나의 클래스의 멤버변수로 옮기고 싶다면 클래스를 따로 지정하고 사용자가 지정한 타입을 지정한다.
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("음악 플레이어를 종료합니다.");
    }
}
  • 객체를 생성하지 않고 static을 선언하여 메서드를 정의하였다.
package oop1;

public class MusicPlayerMain3 {
    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("음악 플레이어를 ON");
    }

    static void off(MusicPlayerData data) {
        data.isOn = false;
        System.out.println("음악 플레이어를 OFF");
    }

    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 기반으로 사용되기 때문에 데이터가 변경되면 메인 코드도 같이 변경해야 하기 때문에 유지보수 하기에 어렵다.

2. 클래스와 메서드

  • 클래스는 속성과 기능을 정의할 수 있다.(변수, 메서드)
  • 객체는 자신의 메서드를 통해 자신의 멤버 변수에 접근할 수 있다.
package oop1;

public class ValueObject {
    int value;
    // 이 클래스에서 만든 add는 static을 사용하지 않는다.
    // 객체를 생성한다면 static을 사용할 필요가 없다.
    void add() {
        value++;
        System.out.println("숫자 증가 value=" + value);
    }
}

package oop1;

public class ValueObjectMain {
    public static void main(String[] args) {
        ValueObject valueObject = new ValueObject();
        valueObject.add();
        valueObject.add();
        valueObject.add();
        System.out.println("최종 숫자: " + valueObject.value);
    }
}

3. 객체 지향 프로그래밍

  • 객체 지향 프로그래밍에서는 하나의 클래스에 변수를 선언하고 메서드를 정의하면 메인 메서드에서 호출하면 된다.
package oop1;

public class MusicPlayerMain4 {
    public static void main(String[] args) {
        MusicPlayer play = new MusicPlayer();
        // 음악 플레이어 켜기
        play.on();

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

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

        // 상태확인
        play.showStatus();

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

(1) 캡슐화

  • MusicPlayer가 음악 플레이어를 구성하기 위한 속성과 기능이 하나로 합쳐져 있는 상태.
  • 이러한 기능들을 묶어서 외부에 제공하는 것을 캡슐화라고 한다.
profile
IT 개발자가 되기 위한 기록

0개의 댓글