java-school logo

자바은행 분석/설계

자바 기초를 끝내고 처음으로 자바다운 예제를 실습해 보자. 준비한 예제는 자바로 구현하는 은행 프로그램이다. 만들 프로그램에 대한 명확한 이해를 동료와 공유해야 하는데, 그러기 위해서는 아래 시나리오와 같은 작업이 필요하다.

시나리오

클래스 다이어그램

시나리오로부터 클래스와 필드, 메서드를 추출해 내어야 한다. 시나리오에서 명사는 클래스나 필드로, 동사는 메서드가 된다. 자바은행 클래스다이어그램 추상화 단계 분석/설계 단계에서의 산출물은 아래와 같은 클래스 다이어그램이다.1 자바은행 클래스다이어그램 클래스 다이어그램은 클래스의 구조뿐만 아니라 객체와 객체간 관계를 나타낸다. 클래스 다이어그램에서 두 클래스가 선으로 연결되어 있다면 두 클래스로부터 생성된 객체들은 서로 관계가 있다. 속이 찬 다이아몬드는 객체가 다른 객체를 부품처럼 가지고 있는 관계를 나타낸다.2 0이나 *는 부품처럼 쓰는 객체의 최대 갯수로. 0..*는 0개 이상을 의미한다. 화살표는 객체가 다른 객체의 메서드를 호출하는 방향이다.

주석
  1. 클래스 다어어그램 외에 유즈 케이스 다이어그램(Use Case Diagram), 씨퀀스 다이어그램(Sequence Diagram)등이 있다. 프로젝트에 따라 다양한 다이어그램이 필요할 수 있으나, 여기서 간단한 예제는 클래스 다이어그램으로 충분한다. 클래스 다이어그램에서 접근자는, private는 -로, public은 +로, protected는 #으로 표현한다. 거래내역 클래스(Transaction)의 메서드 란이 비었는데, private인 멤버 변수의 게터와 세터 메서드 외에 특별한 메서드는 없어 생략했다. Bank와 Account 역시 짐작 가능한 게터와 세터 메서드는 생략했다. 분석이 완벽할 수 없으므로 에제가 진행되면서 구현 소스는 위의 클래스 다이어그램과 다를 수 있다.
  2. 객체가 어떤 객체를 부품처럼 가지고 있는 관계를 'has a' 관계라고 한다. '은행은 여러 계좌를 가지고 있다.'는 맞는 말이므로 두 클래스는 'has a'관계다. 'has a'관계 중에서 부품을 가지고 있는 본체가 사라지면 부품도 같이 사라지는 높은 결합도를 합성(Composistion)이라 하고 속이 찬 다이아몬드로 표현한다. 본체가 사라지더라도 부품이 사라지지 않는 낮은 결합도를 집합(Aggregation)이라 하고 속이 빈 다이아몬드로 표현한다. 자바에서는 합성이나 집합 모두 참조형 변수로 구현한다. 자바 프레임워크인 스프링에서는 부품에 해당하는 객체의 참조값을 저장하는 참조형 변수를 종속 변수라고 부른다.
참고