Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
관리 메뉴

개발새발

객체 지향 프로그래밍 vs 절차 지향 프로그래밍 본문

자바기초 다시보기

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

개발하는후추 2023. 12. 20. 12:13

절차 지향 프로그래밍

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

객체 지향 프로그래밍

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

둘의 중요한 차이

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

절차 지향 코드

package com.basic.basicjava.javaBasic.oop1;

public class MusicPlayerMain3 {
  public static void main(String[] args) {
    
    MusicPlayerData musicPlayerData = new MusicPlayerData();
    
    
    //켜기
    on(musicPlayerData);
    
    //볼륨 증가
     volumeUp(musicPlayerData);
    
    //볼륨 증가
    volumeUp(musicPlayerData);
  
    //볼륨 감소
    volumeDown(musicPlayerData);
    
    playerStatus(musicPlayerData);
    
    //끄기
    off(musicPlayerData);
    
    playerStatus(musicPlayerData);
    
  }
  
  
  static void on(MusicPlayerData musicPlayerData) {
    musicPlayerData.isOn = true;
    System.out.println("시작");
  }
  static void off(MusicPlayerData musicPlayerData) {
    musicPlayerData.isOn = false;
    System.out.println("꺼짐");
  }
  
  static void volumeUp(MusicPlayerData musicPlayerData) {
    musicPlayerData.volume++;
    System.out.println("볼륨" + musicPlayerData.volume);
  }
  static void volumeDown(MusicPlayerData musicPlayerData) {
    musicPlayerData.volume--;
    System.out.println("볼륨" + musicPlayerData.volume);
  }
  
  static void playerStatus(MusicPlayerData musicPlayerData) {
    //플레이어 상태
    System.out.println("플레이어 상태 확인");
    
    if (musicPlayerData.isOn) {
      System.out.println("ON " + musicPlayerData.volume);
    }else {
      System.out.println("OFF" + musicPlayerData.volume);
    }
  }
}

객체 지향 코드

객체
package com.basic.basicjava.javaBasic.oop1;

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 playerStatus() {
    //플레이어 상태
    System.out.println("플레이어 상태 확인");
    
    if (isOn) {
      System.out.println("ON : " + volume);
    } else {
      System.out.println("OFF : " + volume);
    }
  }
}
main
package com.basic.basicjava.javaBasic.oop1;

public class MusicPlayerMain4 {
  public static void main(String[] args) {
    
    MusicPlayer musicPlayer = new MusicPlayer();
    
    musicPlayer.on();
    
    musicPlayer.volumeUp();
    musicPlayer.volumeUp();
    musicPlayer.volumeDown();
    
    musicPlayer.playerStatus();
    
    musicPlayer.off();
    
    musicPlayer.playerStatus();
    
  }
}

각각의 기능을 메서드로 만든 덕분에 각각의 기능이 모듈화 되었다. 덕분에 다음과 같은 장점이 생겼다.

  • 중복 제거: 로직 중복이 제거되었다. 같은 로직이 필요하면 해당 메서드를 여러번 호출하면 된다.
  • 변경 영향 범위: 기능을 수정할 때 해당 메서드 내부만 변경하면 된다.
  • 메서드 이름 추가: 메서드 이름을 통해 코드를 더 쉽게 이해할 수 있다.
  • 모듈화: 쉽게 이야기해서 레고 블럭을 생각하면 된다. 필요한 블럭을 가져다 꼽아서 사용할 수 있다. 여기서는 음악 플레이어의 기능이 필요하면 해당 기능을 메서드 호출 만으로 손쉽게 사용할 수 있다. 이제 음악 플레이어와 관련된 메서드를 조립해서 프로그램을 작성할 수 있다.

정리

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

객체 지향 프로그래밍과 절차 지향 프로그래밍은 서로 대치되는 개념이 아니다.

객체 지향이라도 프로그램의 작동 순서는 중요하다. 다만 어디에 더 초점을 맞추는가에 둘의 차이가 있다. 객체 지향의 경우 객체의 설계와 관계를 중시한다.

반면 절차 지향의 경우 데이터와 기능이 분리되어 있고, 프로그램이 어떻게 작동하는지 그 순서에 초점을 맞춘다.

객체란?

  • 세상의 모든 사물을 단순하게 추상화해보면 속성(데이터)과 기능 딱 2가지로 설명할 수 있다.

자동차

  • 속성: 차량 색상, 현재 속도
  • 기능: 엑셀, 브레이크, 문 열기, 문 닫기

동물

  • 속성: 색상, 키, 온도
  • 기능: 먹는다. 걷는다.

게임 캐릭터

  • 속성: 레벨, 경험치, 소유한 아이템들
  • 기능: 이동, 공격, 아이템 획득

객체 지향 프로그래밍은 모든 사물을 속성과 기능을 가진 객체로 생각하는 것이다. 객체에는 속성과 기능만 존재한다.

이렇게 단순화하면 세상에 있는 객체들을 컴퓨터 프로그램으로 쉽게 설계할 수 있다.

이런 장점들 덕분에 지금은 객체 지향 프로그래밍이 가장 많이 사용된다. 참고로 실세계와 객체가 항상 1:1로 매칭되는 것은 아니다.

객체 지향의 특징은 속성과 기능을 하나로 묶는 것 뿐만 아니라 캡슐화, 상속, 다형성, 추상화, 메시지 전달 같은 다양한 특징들이 있다. 앞으로 이런 특징들을 하나씩 알아가보자.

'자바기초 다시보기' 카테고리의 다른 글

접근 제어  (0) 2023.12.21
생성자 (Construct)  (0) 2023.12.20
Java Null  (0) 2023.12.19
클래스, 객체, 인스턴스 정리  (1) 2023.12.19
Method 장점  (0) 2023.12.18
Comments