본문 바로가기
Java

[Java] 인터페이스 상속을 활용한 좌표계산기 기능 구현

by bkuk 2023. 5. 8.
해당 글은 NEXTSTEP 자바 플레이그라운드 with TDD, 클린 코드를 통해서 새롭게 배우고 내용을 기록한 글입니다.

좌표계산기(선 길이, 사각형 면적, 삼각형 면적)

기능 요구사항은 다음과 같다.

  • 선 길이

    • X, Y좌표 모두 최대 24까지만 입력
    • 좌표값을 두 개 입력한 경우, 두 점을 있는 직선으로 가정
    • 직선인 경우는 두 점 사이 거리를 계산해서 출력
    • 출력 결과
      직선

  • 사각형 면적

    • 좌표값을 네 개 입력한 경우, 네 점을 연결하는 사각형으로 가정
    • 네 점이 뒤틀어진 사다리꼴이나 마름모는 제외하고 직사각형만 허용하도록 검사
    • 사각형인 경우 사각형의 넓이를 계산해서 출력
    • 출력 결과
      사각형

  • 삼각형 면적

    • 좌표값을 세 개 입력한 경우, 세 점을 연결하는 삼각형으로 가정
    • 삼각형인 경우 삼각형의 넓이를 계산해서 출력
    • 출력 결과
      삼각형

요구사항 정리

  • 직선, 사각형, 삼각형의 좌표 정보를 저장하는 클래스가 필요하다.
    • X, Y좌표의 최댓값은 최대 24까지이며, 이를 검증하는 로직을 책임진다.
    • 좌표와 좌표 사이의 거리를 계산하는 로직을 책임진다.
  • 좌표 리스트를 전달받아 직선인지, 사각형인지, 삼각형인지 확인하는 클래스가 필요하다.
    • 최종적으로 각 도형마다 도형의 이름(Name), 계산 결과(result)가 필요하다.

클래스 분리 및 다이어그램

클래스 다이어그램

  • FigureFactory Class

    • getFigure(List points) : Figure
      • List 객체를 매개변수로 전달받아 List의 사이즈를 확인 후 Figure 객체를 반환
  • Figure Abstract Class

    • getName(), getSize(), getArea()
      • 공통되는 부분으로, 하위(자식)클래스에서 구현하도록 한다.
  • Line, Rectangle, Triangle Class

    • 각각 getName(), getSize(), getArea() 구현
  • Point Class

    • getDistance(Point other) : double
      • 현재 Point 객체와 매개변수로 전달받은 다른 Point 객체와의 거리를 계산 후 반환

인터페이스(interface)로 구현


클래스 다이어그램 - 인터페이스

위 로직도 충분히 유연성 있는 설계라고 생각한다.

다음 단계로 나아가기 위해서, 인터페이스로 구현하는 이유에 대해서 잠시 살펴보고 가자.

  • interface는 자바에서 한 단계 더 높은 추상화를 하기 위해 사용
  • 구현 로직은 존재하지 않으며 메소드에 대한 입력(input), 출력(output)만 정의
  • 변경이 발생할 경우 소스 코드에 변경을 최소화함으로써 유지보수 비용을 줄이고, 변화에 빠르게 대응하기 위함
  • 추상화를 함으로써 미래의 변화에 빠르게 대응할 수 있지만 추상화를 하려면 추상화에 따른 개발 비용이 발생

더 개선할 부분이 있는가? ..

댓글