차이점
- 데이터와 해당 데이터에 대한 처리 방식이 분리되어 있다 .
- 객체지향은 데이터와 데이터에 대한 행동(메서드)가 하나의 객체 안에 포함되어 있다.
음악 플레이어 만들기
- 음악 플레이어를 켜고 끌 수 있어야 한다.
- 음악 플레이어의 볼륨을 증가/감소 할 수 있어야 한다.
- 음악 플레이어의 상태를 확인할 수 있어야 한다.
package oop1; public class MusiPlayerMain1 { public static void main(String[] args) { int volume = 0; boolean isOn = false; // 음악 플레이어를 켤떄 isOn = true; System.out.println("음악 플레이어를 시작합니다."); // 볼륨 증가 volume++; System.out.println("음악 플레이어 볼륨: " + volume); // 볼륨 증가 volume++; System.out.println("음악 플레이어 볼륨: " + volume); // 볼륨 감소 volume--; System.out.println("음악 플레이어 볼륨: " + volume); // 음악 플레이어 상태 System.out.println("음악 플레이어 상태 확인"); if(isOn){ System.out.println("음악 플레이어 ON, 볼륨: " + volume); }else{ System.out.println("음악 플레이어 OFF"); } // 음악 플레이어 끄기 isOn = false; System.out.println("음악 플레이어가 종료됩니다."); } }
- 순서에 맞게 점진적으로 진행하는 프로그래밍 방식이다.
데이터 묶음
- 앞서 작성한 음악 플레이어에 클래스를 도입해서 만들어보자
- 음악 데이터에 관한 정보를 MusicPlayerData라는 클래스를 만들어서 사용해 보자
package oop1; public class MusiPlayerMain2 { public static void main(String[] args) { MusicPlayerData data = new MusicPlayerData(); // 음악 플레이어를 켤떄 data.isOn = true; System.out.println("음악 플레이어를 시작합니다."); // 볼륨 증가 data.volume++; System.out.println("음악 플레이어 볼륨: " + data.volume); // 볼륨 증가 data.volume++; System.out.println("음악 플레이어 볼륨: " + data.volume); // 볼륨 감소 data.volume--; System.out.println("음악 플레이어 볼륨: " + data.volume); // 음악 플레이어 상태 System.out.println("음악 플레이어 상태 확인"); if(data.isOn){ System.out.println("음악 플레이어 ON, 볼륨: " + data.volume); }else{ System.out.println("음악 플레이어 OFF"); } // 음악 플레이어 끄기 data.isOn = false; System.out.println("음악 플레이어가 종료됩니다."); } }
- 클래스화 하여 객체를 사용해서 데이터를 관리 한다면 좀더 관리하기 편하고 구분하기 쉬워진다.
메서드 추출
- 위에 코드를 보면 볼륨증가/볼륨감소는 한번만 사용하는것이 아닌 여러번 사용가능한 기능들이다.
- 이를 간단하게 메서드로 만들어서 호출만으로 기능을 사용하게 만들수 있다.
package oop1; public class MusiPlayerMain2 { 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"); } } }
- 중복 로직이 제거
- 같은 로직이 반복되면 여러번 호출만 하면된다.
- 변경 영향 범위가 수정이 된다.
package oop1;
public class ValueData {
int value;
// 메서드 작성
void add(){
value++;
System.out.println("숫자 증가 value = " + value);
}
}
인스턴스 메서드 호출 과정
- 객체 안에 정의된 메서드를 호출한다.
- 해당 객체가 가르킨 주소에서 호출한 메서드를 찾는다.
- 객체 안에서 사용되는 멤버 변수는 클래스 안에서 정의된 멤버 변수를 찾는다.
- 함수를 정상적으로 실행 한다.
음악 플레이어
- 속성 : volume , isOn
- 기능 : on() , off() , volumeUp() , volumeDown() , showState()
package 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 showStatus(){ System.out.println("음악 플레이어의 상태 확인"); if(isOn){ System.out.println("음악 플레이어 ON, 볼륨: " + volume); }else{ System.out.println("음악 플레이어 OFF"); } } }
package oop1; public class MusicPlayerMain4 { public static void main(String[] args) { MusicPlayer player = new MusicPlayer(); // ON player.on(); //up player.volumeUp(); //up player.volumeUp(); //down player.volumeDown(); //state player.showStatus(); //off player.off(); } }
- 음악 플레이어를 사용하는 입장에서는 기능만 단순하게 사용하면 된다.