지난 시간에 이어 아래 코드를 확인해 보도록 하겠습니다.
아래 코드에서 CalculateCommnad는 CalculateType, num1, num2 를 가지고 있습니다. 만약 해당 필드가 삭제가 된다면 getter 메서드도 함께 제거 되어야 하며 Client 코드 및 CalculateCommand를 사용 하는 기타 코드들도 변경이 이루어 져야 합니다.
이는 결합도가 높은 코드라 볼 수 있으며 필드 따로 계산로직 따로 사용하기 때문에 응집도가 낮다고할 수 있습니다.
CalculateCommand를 너무 잘 아는 Clinet
객체 지향적인 코드는 결합도는 낮고 응집도는 높은 코드입니다.
public class Client {
public int someMethod(CalculateCommand calculateCommand) {
CalculateType calculateType = calculateCommand.getCalculateType();
int num1 = calculateCommand.getNum1();
int num2 = calculateCommand.getNum2();
int result = calculateType.calculate(num1, num2);
return result;
}
}
public class CalculateCommand {
private CalculateType calculateType;
private int num1;
private int num2;
public CalculateCommand(CalculateType calculateType, int num1, int num2) {
if(calculateType == null) {
throw new RuntimeException("CalculateType은 필수 값 입니다.");
}
if(calculateType.equals(CalculateType.DIVIDE) && num2 == 0) {
throw new RuntimeException("0으로 나눌 수 없습니다.");
}
this.calculateType = calculateType;
this.num1 = num1;
this.num2 = num2;
}
public CalculateType getCalculateType() {
return calculateType;
}
public int getNum1() {
return num1;
}
public int getNum2() {
return num2;
}
}
아래 코드에서 좀더 캡슐화된 코드를 작성해 보도록 하겠습니다. 모든 필드는 private로 만들고 공개 하고 싶은 메서드만 public로 외부에 공개 합니다. 아래 코드는 결합도는 낮추고 응집도는 높였습니다.
public class Client {
public int someMethod(CalculateCommand calculateCommand) {
int result = calculateCommand.getCalculateResult();
return result;
}
}
public class CalculateCommand {
private CalculateType calculateType;
private int num1;
private int num2;
public CalculateCommand(CalculateType calculateType, int num1, int num2) {
if(calculateType == null) {
throw new RuntimeException("CalculateType은 필수 값 입니다.");
}
if(calculateType.equals(CalculateType.DIVIDE) && num2 == 0) {
throw new RuntimeException("0으로 나눌 수 없습니다.");
}
this.calculateType = calculateType;
this.num1 = num1;
this.num2 = num2;
}
public int getCalculateResult() {
CalculateType calculateType = this.calculateType;
int num1 = this.num1;
int num2 = this.num2;
int result = calculateType.calculate(num1, num2);
return result;
}
}
'자바' 카테고리의 다른 글
Object Class (1) | 2023.12.11 |
---|---|
예외 (0) | 2023.12.11 |
추상클래스와 인터페이스 (0) | 2023.12.11 |
상속과 다형성 기본 (0) | 2023.12.11 |
객체지향적으로 개발해야 하는 이유 (0) | 2023.12.11 |