package oop1;
import java.util.Scanner;
public class MusicPlayerMain2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
MusicPlayerData data = new MusicPlayerData();
on(data);
menu();
while (true){
System.out.print("메뉴를 선택해주세요: ");
int num = scanner.nextInt();
if (num == 1) {
volumeUp(data);
} else if (num == 2) {
volumeDown(data);
} else if (num == 3) {
printState(data);
} else if(num == 4){
on(data);
} else if(num == 5){
off(data);
} else{
System.out.println("메뉴를 다시 선택해주세요.");
}
}
}
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){
if (data.volume > 0){
data.volume --;
}
System.out.println("음악 플레이어 볼륨: "+data.volume);
}
static void printState(MusicPlayerData data){
System.out.println("음악 플레이어 상태 확인");
if(data.isOn){
System.out.println("음악 볼륨: "+data.volume+" 음악 플레이어: ON");
}else{
System.out.println("음악 플레이어: OFF");
}
}
static void menu(){
System.out.println("1. 음악 플레이어 볼륨 up");
System.out.println("2. 음악 플레이어 볼륨 down");
System.out.println("3. 음악 플레이어 state");
System.out.println("4. 음악 플레이어 on");
System.out.println("5. 음악 플레이어 off");
}
}
package oop1;
public class MusicPlayerData {
int volume = 0;
boolean isOn = false;
}
위의 코드는 모듈화는 했지만 절차 지향 프로그래밍 기법을 따른다.
위의 코드의 한계는 바로 데이터와 기능이 분리되어 있다는 점이다. 데이터는 MusicPlayerData
에 있지만, 그 데이터를 사용하는 기능은 MusicPlayerMain2
에 있는 각각의 메서드에 분리되어 있다.
이렇게 데이터와 기능이 분리되어 있으면 유지 보수 관점에서도 관리 포인트가 2곳으로 늘어난다.
하지만, 객체 지향 프로그래밍
이 나오면서 데이터와 기능을 온전히 하나로 묶어서 사용할 수 있게 되었다.
모든 사물을 속성과 기능을 가진 객체로 생각하는 것이다. 객체에는 속성과 기능만 존재한다.
객체들의 모임으로 파악하고자 하는 것.
각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있다.
프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다.
자동차