개발 공부/문제와 풀이

객체 지향 프로그래밍 문제와 풀이

죽밥죽밥화이팅 2024. 3. 23. 21:04

문제1- 절차 지향 직사각형 프로그램 객체 지향으로 변경하기

 

다음은 직사각형의 넓이(Area), 둘레 길이 (Perimeter), 정사각형 여부(square)를 구하는 프로그램

 

-절차 지향 프로그래밍 방식으로 되어 있는 코드를 객체 지향 프로그램 방식으로 변경하라

-Rectangle 클래스를 만들어라

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

 

 

절차 지향 코드

package oop1.ex;

public class RectangleProceduralMain {
    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;
    }

}

 

실행 결과)

넓이: 40
둘레 길이: 26
정사각형 여부: false

 

 

 

객체 지향 프로그램

package oop1.ex;

public class Rectangle {
    int width = 5;
    int height = 8;

    int calculateArea() { //매개변수 필요 없음 (내 클래스 안에 있는 변수 사용하면 됨)
        return width * height;
    }

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

    boolean isSquare() {
        return width == height;
    }

}
package oop1.ex;

public class RectangleOopMain {

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

        int area = rectangle.calculateArea();
        System.out.println("넓이: " + area);

        int perimeter = rectangle.calculatePerimeter();
        System.out.println("둘레 길이: " + perimeter);

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

}

 

실행 결과)

넓이: 40
둘레 길이: 26
정사각형 여부: false

 

 

 

문제2- 객체 지향 계좌

은행 계좌를 객체로 설계

  • Account 클래스 만들어라
    • int balance 잔액
    • deposit(int amount) : 입금 메서드
      • 입금 시 잔액이 증가
    • withdraw(int amount) : 출금 메서드
      • 출금 시 잔액이 감소
      • 잔액이 부족하면 '잔액 부족'을 출력
  • AccountMain 클래스를 만들고 main() 메세드를 통해 프로그램을 시작
    • 계좌에 10000을 입금
    • 계좌에서 9000원 출금
    • 계좌에서 2000원 출금 시도 => 잔액 부족 출력을 확인해라
    • 잔고를 출력해라 => 잔고: 1000

 

실행 결과)

잔액 부족
잔고: 1000

 

 

문제 풀이)

package oop1.ex;

import java.util.Scanner;

public class Account {
    int balance; //잔액

    void deposit(int amount) {
        balance += amount;
    }

    void withdraw(int amount) {
        if (balance >= amount) {
            balance -= amount;
        } else {
            System.out.println("잔액 부족");
        }
    }
}
package oop1.ex;

import java.util.Scanner;

public class AccountMain {
    public static void main(String[] args) {
        Account account = new Account();
        account.deposit(10000);
        account.withdraw(9000);
        account.withdraw(2000); //오류 메시지 출력
        System.out.println("잔고: " + account.balance);
    }


}
잔액 부족
잔고: 1000