230222 TIL #15 SOLID 계산기 문제

김춘복·2023년 2월 22일
0

TIL : Today I Learned

목록 보기
15/571

230222 Today I Learned

객체지향 나머지와 SOLID원칙에 대해 공부했다. SOLID 과제가 꽤나 힘들어서 재검토 해보려 한다.


SOLID 계산기 문제

  • 문제점 : SOLID원칙 계산기 과제 중 SRP과제를 풀다가 인스턴스를 생성할 때 여러 클래스를 한번에 선언하는 방법을 몰라 하나하나 인스턴스를 생성했다.

  • 시도 :
    우선 Calculator 클래스를 추상클래스로 만들고 operate 메서드도 추상메서드로 만들었다.
    그리고 인스턴스를 하나하나씩 생성해서 각각 오버라이딩한 .operate()메서드를 써서 문제를 풀었다.

        Calculator addCalculator = new AddOperation();
        Calculator subtractCalculator = new SubstractOperation();
        Calculator multiplyCalculator = new MultiplyOperation();
        Calculator divideCalculator = new DivideOperation();

하지만 다음 과제로 넘어 가면서 더 좋은 방법을 찾았다.

  • 해결 :
public class Calculator {
    public int calculate(AbstractOperation abstractOperation,int firstNumber, int secondNumber){
        return abstractOperation.operate(firstNumber,secondNumber);
    }
}

계산을 담당하는 추상클래스를 하나 만들어 각 연산 클래스가 상속받게 하고,
Calculator클래스에 인스턴스 메소드를 만들어 매개변수로 추상클래스를 받게 해서
client가 각 연산을 할 때 메소드의 매개변수로 원하는 연산 클래스를 넣게하면 되도록
설계하니 코드가 확 줄어들고 SRP, OCP원칙도 지켜지게 되었다.

  • 알게된 것 : 설계과정에서 SOLID를 잘 지키게하면 코드의 길이가 줄어들고 가독성이 좋아진다.
    아직 익숙치 않으니 더 연습해봐야겠다.

그 외 오늘 알게된 것

  • static 메소드는 인스턴스 변수와 인스턴스 메소드를 호출할 수 없지만,
    인스턴스 메소드는 static 변수와 static 메소드를 호출할 수 있다.

해야할 것

  • 리팩토링?

  • 인터페이스에서 static메서드와 default메서드? 자바의정석 p.268

  • 인터페이스와 추상클래스의 차이 << 면접질문 단골이라니 따로 정리를 한번 하자

profile
Backend Dev / Data Engineer

0개의 댓글