hayu's 개발 일지

99클럽 코테 스터디 20일차 TIL + 절차 지향 프로그래밍 VS 객체 지향 프로그래밍 본문

기술/java

99클럽 코테 스터디 20일차 TIL + 절차 지향 프로그래밍 VS 객체 지향 프로그래밍

hayu00 2024. 6. 9. 21:12

 

학습 키워드

- 절차 지향 프로그래밍 VS 객체 지향 프로그래밍

 

공부한 내용

절차 지향 프로그래밍 VS 객체 지향 프로그래밍

절차 지향 프로그래밍

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

객체 지향 프로그래밍

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

차이

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

예시 코드(절차 지향 프로그래밍)

     /**
     * 절차 지향
     */
    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("음악 플레이어를 시작합니다");
        }
        static void off(MusicPlayerData data) {
            data.isOn = false;
            System.out.println("음악 플레이어를 종료합니다");
        }
        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");
            }
        }
    }
   
  • 각각의 기능을 메서드로 만든 덕분에 각각의 기능이 모듈화 되었다.

중복 제거 : 로직 중복이 제거되었다. 같은 로직이 필요하면 해당 메서드를 여러번 호출하면 된다.

변경 영향 범위 : 기능을 수정할 때 해당 메서드 내부만 변경하면 된다.

메서드 이름 추가 : 메서드 이름을 통해 코드를 더 쉽게 이해할 수 있다.

  • 모듈화 : 쉽게 이야기해서 레고 블럭을 생각하면 된다. 필요한 블럭을 가져다 사용할 수 있다. 해당 기능이 필요하다면 메서드 호출로 사용할 수 있다.

절차 지향 프로그래밍의 한계

  • 절차 지향 프로그래밍의 한계는 데이터와 기능이 분리되어 있다는 점이다. 관련 데이터가 변경과면 메서드들도 함께 변경해야 한다. 그리고 이렇게 데이터와 기능이 분리되어 있으면 유지보수 관점에서도 관리 포인트가 2곳으로 늘어난다.

클래스와 메서드

메서드를 포함하는 클래스를 만든다.

⇒ 클래스는 속성(데이터, 멤버 변수)과 기능(메서드)을 정의할 수 있다. / 객체는 자신의 메서드를 통해 자신의 멤버 변수에 접근할 수 있다.(객체의 메서드 내부에서 접근하는 멤버 변수는 객체 자신의 멤버 변수이다.)

객체 지향 프로그래밍

    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();
        }
    }

 

회고

발생한 문제

- 객체 지향 프로그램에 대한 공부가 부족하다고 생각이 들어서 공부를 진행했다.

 

해결 방법

- 객체 지향 프로그램에 대한 공부를 진행하였다.

 

알게된 내용

- 객체 지향 프로그램을 사용하면 객체 지향 프로그래밍을 사용하면 코드 가독성이 높아지고, 속성과 기능이 한 곳에 있기 때문에 변경도 더 쉬워진다는 사실을 알게 되었다.