Post

Java 문법 (5) - 객체 지향 프로그래밍

Java 문법 (5) - 객체 지향 프로그래밍




절차 지향과 객체 지향


절차지향

  • 이름 그대로 절차를 지향하는 프로그래밍입니다. 실행 순서를 중요하게 생각하는 방식입니다.
  • 프로그램의 흐름을 순차적으로 따르며 처리하는 방식입니다.
  • “어떻게”를 중심으로 프로그래밍 합니다.
  • 데이터와 데이터에 대한 처리방식이 분리되어 있습니다.

객체지향

  • 객체를 중요하게 생각하는 방식입니다.
  • 실제 세계의 사물이나 사건을 객체로 보고, 이러한 객체들 간의 상호작용을 중심으로 프로그래밍하는 방식입니다.
  • “무엇을” 중심으로 프로그래밍 합니다.
  • 데이터와 데이터에 대한 행동(메서드)가 하나의 객체 안에 포함되어 있습니다.




절차지향 프로그래밍 예시


예시와 같이 데이터와 기능이 분리되어 있는 것을 볼 수 있습니다. 예시의 메서드 대부분 MusicPlayer의 데이터를 사용합니다. 만약 이후에 관련 데이터가 변경되면 메서드들도 함께 변경해야하고, 데이터와 기능이 분리되어 있기 때문에 유지보수 관점에서도 관리해야할 부분이 2곳으로 늘어나게 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 음악 플레이어 클래스
// 데이터
public class MusicPlayer {  
    int volume;  
    boolean isOn;
}

public class MusicPlayerMain2 {  
    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){  
        if (data.isOn){  
            System.out.println("음악 플레이어 ON" + ", 볼륨: " + data.volume);  
        } else {  
            System.out.println("음악 플레이어 Off");  
        }  
    }  
}


객체지향 프로그래밍 예시


예시와 같이 MusicPlayer안에 데이터와 기능이 모두 같이 들어있습니다. 음악 플레이어를 구성하기 위한 속성과 기능이 하나의 캡슐에 쌓여있는 것 같고, 필요한 기능을 매서드를 통해서 외부에 제공합니다. 이를 캡슐화라고 합니다. 객체지향 프로그래밍을 하게 되면 사람의 입장에서 더 읽기 쉬운 코드가 만들어지고, 유지보수에도 더 좋습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// MusicPlayer의 데이터과 기능
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 showStatus(){  
        if (isOn){  
            System.out.println("음악 플레이어 ON" + ", 볼륨: " + volume);  
        } else {  
            System.out.println("음악 플레이어 Off");  
        }  
    }  
}


public class MusicPlayerMain3 {  
    public static void main(String[] args) {  
        MusicPlayer musicPlayer = new MusicPlayer();  
        musicPlayer.on();  
        musicPlayer.volumeUp();  
        musicPlayer.volumeUp();  
        musicPlayer.volumeDown();  
        musicPlayer.showStatus();  
        musicPlayer.off();  
    }  
}