인프런 커뮤니티 질문&답변

김윤상 / @yoonsnag님의 프로필 이미지
김윤상 / @yoonsnag

작성한 질문수

김영한의 실전 자바 - 기본편

문제와 풀이

3. 객체 지향 프로그래밍 질문

작성

·

915

·

수정됨

0

package oop1.ex;

public class Ex1Rectangle {
    int height;
    int width;
    int area;
    int perimeter;

    void calculateArea() {
        area = width * height;
        System.out.println("넓이: " + area);
    }
    void calculatePerimeter() {
        perimeter = 2 * (width + height);
        System.out.println("둘레: " + perimeter);
    }
    void isSquare() {
        boolean isSquare = width == height;
        System.out.println("정사각형 여부: "+ isSquare);
    }
}
package oop1.ex;

public class Ex1RectangleObjectMain {

    public static void main(String[] args) {

        Ex1Rectangle rectangle = new Ex1Rectangle();

        rectangle.height = 8;
        rectangle.width = 5;
        rectangle.calculateArea();
        rectangle.calculatePerimeter();
        rectangle.isSquare();
    }
}


[질문 내용]
3. 객체지향 프로그래밍 문제 1번의 제공된 정답에서는

System.out.println으로 출력하는 부분을 main메서드 안에 남겨두었고,

제가 문제를 푸는 과정에서는

객체 클래스에 int area와 int perimeter를 선언한 후, 각 메서드를 int와 boolean값을 반환하지 않는 void메서드로 변경하고, 계산된 값을 출력하는 부분을 각 메서드 안에 넣어놓고,

main메서드에서는 int width와 int height의 값을 지정하고 객체 클래스의 메서드들을 호출만 했고 같은 결과가 나오는데,

둘 중 어느 것이 효율적이고 여러 방면에서 좋은 코드인가요??

답변 2

7

안녕하세요. 김윤상 / @yoonsnag님, 공식 서포터즈 David입니다.

질문자 분께서 작성하신 메서드들은 계산과 출력을 모두 포함하고 있습니다.

예를 들어, calculateArea 메서드는 넓이를 계산하기 위한 메서드이지 계산된 넓이를 출력하는 메서드는 아닙니다. 만약 계산과 출력에 대한 책임을 모두 가지고 있었다면 calculateAndPrintArea로 메서드가 명명되었어야 할 것입니다.

즉, Rectangle의 경우 넓이는 계산하는 메서드를 갖고 있고 이 메서드가 제대로 결과를 내는지 확인하기 위해 메인 메서드에서 출력(print)을 한 것입니다.

그리고 모든 메서드의 반환 값을 void 처리하게 된다면 다른 객체와 협력하기 힘들다는 점이 있습니다.

Rectangle의 넓이를 전달받아 무언가를 처리해야 하는 로직이 있는데 void로 처리함으로써 아무런 값을 반환 받지 못한다면 넓이와 관련된 다른 작업을 할 수 없게 됩니다.

감사합니다.

그러면 코드작성시에 출력코드는 메인 메서드에 두고 작성하나요? 아니면 별도로 관리하는 방법이 있나요?

0

이건 객체지향 프로그램이 아님

김윤상 / @yoonsnag님의 프로필 이미지
김윤상 / @yoonsnag

작성한 질문수

질문하기