자바의 꽃은 객체 지향 프로그래밍(OOP)이라고 할 수 있다.
프로그래밍 방식에는 크게 절차 지향, 객체 지향 프로그래밍으로 나눌 수 있다. 두 개념을 한번 정리하고 가면 좋을 것 같다.
절차 지향 프로그래밍
- 이름 그대로 절차를 지향한다. 실행 순서를 중요하게 생각하는 방식이다.
- 프로그램의 흐름을 순차적으로 따르며 처리한다. (어떻게)
객체 지향 프로그래밍
- 이름 그대로 객체를 지향한다. 객체를 중요하게 생각하는 방식이다.
- 실제 세계의 사물이나 사건을 객체로 보고, 이들간의 상호작용을 중심으로 프로그래밍 한다.(무엇을)
차이
- 절차 지향은 데이터와 데이터와 그에 대한 처리방식이 분리되어 있지만, 객체 지향은 데이터와 데이터에 대한 메서드가 하나의 객체 안에 포함되어 있다.
1) 절차 지향 프로그래밍
public class MusicPlayerData {
int volume;
boolean isOn;
}
public class MusicPlayerMain3 {
public static void main(String[] args) {
MusicPlayerData data = new MusicPlayerData();
//음악 플레이어 켜기
on(data);
//볼륨증가
volumeUp(data);
//볼륨증가
volumeUp(data);
//볼륨감소
volumeDown(data);
//음악 플레이어 상태
printStatus(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 printStatus(MusicPlayerData data){
System.out.println("음악 플레이어 상태 확인");
if(data.isOn){
System.out.println("음악 플레이어 ON, 볼륨 : " + data.volume);
}else{
System.out.println("음악 플레이어 OFF, 볼륨 : " + data.volume);
}
}
}
2) 객체 지향 프로그래밍
public class MusicPlayer {
int volume;
boolean isOn;
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 printStatus(){
System.out.println("음악 플레이어 상태 확인");
if(isOn){
System.out.println("음악 플레이어 ON, 볼륨 : " + volume);
}else{
System.out.println("음악 플레이어 OFF, 볼륨 : " + volume);
}
}
}
public class MusicplayerMain4 {
public static void main(String[] args) {
MusicPlayer player = new MusicPlayer();
//음악 플레이어 켜기
player.on();
//볼륨증가
player.volumeUp();
//볼륨증가
player.volumeUp();
//볼륨감소
player.volumeDown();
//음악 플레이어 상태
player.printStatus();
//음악 플레이어 끄기
player.off();
}
}
두 코드의 실행 결과는 같다.
1) 절차 지향 프로그래밍의 코드를 보면 객체의 멤버변수를 담고 있는 클래스가 있고, 코드를 실행하는 클래스에서는 또 메서드를 담고 있다.
2) 객체 지향 프로그래밍의 코드를 보면 객체의 멤버변수와 메서드를 하나의 클래스에 묶여있고, 코드를 실행하는 클래스에서는 객체를 생성하고 필요한 기능을 호출하기만 하면 된다.
이처럼 객체 지향 프로그래밍을 사용하여 만든 클래스에서는 객체를 사용하는 입장에서는 코드의 흐름이 잘 보이고, 속성과 기능(메서드)이 한 곳에 있기 때문에 유지보수도 더 쉬워진다. 객체의 기능이나 속성이 변경된다고 해서 main메서드의 코드를 변경할 필요가 없고, MusicPlayer에서 변경하면 된다는 뜻이다.
이러한 형태를 보면 속성과 기능이 마치 하나의 캡슐에 싸여져 있는 것 같다고 하여 캡슐화라고 표현한다.
속성과 기능을 하나로 묶어서 필요한 기능을 메서드를 통해 외부에 제공할 수 있다.
'JAVA' 카테고리의 다른 글
| [자바/JAVA] 접근 제어자(Access Modifier)와 캡슐화(Encapsulation) (2) | 2024.06.12 |
|---|---|
| [자바/JAVA] 생성자(Constructor) (0) | 2024.05.26 |
| [자바/JAVA] - 기본형(Primitive Type)과 참조형(Reference Type)이란? (0) | 2024.05.25 |
| [자바/JAVA] - 클래스(class), 객체(instance)란? (0) | 2024.05.25 |
| [백준 알고리즘 JAVA] 15894번 수학은 체육과목입니다 (0) | 2024.04.10 |