이 시리즈에서는 클래스와 객체를 사용해서 관련 데이터를 묶어서 사용하는 방법을 학습함. 단순히 객체를 사용하기만 하면 절차 지향 프로그램과 다르지 않다.
예를들어, 아래와 같은 프로그램은 관련 데이터를 MusicPlayerData에 묶고, 기능을 기능은 main이 속한 클래스에 메서드로 모듈화 하였다.
문제는 데이터와 기능이 분리되어있다. 데이터는 MusicPlayerData 클래스 인스턴스가 가지고있고, 기능은 main 클래스의 메서드에 분리되어있다.
public class MusicPlayerData {
int volume = 0;
boolean isOn = false;
}
메인
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");
}
}
클래스는 데이터인 멤버 변수 뿐 아니라 기능역할을 하는 메서드도 포함할 수 있다.
public class ValueData {
int value;
void add() {
value++;
System.out.println("숫자 증가 value=" + value);
}
}
이 클래스의 객체는 멤버변수와 기능을 수행하는 add() 메서드도 함께 존재한다. 객체는 자신의 메서드를 통해 자신의 멤버변수에 접근가능하다. 메인에서는 아래와같이 사용가능하다.
public static void main(String[] args) {
ValueData valueData = new ValueData();
valueData.add();
valueData.add();
valueData.add();
System.out.println("최종 숫자=" + valueData.value);
}
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);
}
MusicPlayer 사용처 코드 변동없음
public static void main(String[] args) {
MusicPlayer player = new MusicPlayer();
//음악 플레이어 켜기
player.on();
//볼륨 증가
player.volumeUp();
//볼륨 증가
player.volumeUp();
//볼륨 감소
player.volumeDown();
//음악 플레이어 상태
player.showStatus();
//음악 플레이어 끄기
player.off();
}