JAVA

[Java] 객체 지향 프로그래밍

songsua 2024. 10. 20. 15:16

음악 플레이어

  • 속성 : volume, isOn()
  • 기능 : on(), off(), volumeup(), volumeDown(), showStatus()
    을 가지고 음악 플레이어를 만들어보자 
package oop1;

public class MusicPlayer {
    int volume = 0;
    boolean isOn = false;
    //처음에는 볼륨이 꺼쪄있음
    
    void on() {
        isOn = true;
        System.out.println("Music player is on");
    }
    
    void off() {
        isOn = false;
        //위의 자신의 값을 false로 바꾼다.
        System.out.println("Music player is off");
    }
    
    void volumeUp() {
        volume++;
        System.out.println("Music player volume up");
    }
    void volumeDown() {
        volume--;
        System.out.println("Music player volume down");
    }
    
    void showStatus() {
        if (isOn) {
            System.out.println("Music player is on, volume:" + volume );
        }
        else {
            System.out.println("Music player is off, volume:" + volume );
        }
    }
    
    
}

Class 안에 속성과 기능을 모두 정의했다.

 

package oop1;

public class MusicplayesMain {
    public static void main(String[] args) {
        MusicPlayer player = new MusicPlayer();
        //음악플레이어를 켜키
        player.on();
        //on메서드 사용
        player.off();
        //off메서드 사용
        player.volumeDown();
        //volumedown메서드 사용
        player.volumeUp();
        //volumeup 메서드 사용
        player.showStatus();


    }
}

 

 

 

캡슐화

MusicPlayer을 보면 하나의 Class 안에 구성에 필요한 속성과 기능이 쌓여잇는거 같아,

이렇게 속성과 기능을 하나로 묶어서 필요한 기능을 메서드를 통해 외부에 제공하는 것을 "캡슐화" 라고 한다.

 

 

문제와 풀이 -3

절차 지향 직사각형 프로그램을 객체 지향으로 변경하기
다음은 직사각형의 넓이(Area), 둘레 길이(Perimeter), 정사각형 여부(square)를 구하는 프로그램이다.
절차 지향 프로그래밍 방식으로 되어 있는 코드를 객체 지향 프로그래밍 방식으로 변경해라.

  • `Rectangle` 클래스를 만들어라.
  • `RectangleOopMain` 에 해당 클래스를 사용하는 `main()` 코드를 만들어라.

절체지향코드

package oop1.oop;

public class ex {
        public static void main(String[] args) {
            int width = 5;
            int height = 8;
            int area = calculateArea(width, height); 
            
            System.out.println("넓이: " + area);
            
            int perimeter = calculatePerimeter(width, height); 
            
            System.out.println("둘레 길이: " + perimeter);
            
            boolean square = isSquare(width, height);
            
            System.out.println("정사각형 여부: " + square); 
            }
            
        static int calculateArea(int width, int height) {
            return width * height;
        }
        
        static int calculatePerimeter(int width, int height) {
            return 2 * (width + height);
        }
        
        static boolean isSquare(int width, int height) {
            return width == height;
        } }
}

 

 

답안:

package oop1.oop;

public class Rectangle {
    int width;
    int height;

    //사각형의 넓이는 밑변 곱하기 높이하고 return해서 다시 적용
    int calculateArea() {
        return width * height;
    }

    boolean isSquare() {
        //정사각형 여부확인하는 법
        return width == height;
        //같으면 true, 같지 않으면 false 로 표기 된다
    }

    int calculatePerimeter() {
        return 2 * (width + height);
    }
}

 

package oop1.oop;

public class ex {
    public static void main(String[] args) {
        Rectangle rect = new Rectangle();
        rect.height = 8;
        rect.width = 5;

        //넓이 얼마인지 호출하는 값
        int area = rect.calculateArea();
        System.out.println("넓이 값:" + area);

        int dul = rect.calculatePerimeter();
        System.out.println("둘레의 값:" + dul );

        boolean squre = rect.isSquare();
        System.out.println("정사각형 여부: " + squre);
    }
}

 

문제 :

  • 은행 계좌를 객체로 설계해야 한다.
  • Account` 클래스를 만들어라.
    int balance` 잔액
    deposit(int amount)` : 입금 메서드 입금시 잔액이 증가한다.

  • withdraw(int amount)` : 출금 메서드 출금시 잔액이 감소한다.
    만약 잔액이 부족하면 **잔액 부족**을 출력해야 한다.

  • AccountMain` 클래스를 만들고 `main()` 메서드를 통해 프로그램을 시작해라. 계좌에 돈을 입금해라.

package oop1.bank;

public class Account {
    int balance;
    int deposit;
    int withdraw;

    void deposit(int amount) {
        balance += amount;
    }
    void withdraw(int amount) {
        if (balance >= amount) {
            balance -= amount;
        }
        else {
            //만약 잔액이 부족하다면 "잔액 부족" 을 출력해야 한다
            System.out.println("Insufficient balance");
        }
    }
}

 

package oop1.bank;

public class AcoountMain {
    public static void main(String[] args) {
        Account account = new Account();
        //처음에 만원 입금
        account.deposit(1000);
        account.withdraw(900);
        account.withdraw(500);
    }
}

 

Insufficient balance 라고 호출 된다.