개발새발
객체 지향 프로그래밍 vs 절차 지향 프로그래밍 본문
절차 지향 프로그래밍
- 절차 지향 프로그래밍은 이름 그대로 절차를 지향한다. 쉽게 이야기해서 실행 순서를 중요하게 생각하는 방식이다.
- 절차 지향 프로그래밍은 프로그램의 흐름을 순차적으로 따르며 처리하는 방식이다.
- 즉, "어떻게"를 중심으로 프로그래밍 한다.
객체 지향 프로그래밍
- 객체 지향 프로그래밍은 이름 그대로 객체를 지향한다. 쉽게 이야기해서 객체를 중요하게 생각하는 방식이다.
- 객체 지향 프로그래밍은 실제 세계의 사물이나 사건을 객체로 보고, 이러한 객체들 간의 상호작용을 중심으로 프로그래밍 하는 방식이다.
- 즉, "무엇을" 중심으로 프로그래밍 한다.
둘의 중요한 차이
절차 지향은 데이터와 해당 데이터에 대한 처리 방식이 분리되어 있다. 반면 객체 지향에서는 데이터와 그 데이터에 대한 행동(메서드)이 하나의 '객체' 안에 함께 포함되어 있다.
절차 지향 코드
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