2013. 10. 21. 08:09
이전 소스코드상태에서 고객이 Electronic Type의 기타를 원한다고 가정해봅시다. 가게에 Electronic Type의 기타가 여러개 있더라도 사용자는 맨 처음 검색되는 기타만 볼 것입니다.
그 기타가 마음에 들지 않으면 구입하지 않겠네요. 다음 클래스 다이어그램처럼 소스코드를 변경해 봅시다.
search함수가 List형태로 반환하도록 해봅시다.
즉, 필요한 것은 고객의 요구에 맞는 기타를 모조리 반환하도록 변경하는 것입니다.
아래와같이 수정해줍니다.
Inventory.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | public class Inventory { private List guitars; public Inventory(){ guitars = new LinkedList(); } // 새로운 기타를 생성하고 목록에 등록 // public void addGuitar(String serialNumber, double price, Builder fender, String model, Type electric, Wood alder, Wood alder2){ Guitar guitar = new Guitar(serialNumber, price, fender, model, electric, alder, alder2); guitars.add(guitar); } // 시리얼 넘버에 해당되는 기타를 찾음 // public Guitar getGuitar(String serialNumber){ for(Iterator i = guitars.iterator(); i.hasNext(); ){ Guitar guitar = (Guitar)i.next(); if(guitar.getSerialNumber().equals(serialNumber)){ return guitar; } } return null; } // 특정 스펙의 기타를 찾음 // public List search(Guitar searchGuitar){ List machingGuitars = new LinkedList(); for(Iterator i = guitars.iterator(); i.hasNext();){ Guitar guitar = (Guitar)i.next(); if(searchGuitar.getBuilder() != guitar.getBuilder()) continue; // 모델명은 무수히 많음으로 열거형으로 표현하기 부적절함// String model = searchGuitar.getModel().toLowerCase(); if((model != null) && (model.equals("")) && (!model.equals(guitar.getModel().toLowerCase()))) continue; if(searchGuitar.getType() != guitar.getType()) continue; if(searchGuitar.getBackWood() != guitar.getBackWood()) continue; if(searchGuitar.getTopWood() != guitar.getTopWood()) continue; // 원하는 기타를 찾은 경우 // machingGuitars.add(guitar); } // 기타가 존재하지 않는 경우 // return machingGuitars; } } |
위와같이 리스트를 만든 후, 원하는 기타를 모두 추가한 후에 최종적으로 리스트를 반환합니다.
메인부분도 조금만 고치면 되겠네요.
다음과 같이 수정해줍니다.
FindGuitarTester.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class FindGuitarTester { public static void main(String[] args){ Inventory inventory = new Inventory(); initializeInventory(inventory); Guitar whatJinLikes = new Guitar("", 0, Builder.FENDER, "Stratocastor", Type.ELECTRIC, Wood.ALDER, Wood.ALDER); List machingGuitars = inventory.search(whatJinLikes); if(!machingGuitars.isEmpty()){ for(Iterator i = machingGuitars.iterator(); i.hasNext();){ Guitar guitar = (Guitar)i.next(); System.out.println( "Builder : " + guitar.getBuilder() + ", Mode : " + guitar.getModel() + ", " + "Type : " + guitar.getType() + ", BackWood : " + guitar.getBackWood() + ", " + "TopWood : " + guitar.getTopWood() + ", Price : " + guitar.getPrice()); } } else{ System.out.println("Sorry, we have nothing for you."); } } private static void initializeInventory(Inventory inventory){ inventory.addGuitar("V95693", 1499.95, Builder.FENDER, "Stratocastor", Type.ELECTRIC, Wood.ALDER, Wood.ALDER); inventory.addGuitar("V9512", 1549.95, Builder.FENDER, "Stratocastor", Type.ELECTRIC, Wood.ALDER, Wood.ALDER); } } |
아래와같이 조건에 맞는 두개의 기타를 찾아 출력해주는것을 확인할 수 있습니다.
자, 멋진 소프트웨어를 만들기 위한 첫번째 단계 "먼저, 고객이 원하는 기능을 수행하라."를 충족시켰네요.
이제 다음단계 "객체지향의 기본원리를 적용해서 유연하게 개발하라."를 만족시킬 수 있도록 더 공부해 보겠습니다.
'프로그래밍(Programming) > 객체지향(Object-Oriented)' 카테고리의 다른 글
1장. 잘 설계된 프로그램이 세상을 뒤흔든다. - 5 (0) | 2013.10.22 |
---|---|
1장. 잘 설계된 프로그램이 세상을 뒤흔든다. - 4 (0) | 2013.10.22 |
1장. 잘 설계된 프로그램이 세상을 뒤흔든다. - 2 (0) | 2013.10.21 |
1장. 잘 설계된 프로그램이 세상을 뒤흔든다. - 1 (0) | 2013.10.21 |