프로시저 추상화와 데이터 추상화
프로시저 추상화는 소프트웨어가 무엇을 해야하는지를 추상화하고, 데이터 추상화는 소프트웨어가 무엇을 알아야 하는지를 추상화한다.
프로시저 추상화와 기능 분해
기능 분해 방법을 이용한 급여 관리 시스템 구축
`급여 = 기본급 - (기본급 * 소득세율)`
- 직원의 급여를 계산한다
- 사용자로부터 소득세율을 입력받는다
- '세율을 입력하세요: ' 라는 문장을 화면에 출력한다
- 키보드를 통해 세율을 입력받는다
- 직업의 급여를 계산한다
- 전역 변수에 저장된 직원의 기본급 정보를 얻는다
- 급여를 계산한다
- 양식에 맞게 결과를 출력한다
- '이름: {직원명}, 급여 : {계산된 금액}' 형식에 다라 출력 문자열을 생성
- 사용자로부터 소득세율을 입력받는다
기능 분해 방법에서는 기능을 중심으로 필요한 데이터를 결정한다. 기능이 우선이고 데이터는 기능의 뒤를 따름
public class TaxRate {
private static String[] employees = {"유수완", "홍길동"};
private static double[] basePays = {400, 300};
// 직원의 급여를 계산한다
public static void main(String[] args) {
String name = "유수완";
// 1. 사용자로부터 소득세율을 입력받는다.
double taxRate = getTaxRate();
// 2. 직원의 급여를 계산한다
double pay = calculatePayFor(name, taxRate);
// 3. 양식에 맞게 결과를 출력한다.
System.out.println(describeResult(name, pay));
}
private static double getTaxRate() {
// 1. '세율을 입력하세요:' 라는 문장을 화면에 출력한다.
// 2. 키보드를 통해 세율을 입력받는다 (생략)
System.out.println("세율을 입력하세요 : ");
return 3.3;
}
private static double calculatePayFor(String name, double taxRate) {
// 1. 전역 변수에 저장된 직원의 기본급 정보를 얻는다.
int index = Arrays.asList(employees).indexOf(name);
double basePay = basePays[index];
// 2. 급여를 계산한다.
return basePay - (basePay * taxRate);
}
private static String describeResult(String name, double pay) {
return "이름 : " + name + ", 급여 :" + pay;
}
}
문제점
- 시스템은 하나의 메인 함수로 구성돼 있지 않다
- 기능 추가나 요구사항 변경으로 인해 메인 함수를 빈번하게 수정해야 한다
- 비즈니스 로직인 사용자 인터페이스와 강하게 결합된다
- 하향식 분해는 너무 이른 시기에 함수들의 실행 순서를 고정시키기 때문에 유연성과 재사용성이 저하된다
- 데이터 형식이 변경될 경우 파급효과를 예측할 수 없다
-> 변경에 취약한 설계를 낳는다
모듈
- 시스템의 변경을 관리하는 기본적인 전략
- 함꼐 변경되는 부분을 하나의 구현 단위로 묶고
- 퍼블릭 인터페이스를 통해서만 접근하도록 만듦
- 변경의 방향에 맞춰시스템을 분해
- 기능 분해가 하나의 기능을 구현하기 위해 필요한 기능들을 순차적으로 찾아가는 탐색의 과정이라면,
- 모듈 분해는 감춰야 하는 비밀을 선택하고 비밀 주변에 안정적인 보호막을 설치하는 보존의 과정이다
- 시스템을 모듈 단위로 분해하는 방법? -> 시스템이 감춰야 하는 비밀을 찾자 -> 외부에서 내부의 비밀에 접근하지 못하도록 인퍼테이스를 만들자
- 감춰야 하는 비밀
- 복잡성 : 간단한 인터페이스 생성
- 변경 가능성 : 하나의 모듈만 수정하면 되도록 변경 가능한 설계를 모듈 내부로 감춤
- 감춰야 하는 비밀
모듈의 장점과 한계
- 장점
- 모듈 내부의 변수가 변경되더라도 모듈 내부에만 영향을 미침
- 비즈니스 로직과 사용자 인터페이스에 대한 관심사를 분리
- 전역 변수와 전역 함수를 제거함으로써 네임스페이스 오염을 방지
데이터 추상화와 추상 데이터 타입
- 클래스 - 추상 데이터 타입?
- 클래스 : 상속과 다형성을 지원
- 추상 데이터 타입 : 지원 x
'기술 서적 정리 > 오브젝트' 카테고리의 다른 글
8장 의존성 관리하기 (0) | 2023.04.24 |
---|---|
6장 메시지와 인터페이스 (0) | 2023.04.03 |
오브젝트 스터디 2회, 3회 회고 (0) | 2023.03.29 |
5장 책임 할당하기 (0) | 2023.03.26 |
오브젝트 스터디 1회 회고 (0) | 2023.03.18 |
댓글