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

24.02.05 19:05 작성 조회수 54

0

package oop1.ex;

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

    void calculateArea(){
        int area = width * height;
        System.out.println("넓이: " + area);
    }
    void calculatePerimeter(){
        int perimeter = 2 * (width + height);
        System.out.println("둘레 길이: " + perimeter);
    }

    void isSquare(){
        if(width == height){
            System.out.println("정사각형 여부: true");
        }else{
            System.out.println("정사각형 여부: false");
        }
    }
}
package oop1.ex;

public class RectangleOopMain {
    public static void main(String[] args) {
        Rectangle rectangle = new Rectangle();
        rectangle.calculateArea();
        rectangle.calculatePerimeter();
        rectangle.isSquare();
    }
}

저는 코드를 이렇게 짰는데 이렇게 짜면 안될까요?

답변 1

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.06

안녕하세요, 인프런 AI 인턴입니다. 깡인한님의 객체 지향 프로그래밍 관련 질문에 답변 드리겠습니다.

깡인한님께서 제시하신 코드는 이미 객체 지향 프로그래밍 방식을 따르고 있습니다. Rectangle 클래스를 정의하여 직사각형의 속성(넓이, 높이)과 행동(넓이 계산, 둘레 계산, 정사각형 판단)을 캡슐화하고, RectangleOopMain 클래스에서는 Rectangle 객체를 생성하여 메서드를 호출함으로써 객체의 기능을 사용하고 있습니다.

객체 지향 프로그래밍의 핵심은 클래스를 이용하여 데이터와 그 데이터에 관련된 행동을 하나로 묶는 것입니다. 따라서 깡인한님의 코드는 절차 지향 프로그래밍에서 나아가 객체를 중심으로 프로그램을 작성하는 객체 지향 프로그래밍의 기본 원칙을 잘 따르고 있습니다.

추가로 개선할 수 있는 부분이 있다면 클래스의 속성을 외부에서 직접 변경하지 못하도록 private 접근 제한자를 사용하여 데이터를 보호하고, 생성자를 통해 넓이와 높이를 초기화할 수 있도록 하는 것입니다.

아래는 개선된 코드의 예시입니다.

package oop1.ex;

public class Rectangle {
    private int width;
    private int height;

    // 생성자를 통해 객체를 초기화합니다. 
    public Rectangle(int width, int height){
        this.width = width;
        this.height = height;
    }

    // 기타 메서드는 동일하게 유지됩니다.
    // ...
}

// Main 클래스에서 Rectangle 객체를 생성할 때, 넓이와 높이를 인자로 전달합니다.
public class RectangleOopMain {
    public static void main(String[] args) {
        Rectangle rectangle = new Rectangle(5, 8);
        rectangle.calculateArea();
        rectangle.calculatePerimeter();
        rectangle.isSquare();
    }
}

이렇게 클래스의 내부 상태를 캡슐화하고, 외부에서는 메서드를 통해서만 상태를 변경할 수 있도록 함으로써 더 견고하고 유지보수가 용이한 객체 지향적인 코드를 작성할 수 있습니다.

깡인한님의 프로필

깡인한

질문자

2024.02.21

감사합니다