Java/[inflearn] 자바 기본

[김영한_자바기본][3. 객체 지향 프로그래밍] (보충) 객체 지향 메서드 이해 (p.8-9, p.12)

줌인. 2024. 2. 15. 15:19

▶ 클래스와 메서드 이해 : 객체 지향 / 절차 지향 차이 이해

https://zoooom-in.tistory.com/51

 

[김영한_자바기본][3. 객체 지향 프로그래밍] 클래스와 메서드 / (복습) 객체 이해(p.8-11)

두 코드 모두 원본 클래스 내의 데이터 값을 참조하는 특징이 있다. 따라서 클래스의 내부 상태가 메서드에 의해 변경되며, 이 변경은 메서드를 호출한 외부에서도 반영된다. 이런식으로 객체의

zoooom-in.tistory.com

 

절차 지향은 데이터/기능이 분리되며, 메서드는 객체를 전달받아 해당 객체의 필드를 증가시킨다.
객체 지향은 데이터/기능이 한 공간에 함께 있으며, 메서드를 통해 내부 상태를 '직접 참조하여' 조작한다.


 

1. 절차 지향

[p.8 / ValueData] 

public class ValueData {
    int value;
}

 

[p.8 / ValueDataMain] 절차 지향 : 객체를 전달받아서 메서드를 통해 객체를 증가시킨다.

public class ValueDataMain {

    public static void main(String[] args) {
        ValueData valueData = new ValueData();
        add(valueData);
        add(valueData);
        add(valueData);
        System.out.println("최종 숫자 = " + valueData.value);
    }

    static void add(ValueData valueData) {
        valueData.value++;
        System.out.println("숫자 증가 value = " + valueData.value);
    }
}

- 데이터와 기능이 개별적으로 분리되어 있다.

- 메서드 `add`가 `ValueData` 객체를 받아서 해당 객체의 `value` 필드를 증가시킨다.

   > 이때 메서드는 객체의 참조를 통해 객체 데이터에 접근한다. 

 

 

2. 객체 지향

[p.9 / ValueObject] 객체 지향 :  메서드를 통해 내부 상태를 조작한다.

public class ValueObject {
    int value;
    void add() {//절차지향과 동일하게 참조하여 증가시키지만, 외부 위치를 통해 따로 접근할 필요가 없음
        //즉 실제로는 참조해서 값을 증가시키는 구조이나 코드는 직접 값을 증가시키는 것처럼 보임
        value++;
        System.out.println("숫자 증가 value = " + value);
    }
}

- 데이터와 기능이 한 공간에 같이 있다.

- `ValueObject` 클래스의 `add` 메서드는 객체 내의 `value` 필드를 증가시킨다.

   > 이때 외부적으로 따로 접근할 필요가 없다.

   > 메서드 내에서 `value` 필드에 직접 접근하여 값을 증가시키기 때문이다. 

 

 

[p.8 / ValueDataMain] 객체 지향 : 메서드가 클래스의 멤버 변수를 직접 접근하여 내부 상태를 조작한다.

public class ValueObjectMain {

    public static void main(String[] args) {
        ValueObject data = new ValueObject();
        data.add(); //기능
        data.add();
        data.add();
        System.out.println("Value objcet value = " + data.value); //실제데이터
    }
}

- 클래스 내부의 메서드는 보통 멤버 변수에 자체적으로 접근하여 조작한다.
- 클래스 내부의 메서드는 자체적으로 멤버 변수에 접근하여 조작하지만,

  외부에서는 객체를 통해 해당 메서드를 호출하여 객체의 내부 상태를 변경하는 것이 보통의 사용 방식이다.

 

 

*객체 지향 도식화 : 참조값 이해 (묶음으로 본다)

 

클래스 내부 메서드에는 'static'키워드를 사용하지 않는다.
메서드는 객체를 생성해야 호출할 수 있다.

그러나 static이 있을 경우 객체를 생성하지 않고도 메서드를 사용할 수 있다.

 

 


 

3. 실제 객체 지향 코드 작성해보기

[p.12 / MusicPlayer] 객체 지향, 내부 데이터 활용

public class MusicPlayer {
    boolean isOn;
    int volume;

    void turnOn() { //호출자를 받을 필요가 없어짐, 내 내부 데이터로 활용 가능
        isOn = true;
        System.out.println("음악 플레이어를 시작합니다.");
    }

    void turnOff() {
        isOn = false;
        System.out.println("음악 플레이어를 종료합니다.");
    }

    void volumeUp() {
        volume++;
        System.out.println("음악 플레이어 볼륨 : " + volume);
    }

    void volumeDown() {
        volume--;
        System.out.println("음악 플레이어 볼륨 : " + volume);
    }

    void checkStatus() {
        System.out.println("음악 플레이어 상태 확인");
        if (isOn) {
            System.out.println("음악 플레이어 On, 볼륨 : " + volume);
        } else {
            System.out.println("음악 플에이어 OFF");
        }
    }
}

- 호출자를 받을 필요 없이 내부 데이터를 활용하기 때문에 매개 변수를 작성하지 않았다.

[p.12 / MusicPlayerMain4] 객체 참조값을 통해 클래스 자체 기능 사용

public static void main(String[] args) {
    MusicPlayer digit = new MusicPlayer();
    digit.turnOn();

    digit.volumeUp();
    digit.volumeUp();

    digit.volumeDown();

    digit.checkStatus();

    digit.turnOff();
}

 

 

▶ 매서드 타입(void / int / boolean) 사용 복습

https://zoooom-in.tistory.com/52

 

[김영한_자바기본][3. 객체 지향 프로그래밍] 매서드 보충

`void`를 사용하는 경우는 메소드가 값을 반환하지 않고, 단순한 정보전달 작업을 수행할 때 사용한다. '다른 타입'을 사용하는 경우는 메소드가 어떤 값을 계산하거나 반환하여 호출자에게 제공

zoooom-in.tistory.com

 

728x90