'프로그래밍/JAVA프로그래밍'에 해당되는 글 42건

  1. 2012.07.28 map실습
  2. 2012.07.28 ArrayList실습
  3. 2012.07.28 5개의 로또번호 출력하기 - collection실습
  4. 2012.07.28 컬렉션(collection)
  5. 2012.07.28 인터페이스(interface)
  6. 2012.07.28 추상화(abstract)
  7. 2012.07.28 다형성 - 실습
  8. 2012.07.28 다형성(polymorephism)
  9. 2012.07.28 의존관계(dependency)
  10. 2012.07.28 final변수

* 전체적으로 조회하는 것은 List가 좋고, 키 값을 가지고 딱 하나만 찾아 낼때는 Map이 편하다.
* Map -* HashTable <- Properties(객체와 객체에서 문자열로 특화시킨 것) <- key(String)
                                    value(String)
      -* HashMap <- key(Object) : key값 안에 들어가는 타입은 거의 String이 들어간다.
      중복허용(X)
      같은 Key-Object추가
      replace처리.
                    value(Object) : 중복허용(O)
        순서개념 없다.
* Map -* key - value
        (Object) (Object)

         - key와 value를 합치면 entry라 부른다.

- 메소드

추가, 변경(replace) : put(Object key,Object value)
조회 : get(Object key) : Object(Value)
삭제 : remove(Object key) : Object(Value)
Key값들(전체)을 조회하는 메소드 : keySet() : Set
entry들(전체)을 조회하는 메소드 : entrySet() : Entry
전체데이터 삭제 : clear()
entry의 개수 : size() : int

* key값의 존재 유무 :  containsKey(Object key) : boolean
  Value값의 존재 유무 :  containsValue(Object value) : boolean

* Map은 테이블 형태로 들어간다.

key    value
-----------------
| k1   |   1    |->entry
|-------------
| k2   |   2    |
|---------------
 

* project : day19
  package : collection.map
  class : MapTest

*new버전 :  java.util.Iterator (Interface) - 조회와 삭제가 가능
 old버전 : (java.util.Enumeration) (Interface) -  조회만 가능
 ->Collection(Interface) 객체가 관리하는 값(객체)들을 조회.

* Iterator : 조회와 삭제를 해준다.(데이터를 모아놓은 List나 Map이 있으면 옆에 붙어서 데이터를 조회 삭제만 한다. 데이터를 직접 모으진 않는다.)
  (장점 :  List나 Map, Set 등의 방법을 Iterator를 통해서 조회해 올수 있다. Set은 조회 방법이 없는데 Iterator를 통해서는 가능하다.)
  -> 값을 순서적으로 돌면서 하나씩 넘겨준다. 값이 없으면 값을 넘기지 않는다.

- Iterator메소드
가져올 값(return할 값)이 있는지 유무 :  hasNext() : boolean
값 리턴 : next() : Object
값 삭제 : remove() : void

- Enumeration
가져올 값(return할 값)이 있는지 유무 :  hasMoreElements() : boolean
값 리턴 : nextElement() : Object

* 사용법

Collection객체.iterator() -> Iterator
Collection객체 = Set,List..


* iterator를 사용한 조회
ex :
  System.out.println("----------Iterator를 이용한 조회-----------------");
  
  Iterator itr = set.iterator();
//  System.out.println(itr.next());
//  System.out.println(itr.next());
//  System.out.println(itr.next());
//  System.out.println(itr.next());
//  System.out.println(itr.next());
  
  while(itr.hasNext()){
   Object obj = itr.next();
   System.out.println(obj);
  }

-------------------------------------------------------------------------------

* Map을 사용한 상품관리 소스

package product.test;
import java.util.ArrayList;
import java.util.List;

import product.dto.DVDPlayer;
import product.dto.ProductDTO;
import product.dto.Television;
import product.service.ProductManagerService;
import product.service.ProductManagerServiceMap;

public class TestProductManagerMap{
 public static void main(String[] args){
  Television tv1 = new Television("tv-111", "LG-3D TV", 2000000, "LG", "최신형 티비", true, true, true);
  Television tv2 = new Television("tv-222", "파브-TV", 1000000, "삼성", "LCD 티비", false, false, true);
//  Television tv2 = new Television("tv-111", "파브-TV", 1000000, "삼성", "LCD 티비", false, false, true);
  DVDPlayer dvd1 = new DVDPlayer("dvd-111", "Bluelay-one", 120000, "삼성", "최신형 블루레이 플레이어", "C", true);
  DVDPlayer dvd2 = new DVDPlayer("dvd-222", "dvd-one", 50000, "LG", "DVD-RW 플레이어", "C", false);
  //관리자인 ProductManagerService객체 생성
  ProductManagerServiceMap pm = new ProductManagerServiceMap();
  pm.addProduct(tv1);
  pm.addProduct(tv2);
  pm.addProduct(dvd1); 
  pm.addProduct(dvd2);
  System.out.println("-------------상품 추가후---------------");
  pm.printProductList();//productList에 저장된 모든 ProductDTO 정보를 프린트
  System.out.println("-----------id로 제품정보 조회------------");
  ProductDTO p1 = pm.searchProductById("tv-111");
  System.out.println("tv-111 제품 정보 : "+p1);
  ProductDTO p2 = pm.searchProductById("tv-222");
  System.out.println("tv-222 제품 정보 : "+p2);
  ProductDTO p3 = pm.searchProductById("dvd-111");
  System.out.println("dvd-111 제품 정보 : "+p3);
  //없는 ID로 조회
  ProductDTO p4 = pm.searchProductById("dvd-222");
  System.out.println("dvd-222 제품 정보 : "+p4);
  System.out.println("-----------정보수정--------------");
  dvd2 = new DVDPlayer("dvd-222", "dvd-one", 702010, "LG", "DVD-RW 플레이어", "Code free", true);
  pm.modifyProductInfo(dvd2);
  pm.printProductList();
  System.out.println("--------삭제----------");
  pm.removeProductById("tv-111");
  pm.printProductList();
  System.out.println("--------Maker조회----------");
  
  ArrayList list = pm.searchProductsByMaker("삼성");
  
  for(int i=0;i<list.size();i++){
   System.out.println(list.get(i));
  }
  
  System.out.println("--------remove조회(Maker로 조회해서 온것 다 삭제----------");
  
 
  for(Object o : list){
   ProductDTO p = (ProductDTO)o;
   pm.removeProductById(p.getProductId());
  }
  pm.printProductList();
 }
}
---------------------------------

package product.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

 

import product.dto.ProductDTO;

public class ProductManagerServiceMap {
 private HashMap productList;

 // private ArrayList productList = new ArrayList();

 // 생성자
 public ProductManagerServiceMap() {
  productList = new HashMap();
 }

 private boolean isNull(Object obj) {
  // boolean flag = false;
  // if(obj ==null){
  // flag =true;
  // }
  // return flag;
  return obj == null;
 }

 // productList에 저장된 모든 제품 정보 출력
 public void printProductList() {

  Set key = productList.keySet();
  Iterator itr = key.iterator();
  while(itr.hasNext()){
//   Object key1 = itr.next();
//   ProductDTO value1 = (ProductDTO) productList.get(key1);
//   System.out.println(value1);
   System.out.println((ProductDTO) productList.get(itr.next()));
   
  }
//  for (Object obj : productList) {
//   System.out.println(obj);
//  }
 }

 // 추가
 public void addProduct(ProductDTO pdto) {
  if (isNull(pdto)) {
   System.out.println("Null 데이터는 추가할 수 없습니다.");
   return;
  }

  /*
   * //같은 ID가 있는지 비교. for(int i=0;i<productList.size();i++){ // ProductDTO
   * pto = (ProductDTO)productList.get(i); //
   * if(pdto.getProductId().equals(pto.getProductId())){ // // }
   * if(((ProductDTO)
   * productList.get(i)).getProductId().equals(pdto.getProductId())){
   * System.out.println("이미 등록된 제품 ID입니다. ID를 바꿔주세요."); return; } }
   */
  if(productList.containsKey(pdto.getProductId())){
   System.out.println("동일한 아이디가 있습니다.");
   return;
  }
  productList.put(pdto.getProductId(), pdto);
 }

 // id로 제품을 조회해서 return
 public ProductDTO searchProductById(String productId) {

  return (ProductDTO) productList.get(productId);

 }

 public void modifyProductInfo(ProductDTO pdto) {
  if (isNull(pdto)) {
   System.out.println("인자로 null값이 들어 왔습니다.");
   return;
  }
  if(!productList.containsKey(pdto.getProductId())){
   System.out.println("동일한 Id가 없습니다.");
   return;
  }
  productList.put(pdto.getProductId(), pdto);

 }

 public void removeProductById(String productId) {

  if (isNull(productId)) {
   System.out.println("인자로 null값이 들어 왔습니다.");
   return;
  }
  if(!productList.containsKey(productId)){
   System.out.println("동일한 아이디가 없습니다.");
   return;
  }
  productList.remove(productId);
  
 }
 public ArrayList searchProductsByMaker(String productsMaker){
  ArrayList list = new ArrayList();
  

  Set keys = productList.keySet();
  Iterator itr = keys.iterator();
  while(itr.hasNext()){
   Object id = itr.next();
   ProductDTO pto = (ProductDTO) productList.get(id);
   if(productsMaker.equals(pto.getProductMaker())){
    list.add(pto);
   }
  }
  return list;
  
 }
}


---------------------------------

package product.dto;

public class ProductDTO {
 private String productId;
 private String productName;
 private int productPrice;
 private String productMaker;
 private String productInfo;
 public ProductDTO(String productId, String productName, int productPrice,
   String productMaker, String productInfo) {
  this.productId = productId;
  this.productName = productName;
  this.productPrice = productPrice;
  this.productMaker = productMaker;
  this.productInfo = productInfo;
 }
 public ProductDTO() {
 }
 public String getProductId() {
  return productId;
 }
 public void setProductId(String productId) {
  this.productId = productId;
 }
 public String getProductName() {
  return productName;
 }
 public void setProductName(String productName) {
  this.productName = productName;
 }
 public int getProductPrice() {
  return productPrice;
 }
 public void setProductPrice(int productPrice) {
  this.productPrice = productPrice;
 }
 public String getProductMaker() {
  return productMaker;
 }
 public void setProductMaker(String productMaker) {
  this.productMaker = productMaker;
 }
 public String getProductInfo() {
  return productInfo;
 }
 public void setProductInfo(String productInfo) {
  this.productInfo = productInfo;
 }
 @Override
 public String toString() {
  return "ProductDTO [productId=" + productId + ", productName="
    + productName + ", productPrice=" + productPrice
    + ", productMaker=" + productMaker + ", productInfo="
    + productInfo + "]";
 }
 
}


-----------------------

package product.dto;

public class Television extends ProductDTO{
 private boolean threeD;
 private boolean smartTV;
 private boolean usb;
 public Television(String productId, String productName, int productPrice,
   String productMaker, String productInfo, boolean threeD,
   boolean smartTV, boolean usb) {
  super(productId, productName, productPrice, productMaker, productInfo);
  this.threeD = threeD;
  this.smartTV = smartTV;
  this.usb = usb;
 }
 public Television(String productId, String productName, int productPrice,
   String productMaker, String productInfo) {
  super(productId, productName, productPrice, productMaker, productInfo);
 }
 public boolean isThreeD() {
  return threeD;
 }
 public void setThreeD(boolean threeD) {
  this.threeD = threeD;
 }
 public boolean isSmartTV() {
  return smartTV;
 }
 public void setSmartTV(boolean smartTV) {
  this.smartTV = smartTV;
 }
 public boolean isUsb() {
  return usb;
 }
 public void setUsb(boolean usb) {
  this.usb = usb;
 }
 @Override
 public String toString() {
  return "Television [threeD=" + (threeD ? "3DTV" : "2GTV") + ", smartTV=" + (smartTV ? "스마트TV" : "일반TV")
    + ", usb=" + (usb ? "Usb사용가능" : "usb사용불가능") + ", 일반제품정보=" + super.toString() + "]";
 }

 

 
 
}


------------------------

package product.dto;

public class DVDPlayer extends ProductDTO{
 private String areaCode;
 private boolean bluelay;
 public DVDPlayer(String productId, String productName, int productPrice,
   String productMaker, String productInfo, String areaCode,
   boolean bluelay) {
  super(productId, productName, productPrice, productMaker, productInfo);
  this.areaCode = areaCode;
  this.bluelay = bluelay;
 }
 public DVDPlayer(String productId, String productName, int productPrice,
   String productMaker, String productInfo) {
  super(productId, productName, productPrice, productMaker, productInfo);
 }
 public String getAreaCode() {
  return areaCode;
 }
 public void setAreaCode(String areaCode) {
  this.areaCode = areaCode;
 }
 public boolean isBluelay() {
  return bluelay;
 }
 public void setBluelay(boolean bluelay) {
  this.bluelay = bluelay;
 }
 @Override
 public String toString() {
  return "DVDPlayer [areaCode=" + areaCode + ", bluelay=" + (bluelay? "사용가능" : "사용불가능")
    + ", 일반제품정보=" + super.toString() + "]";
 }

 

}


----------------------


* map 타입 맞추기
HashMap map = new HashMap();
map.put("name","홍길동");
map.put("age",10);

Set ke = map.keySet();
Iterator itr = ke.iterator();
while(itr.hasNext()){
String k = (String)itr.next();
String v = (String)map.get(k);  //이렇게 하면 age의 10인 Integer를 받아올 때 실행시점에 에러가 난다.

그래서 제너릭을 사용해서 map만들 시에 타입을 HashMap<String, String> map = new HashMap(); 이렇게 해서 String 타입만 넣을 수 있게 한다.
제너릭은 실행 시점에 지정한다.

* Generic(제너릭) : class에서 사용할 type을 class작성시 지정하는 것이 아니라 사용시점에 지정하는 것.
구문 :  class선언
public class ClassName<E>{
public void go(E e){
}

사용
ClassName<String> c1 = new ClassNAme<String>();
ClassName<Human> c2 = new ClassName<Human>();

c1.go(String s);//(O)
c1.go(Integer i);//(X)


* Generic파라미터는 static 멤버에서는 사용 불가능 하다.

ArrayList<String> list = new ArrayList<String>();
list.add("aaa");
String str = list.get(0);
//list.add(new Human());//(X)

* 2012-3-22

* Enumeration enu;

while(enu.hasMoreElements()){
Object obj = enu.nextElement();
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

제너릭  (0) 2012.07.29
collection값 빼오기  (0) 2012.07.28
ArrayList실습  (0) 2012.07.28
5개의 로또번호 출력하기 - collection실습  (0) 2012.07.28
컬렉션(collection)  (0) 2012.07.28
Posted by 조은성
,

* ArrayList - 불안전한 대신에 퍼포먼스가 빠르다.(안전한 상황을 만들 수 있다.)
* Vector - 안전한 대신에 퍼포먼스가 느리다.
* Set - 순서허용X      추가 :  add(추가할 객체)
 중복허용X      삭제 : remove(삭제할 객체) : Object
* List- 순서허용       크기 : size()
 중복허용       조회 : set : X
                              List : get(index)
* Map - HashMap
      - HashTable <- Properties(어떤 설정을 저장할 때 사용)

* ProductManagerArrayList
  Package : product.dto ->DTO 클래스
       product.service -> ProductManagerService
     product.test -> ProductTest
  class :

1. DTO(tel, dvd)
2. ProductManagerService - Attribute,Product(),생성자, printProductList()

ex :
//TestProductManager.java


package product.test;
import java.util.ArrayList;
import java.util.List;

import product.dto.DVDPlayer;
import product.dto.ProductDTO;
import product.dto.Television;
import product.service.ProductManagerService;

public class TestProductManager{
 public static void main(String[] args){
  Television tv1 = new Television("tv-111", "LG-3D TV", 2000000, "LG", "최신형 티비", true, true, true);
  Television tv2 = new Television("tv-222", "파브-TV", 1000000, "삼성", "LCD 티비", false, false, true);
//  Television tv2 = new Television("tv-111", "파브-TV", 1000000, "삼성", "LCD 티비", false, false, true);
  DVDPlayer dvd1 = new DVDPlayer("dvd-111", "Bluelay-one", 120000, "삼성", "최신형 블루레이 플레이어", "C", true);
  DVDPlayer dvd2 = new DVDPlayer("dvd-222", "dvd-one", 50000, "LG", "DVD-RW 플레이어", "C", false);
  //관리자인 ProductManagerService객체 생성
  ProductManagerService pm = new ProductManagerService();
  pm.addProduct(tv1);
  pm.addProduct(tv2);
  pm.addProduct(dvd1); 
  pm.addProduct(dvd2);
  System.out.println("-------------상품 추가후---------------");
  pm.printProductList();//productList에 저장된 모든 ProductDTO 정보를 프린트
  System.out.println("-----------id로 제품정보 조회------------");
  ProductDTO p1 = pm.searchProductById("tv-111");
  System.out.println("tv-111 제품 정보 : "+p1);
  ProductDTO p2 = pm.searchProductById("tv-222");
  System.out.println("tv-222 제품 정보 : "+p2);
  ProductDTO p3 = pm.searchProductById("dvd-111");
  System.out.println("dvd-111 제품 정보 : "+p3);
  //없는 ID로 조회
  ProductDTO p4 = pm.searchProductById("dvd-222");
  System.out.println("dvd-222 제품 정보 : "+p4);
  System.out.println("-----------정보수정--------------");
  dvd2 = new DVDPlayer("dvd-222", "dvd-one", 70000, "LG", "DVD-RW 플레이어", "Code free", true);
  pm.modifyProductInfo(dvd2);
  pm.printProductList();
  System.out.println("--------삭제----------");
  pm.removeProductById("tv-111");
  pm.printProductList();
  System.out.println("--------Maker조회----------");
  
  ArrayList list = pm.searchProductsByMaker("삼성");
  
  for(int i=0;i<list.size();i++){
   System.out.println(list.get(i));
  }
  
  System.out.println("--------remove조회----------");
  
 
  for(Object o : list){
   ProductDTO p = (ProductDTO)o;
   pm.removeProductById(p.getProductId());
  }
  pm.printProductList();
 }
}
-------------------------

package product.service;

import java.util.ArrayList;

import product.dto.ProductDTO;

public class ProductManagerService {
 private ArrayList productList;

 // private ArrayList productList = new ArrayList();

 // 생성자
 public ProductManagerService() {
  productList = new ArrayList();
 }

 private boolean isNull(Object obj) {
  // boolean flag = false;
  // if(obj ==null){
  // flag =true;
  // }
  // return flag;
  return obj == null;
 }

 // productList에 저장된 모든 제품 정보 출력
 public void printProductList() {
  // for(int i=0;i<productList.size();i++){
  // System.out.println(productList.get(i));
  // }
  for (Object obj : productList) {
   System.out.println(obj);
  }
 }

 // 추가
 public void addProduct(ProductDTO pdto) {
  if (isNull(pdto)) {
   System.out.println("Null 데이터는 추가할 수 없습니다.");
   return;
  }

  ProductDTO pt = searchProductById(pdto.getProductId());
  if (!isNull(pt)) {
   System.out.println("이미 등록된 제품 ID입니다. ID를 바꿔주세요.");
   return;
  }
  /*
   * //같은 ID가 있는지 비교. for(int i=0;i<productList.size();i++){ // ProductDTO
   * pto = (ProductDTO)productList.get(i); //
   * if(pdto.getProductId().equals(pto.getProductId())){ // // }
   * if(((ProductDTO)
   * productList.get(i)).getProductId().equals(pdto.getProductId())){
   * System.out.println("이미 등록된 제품 ID입니다. ID를 바꿔주세요."); return; } }
   */

  productList.add(pdto);
 }

 // id로 제품을 조회해서 return
 public ProductDTO searchProductById(String productId) {

  ProductDTO pDTO = null;
  if (isNull(productId)) {
   System.out.println("인자로 null값이 들어 왔습니다.");
   return pDTO;
  }

  for (int i = 0; i < productList.size(); i++) {
   if ((((ProductDTO) productList.get(i)).getProductId())
     .equals(productId)) {
    pDTO = ((ProductDTO) productList.get(i));
    break;
   }
  }
  return pDTO;

 }

 public void modifyProductInfo(ProductDTO pdto) {
  if (isNull(pdto)) {
   System.out.println("인자로 null값이 들어 왔습니다.");
   return;
  }
  for (int i = 0; i < productList.size(); i++) {
   if ((((ProductDTO) productList.get(i)).getProductId()).equals(pdto
     .getProductId())) {
    productList.set(i, pdto);
    break;
   }
  }
 }

 public void removeProductById(String productId) {

  if (isNull(productId)) {
   System.out.println("인자로 null값이 들어 왔습니다.");
   return;
  }
/*  for (int i = 0; i < productList.size(); i++) {
   if ((((ProductDTO) productList.get(i)).getProductId())
     .equals(productId)) {
    //productList.remove(i);
    
    // productList.remove(productId);//객체를 전부 지워야하는데 이름만 넘겨서 이름만 지우는 역할을 한다.
   }

  }*/
  ProductDTO pto = searchProductById(productId);
  productList.remove(pto);
 }
 public ArrayList searchProductsByMaker(String productsMaker){
  ArrayList productMakers = new ArrayList();
  for(int i=0;i<productList.size();i++){
   if((((ProductDTO) productList.get(i)).getProductMaker()).equals(productsMaker)){
    productMakers.add(productList.get(i));
   }
  }
  return productMakers;
  
 }
}


--------------------

package product.dto;

public class ProductDTO {
 private String productId;
 private String productName;
 private int productPrice;
 private String productMaker;
 private String productInfo;
 public ProductDTO(String productId, String productName, int productPrice,
   String productMaker, String productInfo) {
  this.productId = productId;
  this.productName = productName;
  this.productPrice = productPrice;
  this.productMaker = productMaker;
  this.productInfo = productInfo;
 }
 public ProductDTO() {
 }
 public String getProductId() {
  return productId;
 }
 public void setProductId(String productId) {
  this.productId = productId;
 }
 public String getProductName() {
  return productName;
 }
 public void setProductName(String productName) {
  this.productName = productName;
 }
 public int getProductPrice() {
  return productPrice;
 }
 public void setProductPrice(int productPrice) {
  this.productPrice = productPrice;
 }
 public String getProductMaker() {
  return productMaker;
 }
 public void setProductMaker(String productMaker) {
  this.productMaker = productMaker;
 }
 public String getProductInfo() {
  return productInfo;
 }
 public void setProductInfo(String productInfo) {
  this.productInfo = productInfo;
 }
 @Override
 public String toString() {
  return "ProductDTO [productId=" + productId + ", productName="
    + productName + ", productPrice=" + productPrice
    + ", productMaker=" + productMaker + ", productInfo="
    + productInfo + "]";
 }
 
}


-----------------


package product.dto;

public class Television extends ProductDTO{
 private boolean threeD;
 private boolean smartTV;
 private boolean usb;
 public Television(String productId, String productName, int productPrice,
   String productMaker, String productInfo, boolean threeD,
   boolean smartTV, boolean usb) {
  super(productId, productName, productPrice, productMaker, productInfo);
  this.threeD = threeD;
  this.smartTV = smartTV;
  this.usb = usb;
 }
 public Television(String productId, String productName, int productPrice,
   String productMaker, String productInfo) {
  super(productId, productName, productPrice, productMaker, productInfo);
 }
 public boolean isThreeD() {
  return threeD;
 }
 public void setThreeD(boolean threeD) {
  this.threeD = threeD;
 }
 public boolean isSmartTV() {
  return smartTV;
 }
 public void setSmartTV(boolean smartTV) {
  this.smartTV = smartTV;
 }
 public boolean isUsb() {
  return usb;
 }
 public void setUsb(boolean usb) {
  this.usb = usb;
 }
 @Override
 public String toString() {
  return "Television [threeD=" + (threeD ? "3DTV" : "2GTV") + ", smartTV=" + (smartTV ? "스마트TV" : "일반TV")
    + ", usb=" + (usb ? "Usb사용가능" : "usb사용불가능") + ", 일반제품정보=" + super.toString() + "]";
 }

 

 
 
}


---------------------

package product.dto;

public class DVDPlayer extends ProductDTO{
 private String areaCode;
 private boolean bluelay;
 public DVDPlayer(String productId, String productName, int productPrice,
   String productMaker, String productInfo, String areaCode,
   boolean bluelay) {
  super(productId, productName, productPrice, productMaker, productInfo);
  this.areaCode = areaCode;
  this.bluelay = bluelay;
 }
 public DVDPlayer(String productId, String productName, int productPrice,
   String productMaker, String productInfo) {
  super(productId, productName, productPrice, productMaker, productInfo);
 }
 public String getAreaCode() {
  return areaCode;
 }
 public void setAreaCode(String areaCode) {
  this.areaCode = areaCode;
 }
 public boolean isBluelay() {
  return bluelay;
 }
 public void setBluelay(boolean bluelay) {
  this.bluelay = bluelay;
 }
 @Override
 public String toString() {
  return "DVDPlayer [areaCode=" + areaCode + ", bluelay=" + (bluelay? "사용가능" : "사용불가능")
    + ", 일반제품정보=" + super.toString() + "]";
 }

 

}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

collection값 빼오기  (0) 2012.07.28
map실습  (0) 2012.07.28
5개의 로또번호 출력하기 - collection실습  (0) 2012.07.28
컬렉션(collection)  (0) 2012.07.28
인터페이스(interface)  (0) 2012.07.28
Posted by 조은성
,

* 5개의 로또번호 출력하기
ex :

package collection;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.TreeSet;

public class Lotto {

 public static void main(String[] args) {
  //1~45의 숫자중 중복하지 않는 숫자 6개를 만들어 출력하시오.
  //[5,23,1,8,9,14]
  //랜덤한 숫자
  //숫자 - 6개
  //중복되지 않는 숫자를 어떻게 모을 것인가.
  
  ArrayList arrList = new ArrayList();
  //TreeSet lotto=null;

  for(int i =0;i<5;i++){
   TreeSet  lotto = new TreeSet();
   while(true){
    
    lotto.add((int)(Math.random()*45+1));

    if(lotto.size()==6){
  
     break;
    }
   }
  arrList.add(lotto);
  }
  System.out.println("로또 예상 : ");
  System.out.println(arrList);
  
  System.out.println("로또 예상 : ");
  for(int i=0;i<arrList.size();i++){
   System.out.println(arrList.get(i));
  }
  System.out.println("-----------향상된 for문----------");
  for(Object obj : arrList){
   //TreeSet ts = (TreeSet)obj;
   //System.out.println(ts);
   System.out.println(obj.toString());
   
  }

 }

}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

map실습  (0) 2012.07.28
ArrayList실습  (0) 2012.07.28
컬렉션(collection)  (0) 2012.07.28
인터페이스(interface)  (0) 2012.07.28
추상화(abstract)  (0) 2012.07.28
Posted by 조은성
,

*collection

* 배열은 크기가 한번 정해지면 바뀌지 않는다.
- Collection은 데이터를 계속 집어 넣을 수 있다. (Collection은 자체적으로 데이터를 계속 넣어준다. )
추가 :  add(Object) : boolean (추가가 성공하면 return true, 실패하면 return false)
삭제 :  remove(Object) : boolean (삭제가 성공하면 return true, 실패하면 return false)
조회 : X -> iterator() : Iterator
크기 : size() : int ->관리하는 객체의 수
확인 : contains(Object) : boolean -> 인수로 받은 객체가 collection 안에 있는지 조회.
삭제 : clear() -> 컬렉션 내의 모든 객체 삭체

- Collection<<interface>> -> 값만 모음 - Set : 중복허용(X)
                                               순서(X)

- ~Set - HashSet - 그냥 모으는것.
        TreeSet - 정렬이 필요한 것.


           - List : 중복허용(O)(ex : 똑같은 것을 담을 수 있다.)
       순서(O)(ex : 칸막이가있다.index번호가 생김.배열과 비슷)


 
- ~List - Vector
        - ArrayList(List 중 가장 많이 쓰임) : 전체조회시 좋음.
 - LinkedList : data를 삽입, 삭제시 좋음.

List :  - 추가 :  add(int idx, Object) - 삽입(데이터를 데이터 중간에 넣어주는 것.중간에 값을 넣어주고 데이터가 하나씩 밀려난다.)
            ->idx = 객체를 삽입할 index
        - List는 중간 idx에 null이 있으면 에러가 난다.
 - 수정 : set(int idx, Object) - 교체
 - 구문 : list.Set(2,a);
 - 삭제 : remove(int 삭제할 idx) : Object
  ->특정 idx의 객체를 삭제하고 그 객체를 return
 - 조회 : get(int idx) : Object
         ->특정 index의 객체를 return ->조회
 - indexOf(Object) :  int
  ->인수로 받은 객체의 index(중복된 idx의 0번 idx부터 찾음)를 알려준다.
 - lastIndexOf(Object) : int
  ->인수로 받은 객체의 index(중복된 idx의 마지막 idx)를 알려준다. (ps. 대신 중간에 있는 것은 찾을 수 없다.)

* List ->list -> ArrayList의 객체.

배열 0 ~ length 
for(int i=0;i<list.size();i++){
 Object o = list.get(i);
}

//향상된 for문)
for(Object o : list){
 s.o.p(o);
}


- Map<<interface>> -> 키->값을 쌍으로 모음.  key - value

 

* HashSet ex :

project : day19
package : collection.set
class : SetTest

package collection.set;

import java.util.HashSet;
import java.util.TreeSet;

public class SetTest {
 public static void main(String[] args) {

  // Set - Collection 계열(값만 저장) - 순서 : X, 중복허용 : X
  // HashSet, TreeSet(정렬기능)
  HashSet set = new HashSet();
  // 추가
  set.add("홍길동");
  set.add("이순신");
  set.add("유재석");
  set.add("박명수");
  System.out.println(set);// [객체.toString(), 객체.toString()]
  // 출력 [박명수, 이순신, 홍길동, 유재석] // 이걸 보면 순서가 없다는 것을 알 수 있다.
  boolean flag = set.add("이순신");
  System.out.println(flag + " : " + set);// 중복허용이 안되서 false가 들어가고, 값이 안들어가
            // 있는 것을 볼 수 있다.
  System.out.println("총 객체의 수 : " + set.size()); // 삭제전 총 객체의 수
  // 삭제
  flag = set.remove("박명수");
  System.out.println("박명수 삭제 여부 - " + flag + " : " + set);
  System.out.println("총 객체의 수 : " + set.size());// 삭제 후 총 객체의 수

  System.out.println("------------TreeSet------------");
  TreeSet tSet = new TreeSet(); // 출력 : [길성준, 노홍철, 박명수, 유재석, 정준하, 정형돈, 하하]
          // 내부적으로 ㄱ,ㄴ,ㄷ,ㄹ식으로 정렬되어 나온다.
  tSet.add("유재석");// 정렬기능이 필요할 때 쓴다.
  tSet.add("박명수");
  tSet.add("노홍철");
  tSet.add("정형돈");
  tSet.add("길성준");
  tSet.add("정준하");
  tSet.add("하하");
  System.out.println(tSet);
  flag = tSet.contains("정형돈");// tSet에 정형돈 값을 가지는 String 객체가 있는지를 조회
  System.out.println("정형돈 객체 유무 : " + flag);// 정형돈이 tSet에 들어가 있어서 true가
             // 출력된다.

  // 향상된 for를 이용해 전체 데이터(객체)들 조회 - jdk1.5이상 사용가능.
  for (Object o : tSet) {
   System.out.println(o);
  }

  flag = tSet.isEmpty();// 컬렉션의 size()가 0이면 true
  System.out.println(flag);// tSet에 데이터가 들어가 있으므로 false가 출력
  if (!flag) {// tSet이 비어 있지 않으면
   tSet.clear();
  }
  System.out.println("clear() 후 : " + tSet+", tSet.size() : "+tSet.size()); //컬렉션 내 모든 객체를 remove
  tSet.add(1);//TreeSet의 경우는 같은 데이터만 들어가고 HashSet은 다른 타입도 들어간다.
  tSet.add(2);//기본타입데이터(프리미티브 타입)를 추가 하는 것은 jdk1.5 이상에서만 가능
  tSet.add(3);
  tSet.add(4);
 // tSet.add("abcde");
 // tSet.add(true);
  tSet.add(new Integer(5));//jdk 1.4이하에서의 추가 방법
  System.out.println(tSet);

 }

}

---------------------------------------

=====================================================================
project :  day19
package : collection
class : Lotto


package collection;

import java.util.HashSet;
import java.util.TreeSet;

public class Lotto {

 public static void main(String[] args) {
  //1~45의 숫자중 중복하지 않는 숫자 6개를 만들어 출력하시오.
  //[5,23,1,8,9,14]
  //랜덤한 숫자
  //숫자 - 6개
  //중복되지 않는 숫자를 어떻게 모을 것인가.
  TreeSet ts = new TreeSet();
  int cnt = 0;
  
  //while로 하는 방법
  while(true){
   ts.add((int)(Math.random()*45+1));
   //System.out.println(hs.size());
   cnt++;
   if(ts.size()==6){
    break;
   }
  }
  System.out.println("반복 횟수 : "+cnt);
  System.out.println("로또 예상 : "+ts);
  
  ts.clear();
  cnt=0;
  while(ts.size()<6){
   cnt++;
   ts.add((int)(Math.random()*45+1));
  }
  System.out.println("반복 횟수 : "+cnt);
  System.out.println("로또 예상 : "+ts);
  
  //for로 하는 방법
//  for(;ts.size()<6;){
//   ts.add((int)(Math.random()*45+1));
//  }
//  System.out.println(ts);


 }

}

* project : day19
package : collection.list
class : ArrayListTest

 

package collection.list;

import java.util.ArrayList;

public class ArrayListTest {
 public static void main(String[] args) {
  arraylistBasic();
 }
 public static void arraylistBasic(){
  ArrayList list = new ArrayList(); //배열에 몇개 들어갈지 모르겠다 하면 이렇게 선언하고 딱 몇개 들어갈지 알면 아래와 같이 생성하는게 좋다. 수행시간이 짧아진다.
  //ArrayList list = new ArrayList(10);//초기 length(저장할 수 있는 크기)
  //추가
  list.add("유재석");
  list.add("박명수");
  list.add("정준하");
  list.add("노홍철");
  System.out.println(list);
  
  //조회 - get(int idx) : Object - index의 시작 : 0
  String str = (String) list.get(0);
  System.out.println(str);
  
  System.out.println("-----전체 조회 패턴-----");
  //전체 조회 패턴
  for(int idx=0;idx<list.size();idx++){
   System.out.println(list.get(idx));
  }
  System.out.println("-----향상된 for문 이용 조회 1.5 이상----------");
  for(Object o : list){
   System.out.println(o);
  }
  
  System.out.println("-----삭제----------");
  boolean flag = list.remove("유재석");
  System.out.println("삭제여부 : "+flag+" - "+list);
  
  Object obj = list.remove(1);
  System.out.println("삭제된 객체 : "+obj);
  System.out.println("삭제여부 : "+flag+" - "+list);
  
 }
}


* project : day19
package : collection.dto
class : PersonDTO


package collection.list;

import java.util.ArrayList;

import collection.dto.PersonDTO;

public class ArrayListTest {
 public static void main(String[] args) {
  // arraylistBasic();
  arraylistDTO();
 }

 public static void arraylistDTO() {
  ArrayList list = new ArrayList();
  PersonDTO pdto = new PersonDTO("id-1", "홍길동", 20, "서울");
  list.add(pdto);

  list.add(new PersonDTO("id-2", "이순신", 30, "인천"));
  list.add(new PersonDTO("id-3", "강감찬", 40, "부산"));
  list.add(new PersonDTO("id-4", "김유신", 50, "천안"));
  for (int idx = 0; idx < list.size(); idx++) {
   Object obj = list.get(idx);
   System.out.println(obj.toString());
  }
  System.out.println("-------이름들만 출력 getName()---------");
  for (int idx = 0; idx < list.size(); idx++) {
   PersonDTO obj = (PersonDTO) list.get(idx);
   System.out.println(obj.getName());
  }
  System.out.println("-------향상된 for문을 이용해 나이만 출력---------");
  for (Object o : list) {
   // PersonDTO pto = (PersonDTO)o;
   // System.out.println(pto.getAge());

   System.out.println(((PersonDTO) o).getAge());

  }
 }

 public static void arraylistBasic() {
  ArrayList list = new ArrayList(); // 배열에 몇개 들어갈지 모르겠다 하면 이렇게 선언하고 딱 몇개
           // 들어갈지 알면 아래와 같이 생성하는게 좋다. 수행시간이
           // 짧아진다.
  // ArrayList list = new ArrayList(10);//초기 length(저장할 수 있는 크기)
  // 추가
  list.add("유재석");
  list.add("박명수");
  list.add("정준하");
  list.add("노홍철");
  System.out.println(list);

  // 조회 - get(int idx) : Object - index의 시작 : 0
  String str = (String) list.get(0);
  System.out.println(str);

  System.out.println("-----전체 조회 패턴-----");
  // 전체 조회 패턴
  for (int idx = 0; idx < list.size(); idx++) {
   System.out.println(list.get(idx));
  }
  System.out.println("-----향상된 for문 이용 조회 1.5 이상----------");
  for (Object o : list) {
   System.out.println(o);
  }

  System.out.println("-----삭제----------");
  boolean flag = list.remove("유재석");
  System.out.println("삭제여부 : " + flag + " - " + list);

  Object obj = list.remove(1);
  System.out.println("삭제된 객체 : " + obj);
  System.out.println("삭제여부 : " + flag + " - " + list);

 }
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

ArrayList실습  (0) 2012.07.28
5개의 로또번호 출력하기 - collection실습  (0) 2012.07.28
인터페이스(interface)  (0) 2012.07.28
추상화(abstract)  (0) 2012.07.28
다형성 - 실습  (0) 2012.07.28
Posted by 조은성
,

* interface

* abstract는 class가 가진 것 모두 가질수 있다.
* 인터페이스는 컴파일 시점에 오로지 부모 타입의 역할만 하지만 abstract는 메소드도 만들어 사용도 가능하다.
* interface(기본적으로 abstract와 같으나 부모의 역할만 하고 type의 역할만하고 객체를 생성할수는 없으나(abstract), interface는 추상메소드와 static final 변수만 가질 수 있다. 생성자도 없고, 구현된 메소드없고 타입 역할만 하는 것이다. )
- interface : 완벽히 추상화된 구조.
- 역할 :  상위 Type으로서의 역할 - 자식(하위)클래스에 대한 type과 template을 위한 구조.
- 구문 : [접근제한자] interface 이름[extends 인터페이스,...] <- 인터페이스만 상속받을 수 있고, 인터페이스 끼리는 다중 상속이 된다.
 {
  구현 :  [ public static final ] 변수 = 값;   //[]안에 내용은 생략가능 자동으로 컴파일러가 넣어준다. 무조건 있어야 하므로
   [ public abstract ] 메소드 선언;
 }

-> 접근제한자에는 : publc과 package friendly만 올 수 있다. (인터페이스는 누구든 접근 가능해야 하므로 대부분 public 을 쓴다.)


* interface

- class에서 interface 상속 - 다중상속 가능
  - 구문
    [제한자] class 이름 extends class명 implements interface명, interface명, ....
    {

    }

    public class A extends B implements interfaceA, interfaceB, interfaceC{

    }

* uml

B            <<interface>>          <<interface>>
             interfaceA             interfaceB
^
|                 ^                     ^
                  |                     |
A----------------------------------------

* 기본적으로 자바에서 단일 상속을 지원하는 이유
  A            B
----          ----
go()          go()
 ^             ^
 |             |
 |--------------
        C
       ----
       go()

* interface는 상위 클래스에는 추상화 된 구문만 받아오므로 아래 C에서 go()를 불러도 오버라이딩 된 C의 메소드가 불릴 것이기 때문에 다중 상속이 가능하다.


C                                      A<<interface>>
--------                              ---------------
+void go(){}      ----------------->   void go();
+void come(){}
                                          |
                                          |
                                          V
                                      B<<interface>>
                                      ----------------
                                      +void come();

* class에서 interface 상속 - 다중상속가능
class ->(가 class를 상속할때) class : extends, 단일 상속
interface -> interface : extends, 다중상속
class -> interface : implements, 다중상속

- 역할 : 상위 type - 하위 class가 정의할 메소드 선언(추상)(반드시 오버라이딩하게 만들어 둠)
                   - 다형성에서 하위 객체를 대입할 변수의 type

- public static final 변수 = 값; (여러 곳에서 사용할 수 있는 코드값, 불변의 값을 만들때 사용)
- program의 다른 class들에서 사용할 상수값 선언->코드값, 불변의 값

- 크게 관계 없는 class들을 하나의 type으로 묶을 때 사용.
ex :                                                                       수퍼히어로
                이동수단                 Flyer                               ^                                                 
                                           ^                                  |
                    ^                      |                --------------------------------------
                    |                      |----------------|                 |                  |
-------------------------------------------                슈퍼맨        스파이더맨        배트맨
|                   |                     |               
자동차              배               비행기           

 

* 공통적인 동작을 뽑아서 만든 인터페이스에는 Able을 뒤에 붙인다. (ex : FlyerAble)

*
project : day18
package : interfacetest
class : InterfaceTest
interface : InterfaceA
interface : InterfaceB <- InterfaceA를 상속
interface : interfaceC


package interfacetest;

public class InterfaceTest {
 public static void main(String[] args) {
  SubClass1 s1 = new SubClass1();
  InterfaceA s2 = new SubClass1();
  InterfaceB s3 = new SubClass1();
  
  s2.methodA();
  //s2.methodB();
  s3.methodA();
  s3.methodB();

 }

}


--------

package interfacetest;

public interface InterfaceA {
 public static final int CONST_A = 10;
 //int CONST_A = 10;//public static final을 생략하면 컴파일러가 자동으로 만들어 준다. 위 아래 두개가 같은식이다.
 public abstract void methodA();
 //void methodA(); //public abstract를 생략하면 컴파일러가 자동으로 만들어 준다. 위 아래 두개가 같은식이다.(컴파일러가 자동 생성해 주는 이유는 무조건 필요하기 때문이다.
 
}

---------
package interfacetest;

public interface InterfaceB extends InterfaceA {
 public abstract void methodB();
}

------
package interfacetest;

public interface InterfaceC {
 public abstract void methodC();
}


-----
package interfacetest;


public class SubClass1 implements InterfaceB {

 @Override
 public void methodA() {
  System.out.println("SubClass1.methodA()");

 }

 @Override
 public void methodB() {

  System.out.println("SubClass1.methodB()");

 }

}


--------
================================================================================================

* interface는 class가 아니고 타입의 역할만 하는 거다. 객체화 되지 않는다.
* 추상화class는 class 되고 객체화 되고, 타입의 역할도 한다.

package interfacetest;

public class InterfaceTest {
 public static void main(String[] args) {
  SubClass1 s1 = new SubClass1();
  InterfaceA s2 = new SubClass1();
  InterfaceB s3 = new SubClass1();
  
  s2.methodA();
  //s2.methodB();  //InterfaceB에 선언된 메소드 이므로 컴파일 에러
  s3.methodA();
  s3.methodB();
  SubClass2 su1 = new SubClass2();
  InterfaceA su2  = new SubClass2();
  InterfaceB su3 = new SubClass2();
  InterfaceC su4 = new SubClass2();
  
 }

}


---------

package interfacetest;


public class SubClass1 implements InterfaceB {

 @Override
 public void methodA() {
  System.out.println("SubClass1.methodA()");

 }

 @Override
 public void methodB() {

  System.out.println("SubClass1.methodB()");

 }

}


--------

package interfacetest;


public class SubClass2 implements InterfaceB, InterfaceC {

 @Override
 public void methodA() {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void methodC() {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void methodB() {
  // TODO Auto-generated method stub
  
 }
 
}

--------

package interfacetest;

public interface InterfaceA {
 public static final int CONST_A = 10;
 //int CONST_A = 10;//public static final을 생략하면 컴파일러가 자동으로 만들어 준다. 위 아래 두개가 같은식이다.
 public abstract void methodA();
 //void methodA(); //public abstract를 생략하면 컴파일러가 자동으로 만들어 준다. 위 아래 두개가 같은식이다.(컴파일러가 자동 생성해 주는 이유는 무조건 필요하기 때문이다.
 
}

-------

package interfacetest;

public interface InterfaceB extends InterfaceA {
 public abstract void methodB();
}

--------

package interfacetest;

public interface InterfaceC {
 public abstract void methodC();
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

5개의 로또번호 출력하기 - collection실습  (0) 2012.07.28
컬렉션(collection)  (0) 2012.07.28
추상화(abstract)  (0) 2012.07.28
다형성 - 실습  (0) 2012.07.28
다형성(polymorephism)  (0) 2012.07.28
Posted by 조은성
,

* 추상화(모든 자식class들이 동일하게 하는 것들을 모아서 부모class에 추상화 시켜 놓는 것)
- 추상메소드 :  자식클래스들이 부모클래스의 메소드를 오버라이딩 해서 사용하게 하려고 만듬.
Animal
------
eat()     <- 추상메소드


Dog       Cat        Lion
----      ----       -----
eat()     eat()      eat()

* abstact - instance 메소드, class에 사용되는 제한자
          - 의미 :  추상적이다->구현이 안되었다.
- 메소드 :  메소드 구현없이 선언만한 메소드
예) public abstact void go(); ->{}붙으면 안됨.
->하위 class에서의 overriding 을 강제한다.
->하위class들이 구현할 메소드의 template(틀)역할.


- class -> 객체생성을 못하는 class
예 ) public abstact class Animal{구현}

-abstract 메소드를 가지는 class는 반드시 abstract class가 되야한다.
-부모 class에 정의된 abstract메소드를 overriding 안하면 abstract class가 되야한다.
-abstract class는 구현된 일반메소드도 가질수 있따.

- > 역할 :  자식 class의 template, 자식 객체에 대한 type 역할 - 다형성

 

* abstract class - 일반class
                   field
                   생성자
                   메소드
                   추상메소드
                  

*
project : day18
package : abstr.test
class : AbstractTest

package abstr.test;

abstract class Super{
 int num;

 public Super() {}

 public Super(int num) {
  this.num = num;
 }
 public abstract void methodA();
 public void templateMethod(){
  System.out.println("하위클래스의 구현이 모두 같은 메소드 : "+num);
 }
}
class Sub extends Super{
 public Sub(){}
 public Sub(int num){
  super(num);
 }
 
 public void methodA(){
  System.out.println("Sub.methodA()");
 }
}
public class AbstractTest {
 public static void main(String[] args) {
  //Super s = new Super(); //추상클래스는 객체 생성을 할 수 없다.
  Sub sub = new Sub();
  sub.methodA();
  Sub sub2 = new Sub(100);
  sub2.templateMethod();
 }
}

---------------------------------

project : day18
package : abstr.animal
class : PolymorphicArgsTest


package abstr.animal;

public class PolymorphicArgsTest {
 public void raise(Animal an){
  an.eat();
  an.sleep();
  
 }
 public static void main(String[] args) {
  Dog d = new Dog();
  Lion l = new Lion();
  
  d.eat();
  d.sleep();
  
  System.out.println("------------------------");
  
  PolymorphicArgsTest pt = new PolymorphicArgsTest();
  pt.raise(d);
  pt.raise(l);
 }
}


------


package abstr.animal;

//하위클래스들의 type, 하위클래스들의 틀(Template) -> 추상클래스
public abstract class Animal {
 public abstract void eat();
 public abstract void sleep();

}

---------

package abstr.animal;

public class Lion extends Animal{

 @Override
 public void eat() {
  System.out.println("사자가 먹는다.");
 }

 @Override
 public void sleep() {
   System.out.println("사자가 잔다.");
 }
 
}


------

package abstr.animal;

public class Dog extends Animal{

 @Override
 public void eat() {
  System.out.println("개밥 그릇에 사료를 우그적 먹는다.");
 }

 @Override
 public void sleep() {
  System.out.println("개집에서 잔다.");
 }

 
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

컬렉션(collection)  (0) 2012.07.28
인터페이스(interface)  (0) 2012.07.28
다형성 - 실습  (0) 2012.07.28
다형성(polymorephism)  (0) 2012.07.28
의존관계(dependency)  (0) 2012.07.28
Posted by 조은성
,

다형성 연습

UML - word

package : wordprocessorTest
class : WordUser

package : wordprocessor.word
class : Word

package : wordprocessor.format
class : Format
 AstaFormat
 EqulFormat
 SharpFormat


------


package wordprocessorTest;


import wordprocessor.format.AstaFormat;
import wordprocessor.format.Format;
import wordprocessor.format.SharpFormat;
import wordprocessor.word.Word;

public class WordUser {
 public static void main(String[] args) {
  Word word = new Word();
  Format f = new Format();
  AstaFormat af = new AstaFormat();
  SharpFormat sf = new SharpFormat();
  word.print("출력할 내용 :  Hello",f);
  word.print("출력할 내용 :  Hello",af);
  word.print("출력할 내용 :  Hello",sf);
 }
}


----------

package wordprocessor.word;

import wordprocessor.format.Format;
public class Word {
 public void print(String message, Format format){
  System.out.println(format.getFormat(message));
 }
}


----------

package wordprocessor.format;

public class Format {
 public String getFormat(String message){
  String str;
  str = "---------------------\n"+message+"\n---------------------";
  return str;
 }
}


----------

package wordprocessor.format;


public class AstaFormat extends Format{

 @Override
 public String getFormat(String message) {
  // TODO Auto-generated method stub
  return super.getFormat(message).replace('-','*');
 }
 
}


------------

package wordprocessor.format;

public class EqulFormat extends Format{

 @Override
 public String getFormat(String message) {
  // TODO Auto-generated method stub
  return super.getFormat(message).replace('-', '=');
 }
 

}


-------------

package wordprocessor.format;

public class SharpFormat extends Format{

 @Override
 public String getFormat(String message) {
  // TODO Auto-generated method stub
  return super.getFormat(message).replace('-', '#');
 }
 
}


-----------------------------------------------------------------------------------

=====================================================================================================
       


* 2012-3-16

* 다형성 - 부모tyoe  변수 - 자식객체 (compile시점에 되는 경우는 상속인 경우 부모가 자식보다 더 큰 tyoe이면 다형성이 된다) , 실행시점에서는 부모의 객체와 자식의 객체가 둘다 생성되서 접근가능.
         -> 부모에 정의된 메소드만 호출가능.

- Super s = new Super();
   s.a();(o)자식에 있는 a()를 호출
 s.b();(x)자식에는 b()가 있지만 부모에 없어서 컴파일 시점에서 에러가 난다. 
        

Super              Sub
----- <-------     ------
a()                a()
                   b()

- 배열 Heterogeneous -> reference type의 배열.


* Super = new Super()           c : o
  Sub1 sub = (Sub1)s;           R : x


* Sub1 sub1 = new Sub1();           C : X   (컴파일시점)
  Sub2 sub2 = (Sub2)sub1;           R : X   (실행시점)

* Super s = new Super();            C : O
  Sub1 s1 = (Sub1)s;                R : O

 

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

인터페이스(interface)  (0) 2012.07.28
추상화(abstract)  (0) 2012.07.28
다형성(polymorephism)  (0) 2012.07.28
의존관계(dependency)  (0) 2012.07.28
final변수  (0) 2012.07.28
Posted by 조은성
,

* 다형성(polymorephism) - 부모type의 변수에 자식type의 객체를 대입

int i = 10;
long l = 10; <-작은 type을 큰 타입으로 바꿔주므로 된다. long l = 10L;

byte b = 20;
short s = 5
int i = 30;
long l = b;(o)
long l = s;(o)
long l = i;(o)

- 상속관계일 때는 저렇게 a를 생성하는게 가능하다.
Animal- Dog
      - Cat
      - Human

Animal a = new Animal();(O)
       a = new Cat();
       a = new Dog();


* 컴파일 시점에는 소스코드로 가서 본다 .

Animal
------
eat()       <------
                  |
^                 |
|                 |
Dog               Cat
----              ----
eat()             eat()
cry()             cry()


Animal c = new Cat(); ok
c.eat();  ok   //Animal class에 eat()가 있어서 되지만
c.cry();  no   //Animal class에 cry()를 찾는데 없어서 컴파일 시점에 실행되지 않는다.

이렇게 바꾸면 된다.
Animal a = new Cat();
Cat c = (Cat)a;
c.cry();


* class 변수  = new 생성자()
  변수, 메소드()

compile ->type
실행 -> 객체(값)

Animal a = new Cat();
a.eat();

eat() - compie시점 : Animal
        실행시점 :  Cat

다형성 : 부모에 선언된 메소드만 호출가능.
         자식에 선언된 메소드 사용하려면 형변환 필요.

 

Animal a = new Cat();
a.eat() - c : Animal
        - R : Cat

a.cry() - C : Animal - compile 에러

따라서

Cat c - (Cat) a ;
c.cry() - C : Cat
          R : Cat

* 다형성은 거의 배열에 정의한다.  (다형성의 개념은 중요하지만 우리가 직접 사용하지는 않는다. 쓸것은 이미 class에 다 정의 되어 있다. )

--------------------------------------

project :  day17
package : polymorphism.dto
class : Animal, Dog, Cat

project :  day17
package : polymorphism.test
class : PolymorphismTest


package polymorphism.test;

import polymorphism.dto.Animal;
import polymorphism.dto.Cat;
import polymorphism.dto.Dog;

public class PolymorphismTest {


 public static void main(String[] args) {
  //다형성을 이용해 객체 생성
  //부모 타입 변수 = 자식 타입 객체
  Animal an1 = new Dog();
  Animal an2 = new Cat();
  //모든 클래스의 최상위 -> Object
  Object obj1 = new Animal();
  Object obj2 = new Cat();
  Object obj3 = new Dog();
  
  //이런것도 Polymorphism(다형성)이다.
  Cat c = new Cat();
  Animal an3 = c;
  
  an1.eat();
  an1.sleep();
  an2.eat();
  an2.sleep();
  
  //부모타입변수, 자식의 메소드()          an2.cry();가 Animal type이라 Animal 가도 없으니 Cat type으로 형변환 시켜줘야한다.
  //an2.cry();
  
  //((Cat) an2).cry();
  Cat c2 = (Cat)an2;
  c2.cry();
 }

}

------------------------

package polymorphism.dto;

public class Animal {
 public void eat(){
  System.out.println("동물이 먹는다. ");
 }
 public void sleep(){
  System.out.println("동물이 잔다.");
 }

}


-----------------------------

package polymorphism.dto;

public class Cat extends Animal {

 @Override
 public void eat() {
  System.out.println("고양이가 고양이 밥을 먹는다.");
 }

 @Override
 public void sleep() {
  System.out.println("고양이가 잔다.");
 }
 public void cry(){
  System.out.println("고양이가 운다..야옹.....");
 }
}


-----------------------------

package polymorphism.dto;

public class Dog extends Animal{

 @Override
 public void eat() {
  System.out.println("개밥 그릇에 사료를 우그적 먹는다.");
 }

 @Override
 public void sleep() {
  System.out.println("개집에서 잔다.");
 }

 
}

-----------------------------

* Heterogemeous Collection - 다른 type의 Data를 모으는 배열(객체)!
                           - 배열에 다형성이 적용된 것.
////////////
//객체데이터 모음을 관리 할 수 있다.
for( Animal a : anArr){
 a.eat();
}

/////////////////

long[] l = new long[5];
l[0]=10;
l[1]=20L;
//이렇게 보면 int도 들어가고 long도 들어간다.

Animal[] anArr = new Animal[5];
anArr : Animal[]
anArr[0] : Animal

anArr[0] = new Animal();
anArr[1] = new Dog();
anArr[2] = new Cat();

* 부모 type의 배열에 자식 type 객체들을 할당(대입)

* 자바에서 존재하는 type은 1. 프리미티브 2. 레퍼런스 두개가 있다.


project :  day17
package :  polymorphism.test
class : HeterogemeousTest

package polymorphism.test;

import polymorphism.dto.Animal;
import polymorphism.dto.Cat;
import polymorphism.dto.Dog;

public class HeterogemeousTest {
 public static void main(String[] args) {
  //배열에 다형성을 적용 - 부모 type배열에 자식 타입의 객체를 넣는것.
  Animal[] an1 = new Animal[3];
  Animal[] an2 = new Cat[4];
  
  an1[0] = new Animal();
  an1[1] = new Cat();
  an1[2] = new Dog();
  
  Animal[] an3 = {new Animal(), new Dog(), new Cat()};
  for( int i = 0; i< an1.length;i++){
   an1[i].eat();
  }
  
  System.out.println("============향상된 for문==============");
  //for(변수선언 :  배열)
  for(Animal an : an3){
   if(an instanceof Cat){
   Cat c = (Cat)an;
   c.cry();
   }
   an.sleep();
  }
  boolean b = an3[0] instanceof Cat;
  String str ="abc";
  //b = str instanceof Dog; //둘이 상속이 아니라서 에러가 난다. instanceof는 상속관계에서 사용한다. if문에서 주로 객체비교 시사용
 }
}

 


*instanceof
비교할 객체 instanceof Type :  boolean

a instanceof B -> a가 참조하는 객체가 B type 인지 검사해서 맞으면 true return

boolean "abc" instanceof A; //에러난다. a와 B의 type이 상속관계에 있어야 한다.(서로 완전히 다른 객체면 비교할 필요가 없기 때문이다.)

- a의 type이 B의 상쉬 type일 때만 비교할 수 있다.


* class 는 Datatype로 사용하지만
class 가 Datatype은 아니다.

Animal an = new Animal(); //an에는 Animal, Dog, Cat 다 들어갈 수 있다.


* Polymorphic Argument -> 매개변수에 다형성이 적용된 것이다.

Animal - Cat
      <- Dog
       - Snake

void go( Cat c){
c.eat();
}

void go(Dog d){
d.eat();
}

void go(Snake s){
s.eat();
}

------------

위에 go()메소드를
void go(Animal a){
a.eat();
}
을로 바꿔주면 세개의 메소드를 한개만 만들면 된다. 대신 호출 시 go(d)나 go(c)나 go(s)로 해야한다.

 

----------------------------------------------

project : day17
package : polymorphism.test
class : Zookeeper(사육사), PolymeorphicArgsTest

project : day17
package : polymorphism.dto
class : Lion


package polymorphism.test;

import polymorphism.dto.Cat;
import polymorphism.dto.Dog;
import polymorphism.dto.Lion;

public class PolymeorphicArgsTest {
 public static void main(String[] args) {
  //사육사 객체를 생성
  ZooKeeper zk = new ZooKeeper();
  Dog d = new Dog();
  Cat c = new Cat();
  Lion l = new Lion();
  
  zk.raise(d);
  zk.raise(c);
  zk.raise(l);
 }
}


--------------------------

package polymorphism.test;

import polymorphism.dto.Animal;

public class ZooKeeper {
 /*
  * 우리 청소
  * 밥 먹이기
  * 잠 재우기
  */
 public void raise(Animal a){
  System.out.println("--------------------");
  System.out.println("우리를 청소한다.");
  a.eat();
  a.sleep();
 
 }
}


-------------------------


package polymorphism.dto;

public class Lion extends Animal{

 @Override
 public void eat() {
  System.out.println("사자가 먹는다.");
 }

 @Override
 public void sleep() {
   System.out.println("사자가 잔다.");
 }
 
}
--------------------------

package polymorphism.dto;

public class Dog extends Animal{

 @Override
 public void eat() {
  System.out.println("개밥 그릇에 사료를 우그적 먹는다.");
 }

 @Override
 public void sleep() {
  System.out.println("개집에서 잔다.");
 }

 
}


---------------------------

package polymorphism.dto;

public class Cat extends Animal {

 @Override
 public void eat() {
  System.out.println("고양이가 고양이 밥을 먹는다.");
 }

 @Override
 public void sleep() {
  System.out.println("고양이가 잔다.");
 }
 public void cry(){
  System.out.println("고양이가 운다..야옹.....");
 }
}

-----------------------------------

package polymorphism.dto;

public class Animal {
 public void eat(){
  System.out.println("동물이 먹는다. ");
 }
 public void sleep(){
  System.out.println("동물이 잔다.");
 }

}


-------------------------------------

============================================================================

package polymorphism.test;

import polymorphism.dto.Cat;
import polymorphism.dto.Dog;
import polymorphism.dto.Lion;
import polymorphism.dto.Tiger;

public class PolymeorphicArgsTest {
 public static void main(String[] args) {
  //사육사 객체를 생성
  ZooKeeper zk = new ZooKeeper();
  Dog d = new Dog();
  Cat c = new Cat();
  Lion l = new Lion();
  Tiger t = new Tiger();
  
  
  zk.raise(d);
  zk.raise(c);
  zk.raise(l);
  zk.raise(t);
 }
}


-------------------------------

 

package polymorphism.test;

import polymorphism.dto.Animal;
import polymorphism.dto.Tiger;

public class ZooKeeper {
 /*
  * 우리 청소
  * 밥 먹이기
  * 잠 재우기
  */
 public void raise(Animal a){
  System.out.println("--------------------");
  System.out.println("우리를 청소한다.");
  if(a instanceof Tiger){
   Tiger t = (Tiger)a;
   t.hunt();
   //((Tiger) a).hunt();
  }
  else{
  a.eat();
  }
  a.sleep();
 
 }
}


-------------------------------------

package polymorphism.dto;

public class Animal {
 public void eat(){
  System.out.println("동물이 먹는다. ");
 }
 public void sleep(){
  System.out.println("동물이 잔다.");
 }

}


package polymorphism.dto;

public class Cat extends Animal {

 @Override
 public void eat() {
  System.out.println("고양이가 고양이 밥을 먹는다.");
 }

 @Override
 public void sleep() {
  System.out.println("고양이가 잔다.");
 }
 public void cry(){
  System.out.println("고양이가 운다..야옹.....");
 }
}


package polymorphism.dto;

public class Dog extends Animal{

 @Override
 public void eat() {
  System.out.println("개밥 그릇에 사료를 우그적 먹는다.");
 }

 @Override
 public void sleep() {
  System.out.println("개집에서 잔다.");
 }

 
}


package polymorphism.dto;

public class Lion extends Animal{

 @Override
 public void eat() {
  System.out.println("사자가 먹는다.");
 }

 @Override
 public void sleep() {
   System.out.println("사자가 잔다.");
 }
 
}


package polymorphism.dto;

public class Tiger extends Animal{

 @Override
 public void eat() {
  System.out.println("호랑이가 먹는다.");
  }

 @Override
 public void sleep() {
  System.out.println("호랑이가 잔다.");
 }
 public void hunt(){
  System.out.println("호랑이가 사냥해서 먹는다.");
 }

 
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

추상화(abstract)  (0) 2012.07.28
다형성 - 실습  (0) 2012.07.28
의존관계(dependency)  (0) 2012.07.28
final변수  (0) 2012.07.28
this, super키워드  (0) 2012.07.28
Posted by 조은성
,

* 의존관계
- has a ->Attribute    ex :  자동차 - 엔진         
                                                     - 타이어
   ->aggregation 부엌 - 냉장고(부엌이 만들어 질때 부품들이 채워져 있지 않고 나중에 조금씩 채운다. (life cycle이 같지 않아도 된다.)
   ->composition - 생성될 때 다 같이 생성되야 한다.(부엌이 만들어 질때 부품들이 채워져 있어야한다.)(life cycle이 같아야 한다.)
        
- use a ->메소드 -사용하고 나면 없어지는것.

 

* has a 관계 ( 의존 관계 )
ex :

package dependency;

public class AddressDTO {
 private String zipCode;
 private String addressDetail;
 public AddressDTO() {
 }

 public AddressDTO(String zipCode, String addressDetail) {
  this.zipCode = zipCode;
  this.addressDetail = addressDetail;
 }
 public String getZipCode() {
  return zipCode;
 }
 public void setZipCode(String zipCode) {
  this.zipCode = zipCode;
 }
 public String getAddressDetail() {
  return addressDetail;
 }
 public void setAddressDetail(String addressDetail) {
  this.addressDetail = addressDetail;
 }
 @Override
 public String toString() {
  return "AddressDTO [zipCode=" + zipCode + ", addressDetail="
    + addressDetail + "]";
 }
 
}


------------------


package dependency;

public class SchoolDTO {
 private String schoolId;
 private String schoolName;
 private String schoolTelNo;
 private int enrolment;
 private AddressDTO addressTo;
 

 public SchoolDTO() {}
 public SchoolDTO(String schoolId, String schoolName, String schoolTelNo,
   int enrolment, AddressDTO addressTo) {
  this.schoolId = schoolId;
  this.schoolName = schoolName;
  this.schoolTelNo = schoolTelNo;
  this.enrolment = enrolment;
  this.addressTo = addressTo;
 }
 public String getSchoolId() {
  return schoolId;
 }
 public void setSchoolId(String schoolId) {
  this.schoolId = schoolId;
 }
 public String getSchoolName() {
  return schoolName;
 }
 public void setSchoolName(String schoolName) {
  this.schoolName = schoolName;
 }
 public String getSchoolTelNo() {
  return schoolTelNo;
 }
 public void setSchoolTelNo(String schoolTelNo) {
  this.schoolTelNo = schoolTelNo;
 }
 public int getEnrolment() {
  return enrolment;
 }
 public void setEnrolment(int enrolment) {
  this.enrolment = enrolment;
 }
 public AddressDTO getAddressTo() {
  return addressTo;
 }
 public void setAddressTo(AddressDTO addressTo) {
  this.addressTo = addressTo;
 }
 @Override
 public String toString() {
  return "SchoolDTO [schoolId=" + schoolId + ", schoolName=" + schoolName
    + ", schoolTelNo=" + schoolTelNo + ", enrolment=" + enrolment
    + ", addressTo=" + addressTo + "]";
 }
 
}

 

---------------------------

 

package dependency;

public class StudentDTO {
 private String studentId;
 private String studentName;
 private int studentAge;
 private int studentGrade;
 private int studentClazz;
 private int studentNumber;
 private SchoolDTO schoolTo;

 public StudentDTO(SchoolDTO schoolTo) {
  this.schoolTo = schoolTo;
 }
 
 public StudentDTO(String studentId, String studentName, SchoolDTO schoolTo) {
  this.studentId = studentId;
  this.studentName = studentName;
  this.schoolTo = schoolTo;
 }

 public StudentDTO(String studentId, String studentName, int studentAge,
   int studentGrade, int studentClazz, int studentNumber,
   SchoolDTO schoolTol) {
  this.studentId = studentId;
  this.studentName = studentName;
  this.studentAge = studentAge;
  this.studentGrade = studentGrade;
  this.studentClazz = studentClazz;
  this.studentNumber = studentNumber;
  this.schoolTo = schoolTol;
 }
 public String getStudentId() {
  return studentId;
 }
 public void setStudentId(String studentId) {
  this.studentId = studentId;
 }
 public String getStudentName() {
  return studentName;
 }
 public void setStudentName(String studentName) {
  this.studentName = studentName;
 }
 public int getStudentAge() {
  return studentAge;
 }
 public void setStudentAge(int studentAge) {
  this.studentAge = studentAge;
 }
 public int getStudentGrade() {
  return studentGrade;
 }
 public void setStudentGrade(int studentGrade) {
  this.studentGrade = studentGrade;
 }
 public int getStudentClazz() {
  return studentClazz;
 }
 public void setStudentClazz(int studentClazz) {
  this.studentClazz = studentClazz;
 }
 public int getStudentNumber() {
  return studentNumber;
 }
 public void setStudentNumber(int studentNumber) {
  this.studentNumber = studentNumber;
 }
 public SchoolDTO getSchoolTol() {
  return schoolTo;
 }
 public void setSchoolTol(SchoolDTO schoolTol) {
  this.schoolTo = schoolTol;
 }
 @Override
 public String toString() {
  return "StudentDTO [studentId=" + studentId + ", studentName="
    + studentName + ", studentAge=" + studentAge
    + ", studentGrade=" + studentGrade + ", studentClazz="
    + studentClazz + ", studentNumber=" + studentNumber
    + ", schoolTo=" + schoolTo + "]";
 }
 
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

다형성 - 실습  (0) 2012.07.28
다형성(polymorephism)  (0) 2012.07.28
final변수  (0) 2012.07.28
this, super키워드  (0) 2012.07.28
상속, 생성자  (0) 2012.07.28
Posted by 조은성
,

* final : 변수, 메소드(instance 메소드), class

- 변경이 안된다. (더이상 바꿀 수 없다.)
- 메소드 :  하위 class에서 overriding 할 수 없다.
- class : 하위 class를 가질 수 없는 class.    
(대표 : String class, 선언 -> 한번 값이 대입되면 다시는 대입안됨.
ex :  final int i = 10; i는 프로그램이 끝날때까지 값을 바꿀 수 없고 10만을 갖는다.

변수 :  변수의 상수화-> 한번 값이 대입되면 다시는 대입안됨.
instance변수 : 묵시적 초기화(x)
->값 대입 :  명시적 대입 (명시적 초기화)
->생성자에서 대입

final 변수은 한번 생성해주고 변수를 바꿀 수 없으므로 static과 잘어울린다.

- static 변수 : 선언시 값 대입.
   ->구문 : public static final
class A{
 static final int i =10;
 }

- 지역변수 :  사용 전까지 대입.
public void go(){
 final int i;
 i = 10; (이렇게 사용전에는 대입을 해줘야 하고, 한번 대입되면 값이 바뀔 수 없다. )
 System.out.prinltl(i);
 }

* final변수의 이름 관례 : 대문자
   단어 + 단어 -> 단어_단어

* final class는 상속이 안된다.

project : day16
package : finaltest.clazz
class : SuperClass
    SubClass

package finaltest.clazz;

public final class SuperClass {

}

-----------------

package finaltest.clazz;

public class SubClass extends SuperClass{

}

--------------------

project : day16
package : finaltest.method
class : SuperClass
    SubClass

* final 이 붙은 메소드는 하위 class에서 오버라이드 할 수 없다.

package finaltest.method;

public class SuperClass {
 public final void methodB(){
   System.out.println("안녕하세요");
 }
}
---------------------

package finaltest.method;

public class SubClass extends SuperClass{
 
 @Override
 public void methodB(){
  System.out.println("SubClass 안녕하세요");
}
}

----------------------

project : day16
package : finaltest.var
class : Rectangle

package finaltest.var;

public class Rectangle {
 public static final double PI = 3.14;
 public static final int BLACK = 0;
 public static final int WHITE = 1;
 public static final int BLUE; //여기서 에러가 난다. static final 변수는 선언을 하면서 반드시 값을 대입 해줘야한다.
}
-------------------------------------------

package finaltest.var;

public class Rectangle {
 public static final double PI = 3.14;
 public static final int BLACK = 0;
 public static final int WHITE = 1;
 //public static final int BLUE; //여기서 에러가 난다. static final 변수는 선언을 하면서 반드시 값을 대입 해줘야한다.
 private final int WIDTH;          //final instance변수는 선언시 대입하거나 생성자에서 값을 대입해야한다.  처음 초기화하면 생성자에서 또 다시 값을 넣을 수 없다.
 public Rectangle(int width){
  this.WIDTH = width;
 }

}

-------------------------------------

* 값이 대입되지 않은 로컬 변수는 사용할 수 없다.

package finaltest.var;

public class Rectangle {
 public static final double PI = 3.14;
 public static final int BLACK = 0;
 public static final int WHITE = 1;
 //public static final int BLUE; //여기서 에러가 난다. static final 변수는 선언을 하면서 반드시 값을 대입 해줘야한다.
 private final int WIDTH;
 public Rectangle(int width){
  this.WIDTH = width;
 }
 public void rectMethod(){
  final int var;
  
  //var = 20;
  //var = 10; //단 값은 한번만 넣어야 한다.

  System.out.println(var);
 }
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

다형성(polymorephism)  (0) 2012.07.28
의존관계(dependency)  (0) 2012.07.28
this, super키워드  (0) 2012.07.28
상속, 생성자  (0) 2012.07.28
싱글턴 패턴  (0) 2012.07.28
Posted by 조은성
,