2013. 10. 21. 05:41
해당 책의 소스코드는 http://www.headfirstlabs.com에서 제공한다고 합니다.
1장의 내용을보니 3가지 단계로 멋진 소프트웨어를 만들 수 있다고 합니다. 정리해보면 다음과 같습니다.
1) 먼저, 고객이 원하는 기능을 수행하라.
2) 객체지향의 기본원리를 적용해서 유연하게 개발하라.
3) 유지보수와 재사용이 쉬운 디자인을위해 노력하라.
다음은 기타를 등록하거나 고객이 원하는 기타를 제공하는 예제입니다.
이는 아직 불완전한 소스코드이며, 하나씩 고쳐가면서 객체지향 공부를 진행해 보겠습니다.
그전에 클래스 다이어그램입니다.
아직 간단한 구조이지만 소스코드를 보기전에 클래스 다이어그램을 접하면 접근이 더욱 쉽습니다.
Guitar.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 | package com.tistory.shelob; public class Guitar { private String serialNumber, builder, model, type, backWood, topWood; private double price; public Guitar(String serialNumber, double price, String builder, String model, String type, String backWood, String topWood){ this.serialNumber = serialNumber; this.price = price; this.builder = builder; this.model = model; this.type = type; this.backWood = backWood; this.topWood = topWood; } public String getSerialNumber(){ return serialNumber; } public double getPrice() { return price; } public void setPrice(float newPrice){ this.price = newPrice; } public String getBuilder() { return builder; } public String getModel() { return model; } public String getType() { return type; } public String getBackWood() { return backWood; } public String getTopWood() { return topWood; } } |
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 53 54 55 56 57 58 59 60 61 62 63 64 | package com.tistory.shelob; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class Inventory { private List guitars; public Inventory(){ guitars = new LinkedList(); } // 새로운 기타를 생성하고 목록에 등록 // public void addGuitar(String serialNumber, double price, String builder, String model, String type, String backWood, String topWood){ Guitar guitar = new Guitar(serialNumber, price, builder, model, type, backWood, topWood); 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 Guitar search(Guitar searchGuitar){ for(Iterator i = guitars.iterator(); i.hasNext();){ Guitar guitar = (Guitar)i.next(); // "", 0, "fender", "Stratocastor", "electric", "Alder", "Alder" String builder = searchGuitar.getBuilder(); if((builder != null) && (!builder.equals("")) && (!builder.equals(guitar.getBuilder()))) continue; String model = searchGuitar.getModel(); if((model != null) && (!model.equals("")) && (!model.equals(guitar.getModel()))) continue; String type = searchGuitar.getType(); if((type != null) && (!type.equals("")) && (!type.equals(guitar.getType()))) continue; String backWood = searchGuitar.getBackWood(); if((backWood != null) && (!backWood.equals("")) && (!backWood.equals(guitar.getBackWood()))) continue; String topWood = searchGuitar.getTopWood(); if((topWood != null) && (!topWood.equals("")) && (!topWood.equals(guitar.getTopWood()))) continue; // 원하는 기타를 찾은 경우 // return guitar; } // 기타가 존재하지 않는 경우 // return null; } } |
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 | package com.tistory.shelob; public class FindGuitarTester { public static void main(String[] args){ Inventory inventory = new Inventory(); initializeInventory(inventory); Guitar whatJinLikes = new Guitar("", 0, "fender", "Stratocastor", "electric", "Alder", "Alder"); Guitar guitar = inventory.search(whatJinLikes); if (guitar != null){ 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, "Fender", "Stratocastor", "electiric", "Alder", "Alder"); } } |
FindGuitarTester.java의 20번째 줄에서 기타를 등록했고, 그 기타와 동일한 기타를 10번째 줄에서 요구하고
있습니다. 그러나, 위 소스는 항상 "Sorry, we have nothing for you."라는 말로 기타가 없다는 출력을 내보냅니다. 분명 기타를 입력한것 같은데 말이지요.
8번째줄의 기타의 타입은 "fender"이고, 21번째 기타의 타입은 "Fender"이기 때문에 대소문자의 차이로 해당 기타가 없다고 출력했던 것입니다.
위에서 언급한 3가지 단계중 "1) 먼저, 고객이 원하는 기능을 수행하라."처럼 먼저 고객이 요청한 내용에 좀더 바른 기능을 수행하도록 변경하도록 하겠습니다.
'프로그래밍(Programming) > 객체지향(Object-Oriented)' 카테고리의 다른 글
1장. 잘 설계된 프로그램이 세상을 뒤흔든다. - 5 (0) | 2013.10.22 |
---|---|
1장. 잘 설계된 프로그램이 세상을 뒤흔든다. - 4 (0) | 2013.10.22 |
1장. 잘 설계된 프로그램이 세상을 뒤흔든다. - 3 (0) | 2013.10.21 |
1장. 잘 설계된 프로그램이 세상을 뒤흔든다. - 2 (0) | 2013.10.21 |