* class
package : statictest
Name :  StaticTest

package : statictest
Name :  CustomerDTO


ex :

package statictest;

public class StaticTest {
 public static void main(String[] args) {
  //CustomerDTO 객체 3개 생성
  CustomerDTO c1 = new CustomerDTO("홍길동", 20);
  CustomerDTO c2 = new CustomerDTO("이순신", 28);
  CustomerDTO c3 = new CustomerDTO("길무스", 20);
  
  System.out.println(c1.getName());
  System.out.println(c2.getName());
  //어떤 객체한테 일을 시켰느냐에 따라 결과가 다르게 나온다. 그래서 getter/setter는 객체껄로 한다. 구현은 class에 했어도 객체꺼다. 객체를 생성해야지만 사용가능하다.
  
  System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 :  "+c1.getTotalInstanceCount());
  System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 :  "+c2.getTotalInstanceCount());
  System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 :  "+c3.getTotalInstanceCount());

  CustomerDTO c4 = new CustomerDTO();  

  System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 :  "+CustomerDTO.getTotalInstanceCount());//static변수를 사용해서 class의 메소드로 만들고 class명.메소드이름 으로 count에 접근하게 한다.
 }
}


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

package statictest;

public class CustomerDTO {
 private String name;
 private int age;
 private static int totalInstanceCount=0;   //클래스에서 생성된 객체의 개수를 저장.
 
 
 //생성자, setter,getter, toString()
 public CustomerDTO(){
  totalInstanceCount++;
 }

 public CustomerDTO(String name, int age) {
  this.name = name;
  this.age = age;
  totalInstanceCount++;
 }

 public static int getTotalInstanceCount(){
  return totalInstanceCount;
 }
 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 @Override
 public String toString() {
  return "CustomerDTO [name=" + name + ", age=" + age + "]";
 }


 
}
----------------------------

* 메소드 안에 선언되면 local변수로 스택에 저장된다. args,c1,c2,c3,c4
* class 변수 static붙은 변수 totalInstanceCount
* instance변수는 private로 class에 선언된 변수는 힙에 저장된다. name,age

* compile 시점
1. class Loading ->이 시점에 static변수나 static 메소드는 메모리에 올라온다.
2. 실행 -> main()

메소드 영역                           static영역                              Coastant Pool
->메소드 코드                         ->static 멤버 -변수                     ->final 변수
                                                    -메소드 
CustomerDTO(){}                       int totalInstanceCount;
CustomerDTO(String name,int age){}    getTotalInstanceCount(){}
getName(){}
setName(){}
getAge(){}
setAge(){}
gettotalInstanceCount(){}

class영역(Area)->class별로 구분

* static 변수는 메인 메소드 실행전에 class 로딩시에 하나만 만들어 지고(class에 만들어짐) Instance변수는 객체 생성시마다 여러개가 생성된다.

* static영역은 코드만 있고 직접 접근이 안되서 실행시 클래스로 접근해야 하고, Instance영역은 객체를 통해서 접근해야 한다.
 
* static변수의 묵시적인 초기화 예제

package statictest;

public class StaticTest {
 public static void main(String[] args) {
  
  System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 :  "+CustomerDTO.getTotalInstanceCount());
  //CustomerDTO 객체 3개 생성
  CustomerDTO c1 = new CustomerDTO("홍길동", 20);
  CustomerDTO c2 = new CustomerDTO("이순신", 28);
  CustomerDTO c3 = new CustomerDTO("길무스", 20);
  
  System.out.println(c1.getName());
  System.out.println(c2.getName());
  //어떤 객체한테 일을 시켰느냐에 따라 결과가 다르게 나온다. 그래서 getter/setter는 객체껄로 한다. 구현은 class에 했어도 객체꺼다. 객체를 생성해야지만 사용가능하다.
  
  System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 :  "+c1.getTotalInstanceCount());
  System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 :  "+c2.getTotalInstanceCount());
  System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 :  "+c3.getTotalInstanceCount());
  
  CustomerDTO c4 = new CustomerDTO();
  
  System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 :  "+CustomerDTO.getTotalInstanceCount());//static변수를 사용해서 class의 메소드로 만들고 class명.메소드이름 으로 count에 접근하게 한다.
  System.out.println("지금까지 CustomerDTO class에서 생성된 객체의 개수 :  "+CustomerDTO.getTotalInstanceCount());
 }
}

실행화면 :

지금까지 CustomerDTO class에서 생성된 객체의 개수 :  0
홍길동
이순신
지금까지 CustomerDTO class에서 생성된 객체의 개수 :  3
지금까지 CustomerDTO class에서 생성된 객체의 개수 :  3
지금까지 CustomerDTO class에서 생성된 객체의 개수 :  3
지금까지 CustomerDTO class에서 생성된 객체의 개수 :  4
지금까지 CustomerDTO class에서 생성된 객체의 개수 :  4

 

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

싱글턴 패턴  (0) 2012.07.28
static 예  (0) 2012.07.28
package, import  (0) 2012.07.28
productManagerArray만들기 [실습]  (0) 2012.07.28
배열  (0) 2012.07.28
Posted by 조은성
,

- package -  class파일을 모아 놓은 directory(folder).(class가 들어가 있는 패스주소.)->src 코드 작성시 class가 어느 package안에 들어갈 것인지 선언해야한다.

구문 :
package Root_package이름.sub_package명.;  <- sub경로가 없으면 .sub_package명.은 생략가능.(package는 같은 역할을 하는 여러개의 class가 모여진 folder이다.)
package 선언은 소스코드 file당 한번만 할 수 있다.

package 선언은 소스코드의 첫 실행(명령)문으로 와야만한다.
package 명은 식별자 규칙에 따라 준다.
-관례 :  소문자, domain명 꺼꾸로(ex : 도메인 주소가 kosta.or.kr이라면 kr.or.kosta

ex :
package value;

package ab.cd.ef; ->ab/cd/ef
- import = class에서 class를 부를때 파일이 어딨는지 알려준다.

*package, import 예제

//import kosta.dto.Human;
//import kosta.dto.CarDTO;

import kosta.dto.*;
public class TestImport
{
 public static void main(String[] args)
 {
  Human h = new Human("홍길동",23,170.4);
  h.printInfo();
  CarDTO c = new CarDTO();
  c.go();
  }
}

//package 디렉토리 아래 TestImport.java로 저장

//새이름으로 저장 : package 디렉토리 아래에 Human.java로 저장
package kosta.dto;
public class Human
{
 private String name ;
 public int age;
 public double tall;
 public Human(){}
 public Human(String name, int age, double tall){
  this.name=name;
  this.age=age;
  this.tall=tall;
 }

 public void setName(String name){
  this.name = name;
 }
 public String getName(){
  return name;
 }
 public void printInfo(){
  System.out.println(name);
  System.out.println(age);
  System.out.println(tall);
 }

}


//패키지 선언 :  이 클래스가 위치할 경로(디렉토리)를 선언하는 것
package kosta.dto; // /kosta/dto/CarDTO.class
public class CarDTO
{
 private String name;
 private String engine;
 
 public String toString(){
  return "이름 : " +name+",엔진 종류 : "+engine;
 }
 public void go(){
  System.out.println(name+"가 출발합니다.");
 }
}
// package/CarDTO.java

 


* java.lang 패키지의 class들은 import 없이 사용가능.

String,System, Math class등등..(사용을 하려면 API documentation을 확인하면됨. sun에서 제공해주는 설명서)

www.oracle.com(API 다큐멘테이션)

download-> java for develop -> Additional Resources-> Java SE6 Documentation 다운로드

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

static 예  (0) 2012.07.28
staticTest[실습]  (0) 2012.07.28
productManagerArray만들기 [실습]  (0) 2012.07.28
배열  (0) 2012.07.28
반복분(for, while)  (0) 2012.07.28
Posted by 조은성
,

*제품만들기 실습
*폴더 : /productManagerArray 만들기

1. ProductDTO클래스를 UML을 보고 작성하세요. 저장은 productManagerArray 폴더에 하세요.
   toString() - 객체의 모든 attribute의 값을 하나의 String으로 만들어 return 하도록 작성.


public class ProductManagerService 
{
 private ProductDTO[] productList;
 private int totalProductCount; //배열로 부터 현재 데이터가 몇개 들어가 있는지를 알게 해줄 변수

 public ProductManagerService(int length){
  productList = new ProductDTO[length];
 }
 public ProductManagerService(){
  productList = new ProductDTO[100];
 }
 //productList에 제품을 추가하는 메소드
 /*
  instance 변수 productList에 인수로 받은 제품 정보를 추가 하는 메소드
 */
 public void addProduct(ProductDTO productDTO){
  //1.배열(productList)에 제품을 넣을 index가 있는지 체크
  //1-1 없으면 (totalProductCount==배열의 length) 넣을수 없다는 메세지를 출력하고 종료
  //2.productId는 식별자
  //2. 배열(productList)애 같은 productId값을 가진 제품이 저장되 있는지 체크
  //2-1 저장되 있으면 같은 아이디의 제품이 있어 등록할 수 없다는 메세지 출력하고 종료
  //3. 배열에 제품정보 추가
  //4. totalProductCount의 값을 1 증가.
 
  /*
  //1.배열(productList)에 제품을 넣을 index가 있는지 체크
  //1-1 없으면 (totalProductCount==배열의 length) 넣을수 없다는 메세지를 출력하고 종료
  if(totalCount == productList.length){
   System.out.println("제품정보를 넣을 저장 장소가 없습니다.");
   return;
  }
  //2.productId는 식별자
  //2. 배열(productList)애 같은 productId값을 가진 제품이 저장되 있는지 체크
  //2-1 저장되 있으면 같은 아이디의 제품이 있어 등록할 수 없다는 메세지 출력하고 종료
  for(int i = 0;i<totalProductCount;i++){
   if(productList[i].getProductId().equals(productDTO.getProductId())){
   System.out.println("같은 제품이 있습니다.");
   return;
  }
  
  //3. 배열에 제품정보 추가
  this.productList[totalProductCount]=productDTO;
  //4. totalProductCount의 값을 1 증가.
  totalProductCount++;
   
  }
  }

  */

  System.out.println("함수를 썼을경수");
  if(totalProductCount==productList.length){
   System.out.println("넣을 공간이 없습니다.");
  }
  else if(searchProductById(productDTO.getProductId())!=null){
   System.out.println("같은 제품이 있습니다.");
  }
  else{
   this.productList[totalProductCount]=productDTO;
   totalProductCount++;
  }
 }
 /*
  instance 변수 productList에 저장된 모든 상품의 정보(id~info)를 출력해 주는 메소드
 */
 public void printProductList(){
  for(int i =0;i<totalProductCount;i++){
  System.out.println(productList[i].toString());
  }
 }
 public ProductDTO searchProductById(String productId){
  ProductDTO pDTO = null;
  for(int i =0;i<totalProductCount;i++){
  if(productId.equals(productList[i].getProductId())){
   pDTO=productList[i];
  
   }
  }
  return pDTO;
  
 }
 public void modifyProductInfo(ProductDTO productDTO){
  for(int i=0;i<totalProductCount;i++){
  if(productDTO.getProductId().equals(productList[i].getProductId())){
  productList[i]=productDTO;
  }
  }
  
 }
 public void removeProductById(String productId){
  for(int i=0;i<totalProductCount;i++){
  if(productList[i].getProductId().equals(productId)){
   productList[totalProductCount]=null;
  }
  }
 }
}

 

 

public class TestProductManager
{
 public static void main(String[] args)
 {
  ProductDTO pdto1 = new ProductDTO("p-111","이름",5000,"제조사","정보");
  ProductDTO pdto2 = new ProductDTO("p-222","마우스",12000,"삼성","휠");
  ProductDTO pdto3 = new ProductDTO("p-333","컴퓨터",43000,"LG","무선 마우스");
  ProductDTO pdto4 = new ProductDTO("3333333333","TV",43000,"LG","무선 마우스");
//  System.out.println(pdto1.getProductName());
//  System.out.println(pdto1.toString());

  ProductManagerService pms = new ProductManagerService(30);
  pms.addProduct(pdto1);
  pms.addProduct(pdto2);
  pms.addProduct(pdto3);

  pms.addProduct(null);

  //pms.addProduct(pdto3);

  pms.printProductList();

  System.out.println("-----------id로 제품정보 조회------------");
  ProductDTO p1 = pms.searchProductById("p-111");
  System.out.println("p-111 제품정보 : "+p1.toString());
  ProductDTO p2 = pms.searchProductById("p-222");
  System.out.println("p-222 제품정보 : "+p1.toString());
  ProductDTO p3 = pms.searchProductById("p-333");
  System.out.println("p-333 제품정보 : "+p1.toString());

  //없는 Id로 조회
  ProductDTO p4 = pms.searchProductById("p-555");
  System.out.println("p-111 제품 정보 : "+p4);


  System.out.println("--------------정보수정--------------");
  pdto1 = new ProductDTO("p-111","노트북",15000000,"제조사","정보");
  pdto2 = new ProductDTO("p-222","마우스",1200000000,"삼성","휠");
  pms.modifyProductInfo(pdto1);
  pms.modifyProductInfo(pdto2);
  pms.printProductList();
 

  System.out.println("--------------정보삭제--------------");
  pms.removeProductById("p-222");
  pms.printProductList();
 // System.out.println("-------------------------------");
 // pms.printProductList();
 }
}


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

public class ProductManagerService 
{
 private ProductDTO[] productList;
 private int totalProductCount; //배열로 부터 현재 데이터가 몇개 들어가 있는지를 알게 해줄 변수

 public ProductManagerService(int length){
  productList = new ProductDTO[length];
 }
 public ProductManagerService(){
  productList = new ProductDTO[100];
 }
 //productList에 제품을 추가하는 메소드
 /*
  instance 변수 productList에 인수로 받은 제품 정보를 추가 하는 메소드
 */
 public void addProduct(ProductDTO productDTO){

  if(isNull(productDTO)){
   System.out.println("인자로 null값이 들어 왔습니다.");
   return ;
  }
  //1.배열(productList)에 제품을 넣을 index가 있는지 체크
  //1-1 없으면 (totalProductCount==배열의 length) 넣을수 없다는 메세지를 출력하고 종료
  //2.productId는 식별자
  //2. 배열(productList)애 같은 productId값을 가진 제품이 저장되 있는지 체크
  //2-1 저장되 있으면 같은 아이디의 제품이 있어 등록할 수 없다는 메세지 출력하고 종료
  //3. 배열에 제품정보 추가
  //4. totalProductCount의 값을 1 증가.
 
  
  //1.배열(productList)에 제품을 넣을 index가 있는지 체크
  //1-1 없으면 (totalProductCount==배열의 length) 넣을수 없다는 메세지를 출력하고 종료
  if(totalProductCount == productList.length){
   System.out.println("제품정보를 넣을 저장 장소가 없습니다.");
   return;
  }
  //2.productId는 식별자
  //2. 배열(productList)애 같은 productId값을 가진 제품이 저장되 있는지 체크
  //2-1 저장되 있으면 같은 아이디의 제품이 있어 등록할 수 없다는 메세지 출력하고 종료
  /* for(int i = 0;i<totalProductCount;i++){
   if(productList[i].getProductId().equals(productDTO.getProductId())){
   System.out.println("같은 제품이 있습니다. 아이디를 바꾸세요.");
   return;
   }
  }
  */
  ProductDTO p = searchProductById(productDTO.getProductId());
  if(p!=null){
   System.out.println("같은 제품이 있습니다. 아이디를 바꾸세요.");
   return;
  }
  //3. 배열에 제품정보 추가
  this.productList[totalProductCount]=productDTO;
  //4. totalProductCount의 값을 1 증가.
  totalProductCount++;
   
  
  

  
  /*
  //System.out.println("함수를 썼을경우");
  if(totalProductCount==productList.length){
   System.out.println("넣을 공간이 없습니다.");
  }
  else if(searchProductById(productDTO.getProductId())!=null){
   System.out.println("같은 제품이 있습니다.");
  }
  else{
   this.productList[totalProductCount]=productDTO;
   totalProductCount++;
  }
  */
 }
 /*
  instance 변수 productList에 저장된 모든 상품의 정보(id~info)를 출력해 주는 메소드
 */
 public void printProductList(){
  for(int i =0;i<totalProductCount;i++){
  System.out.println(productList[i].toString());
  }
 }
 /*
  productId를 인수로 받아 productList에서 찾아 그 제품의 정보를 return하는 메소드
  없을 경우 -null을 return
 */
 public ProductDTO searchProductById(String productId){

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

  for(int i =0;i<totalProductCount;i++){
   if(productId.equals(productList[i].getProductId())){ //조회대상
   pDTO=productList[i];
   break;
   }

  }
//  if(pDTO==null){
//   System.out.println("동일한 ID가 없습니다.");
//  }
  return pDTO;
  /*
   for(int i =0;i<totalProductCount;i++){
   if(productId.equals(productList[i].getProductId())){ //조회대상
   return productList[i];
  
   }

  }
  if(pDTO==null){
   System.out.println("동일한 ID가 없습니다.");
  }
  return null;
  */
 }
 /*
  정보를 수정하는 메소드
  id,이름,가격, 제조사,정보
  수정할 내용을 ProductDTO 객체로 받아서 productList에서 id를 가지고 찾아
  id가 같은 제품의 정보를 인수로 받은 정보로 변경한다.

 */


 public void modifyProductInfo(ProductDTO productDTO){
 

  if(isNull(productDTO)){
   System.out.println("인자로 null값이 들어 왔습니다.");
   return ;
  }
  for(int i=0;i<totalProductCount;i++){
  if(productDTO.getProductId().equals(productList[i].getProductId())){
   productList[i]=productDTO;
   break;
   }
  }

  
 }
 /*
 인수로 받은 productId를 가지고 productList에서 제품을 찾아 삭제(제거)
 */

 public void removeProductById(String productId){
  
  if(isNull(productId)){
   System.out.println("인자로 null값이 들어 왔습니다.");
   return ;
  }
  for(int i=0;i<totalProductCount;i++){
  if(productList[i].getProductId().equals(productId)){
  
   for(int j=i;j<totalProductCount-1;j++){
   productList[j]=productList[j+1];
   
   }
//   for(int j=i+1;j<totalProductCount-1;j++){
//   productList[j-1]=productList[j];
//   }

   totalProductCount--;
   productList[totalProductCount]=null;
  
   break;
  }

  }
 }

 private boolean isNull(ProductDTO pdto){
  boolean flag = false;
  if(pdto == null){
   flag = true;
  }
  return flag;
 }
 private boolean isNull(String str){
  boolean flag = false;
  if(str == null){
   flag = true;
  }
  return flag;
 }
}

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

public class  ProductDTO
{
 private String productId;
 private String productName;
 private int productPrice;
 private String productMaker;
 private String productInfo;

 public ProductDTO(){}
 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 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 setProductName(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;
 }
 public String toString(){
  return productId+" "+productName+" "+productPrice+" "+productMaker+" "+productInfo;
 }

}

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

ex :

public class CommandLineArgs 
{
 //JVM은 실행 시 (java class명) 입력한 값을 main()의 인자로 넘겨준다.
 //예 : java CommandLineArgs A ABC 안녕 -> length 가 3인 배열을 만들어 A, ABC, 안녕
 //값을 넣어 main메소드의 인자로 넘긴다.
 public static void main(String[] args)
 {
  System.out.println("args.length : "+ args.length);
  System.out.println("------command line argument로 넘어온 값들-------------");
  for(int i = 0;i<args.length;i++){
   System.out.println(args[i]);
  }

 }
}

//CommandLineArgs.java
//java CommandLineArgs 안녕 반갑습니다 abc
//java CommandLineArgs "안녕 반갑습니다 abc"

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

staticTest[실습]  (0) 2012.07.28
package, import  (0) 2012.07.28
배열  (0) 2012.07.28
반복분(for, while)  (0) 2012.07.28
switch문  (0) 2012.07.28
Posted by 조은성
,