---------------------------------------------------문제
 String word="write.do=my.board.WriteForm";
  int ch=word.indexOf("=");  
  String command=word.substring(0,ch);//write.do
  String classnm=word.substring(ch+1);//my.board.WriteForm  
  System.out.println(command);
  System.out.println(classnm);

 

  //command가 key, classnm이 value로
  //해시맵 hm객체에 추가

  HashMap hm=new HashMap();

  hm.put(command, classnm);

 

----------------------------------------------------문제

  HashSet list=new HashSet();
  list.add("list.do=my.board.ListAction");
  list.add("update.do=my.board.UpdateAction");
  list.add("delete.do=my.board.DeleteAction");
  
  HashMap map=new HashMap();
  // =앞의 문자열은 key값
  // =뒤의 문자열은 value값으로 map에 추가
  
  Iterator iter=list.iterator();
  while(iter.hasNext()){
   String word=(String)iter.next();
   int ch=word.indexOf("=");   
   String command=word.substring(0,ch);
   String classnm=word.substring(ch+1);
   map.put(command, classnm);
   System.out.println(map.get(command));
  }

 

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[Vector 예제] Buyer - 반품 refund() 메소드  (0) 2012.06.26
[35] JDBC  (0) 2012.05.15
[34] 제네릭 Generics  (0) 2012.05.08
[33] Java Collections Framework  (0) 2012.05.08
[32] Object 클래스  (0) 2012.05.04

 

package oop09;

import java.util.Vector;

class Product{
    int price;      //상품가격
    int bonusPoint; //보너스점수
    Product(){}  
    Product(int price){
        this.price=price;
        bonusPoint=(int)(price/10.0);
    }
}
//=====================
class SmartTV extends Product{
    SmartTV()
    {
        super(200); //price=200 bonusPoint=20
    }

    public String toString() {
        return "SmartTV";
    }   
}

//=====================
class Computer extends Product{
  Computer(){
      super(150); //price=150 bonusPoint=15
  }
  public String toString(){
      return "Computer";
  }  
}
//=====================
class Audio extends Product{
  Audio(){
      super(100); //price=100 bonusPoint=10
  }
  public String toString(){
      //객체를 호출했을때 toString()메소드 호출
      return "Audio";
  }
}
//====================
class Buyer{
    int money=1000;//사용가능한 총금액.
    int mileage=0;//누적된 마일리지점수 합계 
    //static Product[] item=new Product[10];//객체배열
    Vector item=new Vector();
 int idx=0;
 
 void buy(Product p){

  if(this.money<p.price){
            System.out.println("잔액이 부족하여 물건을 구입할수 없음!!");
            return;
  }
  this.money=this.money-p.price;
  this.mileage=this.mileage+p.bonusPoint;
  //item[this.idx++]=p;
  item.add(p);
  
  //System.out.print(p+" "+p.price);
  //System.out.println();
 }
 
 void refund(Product p){
  if(item.remove(p)){
   money+=p.price;//나의 총재산
   mileage-=p.bonusPoint;//마일리지 점수
   System.out.println(p+"반품!!");
  }
  else{
   System.out.println("반품할 품목 없음!!");
  }
 }
 
    void summary()
    {
        int n;
        int hap=0;
        int bonushap=0;
        String str="";
        //2)벡터를 이용했을경우
        if(item.isEmpty()){
         System.out.println("구입한 물건 없음");
         return;
        }
       
        for(n=0;n<item.size();n++){
   Product p=(Product)item.get(n);
   hap+=p.price;
   bonushap+=p.bonusPoint;
   str+=(n==0)?""+p:","+p;
  }
  System.out.println("구매하신 물품의 총금액은 "+hap+"만원");
  System.out.println("보너스점수 "+bonushap+"만원");
  System.out.println("구입하신제품은"+str+"입니다.");

        /*1)객체배열을 이용했을경우
        for(n=0; n<item.length; n++)
        {
            if(item[n]==null) break;
            hap=hap+item[n].price;
            bonushap=bonushap+item[n].bonusPoint;
            str=str+item[n]+" ";
        }
       
        System.out.println("구입하신 물품의 총 금액 :"+hap);
        System.out.println("구입하신 물품의 보너스 금액 :"+bonushap);
        System.out.println("구입하신 물품명 :"+str);
        */
    }

}
public class BuyEx {
 public static void main(String[] args) {
  SmartTV smarttv=new SmartTV();
  //Product()->SmartTV()->Product(200)
  //price=200 bonuspoint=20
  
  //System.out.println(smarttv);
  //System.out.println(smarttv.price);
  //System.out.println(smarttv.bonusPoint);
  
  Computer comp=new Computer();
  //Product()->Computer()->Product(150)
  //price=150 bonuspoint=15
  //System.out.println(comp);
  
  Audio audio=new Audio();
  //Product()->Audio()->Product(100)
  //price=100 bonuspoint=10
  //System.out.println(audio);
  
  //Product fa=new SmartTV();
  //System.out.println(fa.price);//200
  
  //SmartTV sm=new Product();오류
  
  
  //물건 구매
  Buyer kim=new Buyer();
  kim.buy(smarttv);
  kim.buy(comp);
  kim.buy(comp);
  kim.buy(audio);
  kim.summary();
  
  //물건 반품(나의 총액+, 보너스점수-
  kim.refund(audio);
  kim.summary();//총금액500 보너스점수 50
  
 }

}

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[예제] set, map 예제  (0) 2012.06.26
[35] JDBC  (0) 2012.05.15
[34] 제네릭 Generics  (0) 2012.05.08
[33] Java Collections Framework  (0) 2012.05.08
[32] Object 클래스  (0) 2012.05.04

 

* JDBC
- 자바에서 DB연동하는 것
- 데이터베이스를 설치하고 (오라클, My-SQL)
- 자바와 DB를 연결시켜야 한다->드라이버 필요

 

[MySQL 드라이버 다운]

- http://www.mysql.com -> Downloads
   -> Mysql Connectors -> Connector/J
   -> mysql-connector-java-5.1.18.zip 다운받은 후 압축풀기


- My-SQL서버 시작
   D:\ERPJava_04\mysql\bin\mysqld.exe 실행
   My-Sql 서버가 시작된는지 확인하려면
   작업관리자->프로세스 에서 확인 가능

 

- My-SQL서버 종료
   작업관리자->프로세스 에서 종료


- D:\ERPJava_04\mysql\bin>mysql -u root -p 1234
- mysql>show databases; --데이터베이스 보기
- mysql>use erpjavadb;    --사용DB 변경하기
- mysql>exit;                  --mysql 빠져 나오기

 

 

* 이클립스에서 My-SQL 드라이버 지정--------------------

- 이클립스 -> Project -> Properties -> Java Build Path
   -> Libraries -> Add External Jars...
   -> 'mysql-connector-java-5.1.18-bin.jar' 지정

 

* 성적테이블 작성------------------------------------------

create table tb_sungjuk(
  sno  int  NOT NULL AUTO_INCREMENT PRIMARY KEY
  ,uname varchar(20) not null
  ,kor tinyint default 0
  ,eng tinyint default 0
  ,mat tinyint default 0
  ,aver tinyint null
  ,address varchar(10) null
  ,regdt     DATETIME       NOT NULL

);


int  정수형
tinyint 작은 정수형
DATETIME 날짜형
AUTO_INCREMENT 자동으로 일련번호 부여
PRIMARY KEY 기본키, 중복되는 값이 절대로 올수 없다
now() 현재 시스템의 날짜값

 

insert into tb_sungjuk(uname,kor,eng,mat,address,regdt)
values ('홍길동',70,80,90,'안양',now());

 

-------------------------------------------------------INSERT

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class InsertTable {
    public static void main(String[] args) {
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String jdbc = "org.gjt.mm.mysql.Driver";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
       
        try{
            Class.forName(jdbc);
            con=DriverManager.getConnection(url, user, password);
            stmt=con.createStatement();
           
            String sql="INSERT INTO tb_sungjuk";
            sql+=" (uname,kor,eng,mat,address,regdt)";
            sql+=" VALUES('홍길동',90,90,80,'안양',now())";
           
            int rec=stmt.executeUpdate(sql);//쿼리문이 실행
            System.out.println("레코드 "+rec+"개 추가!!");         
           
           
        }catch(Exception e){
            System.out.println("SQLException: " + e.getMessage());
        }finally{
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try
    }

}

-------------------------------------------------------UPDATE

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class UpdateTable {
    public static void main(String[] args) {
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String driver = "org.gjt.mm.mysql.Driver";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
       
        try{
            Class.forName(driver);
            con=DriverManager.getConnection(url,user,password);
           
            String sql="UPDATE tb_sungjuk";
            sql=sql+" SET aver=(kor+eng+mat)/3 ";      
                    
            System.out.print(sql);
           
            //DB에 가서 새롭게 명령어(쿼리문)을 인식함
            stmt=con.createStatement();
            stmt.executeUpdate(sql);
            //select -> executeQuery()
            //나머지(create,insert,update,delete)->executeUpdate();      
                       
        }catch(Exception e){
            System.out.println("SQLException: " + e.getMessage());
        }finally{
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try


    }

}

-------------------------------------------------------DELETE

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class DeleteTable {
    public static void main(String[] args) {
        String driver="org.gjt.mm.mysql.Driver";
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
       
        try{
            Class.forName(driver);
            con=DriverManager.getConnection(url,user,password);
           
            String sql="DELETE FROM tb_sungjuk WHERE sno=1";
            stmt=con.createStatement();
            stmt.executeUpdate(sql);//쿼리문 실행
           
        }catch(Exception e){
            System.out.println("SQLException: " + e.getMessage());
        }finally{
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try
       
    }
}

-------------------------------------------------------CREATE

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class CreateTable {

    public static void main(String[] args) {
        String driver="org.gjt.mm.mysql.Driver";
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
       
        try{
            Class.forName(driver);//mysql 연결통로 지정. 드라이버로딩
            con=DriverManager.getConnection(url,user,password);
           
            String sql="CREATE TABLE tb_sungjuk(";
            sql=sql+" sno   int  NOT NULL AUTO_INCREMENT PRIMARY KEY";
            sql=sql+",uname VARCHAR(20) not null";
            sql=sql+",kor   tinyint default 0";
            sql=sql+",eng   tinyint default 0";
            sql=sql+",mat   tinyint default 0";
            sql=sql+",aver  tinyint null";
            sql=sql+",address varchar(10) null";
            sql=sql+",regdt DATETIME NOT NULL";
            sql=sql+")";
            //sql+="~~~"
            //System.out.print(sql);
            stmt=con.createStatement();//새로운명령어라고 인식
            stmt.executeUpdate(sql);//쿼리문 실행
            //실행 executeUpdate->create,insert,delete,update,drop
            //실행 executeQuery->select
           
        }catch(Exception e){
            System.out.print(e.getMessage());
        }finally{
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try

    }

}
-------------------------------------------------------SELECT

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectRecOne {
    public static void main(String[] args) {
        String driver="org.gjt.mm.mysql.Driver";
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
       
        try{
            Class.forName(driver);
            con=DriverManager.getConnection(url,user,password);
           
            String sql="SELECT * FROM tb_sungjuk order by sno";
           
            stmt=con.createStatement();
            rs=stmt.executeQuery(sql);//select결과값 저장
           
            //rs.next() 첫번째 레코드를 가르킴
            //만일 가르키는 레코드가 있으면 true반환
            //없으면 false반환
            if(rs.next())
            {
                System.out.print(rs.getInt(1)+" ");//1번째 칼럼 sno
                System.out.print(rs.getString(2)+" ");//uname
                System.out.print(rs.getInt(3)+" ");//kor
                System.out.print(rs.getInt(4)+" ");//eng
                System.out.print(rs.getInt(5)+" ");//mat
                System.out.print(rs.getInt(6)+" ");//aver
                System.out.print(rs.getString(7)+" ");//address
                System.out.print(rs.getString(8)+" ");//regdt
               
                System.out.println();
                System.out.print(rs.getInt("sno")+" ");
                System.out.print(rs.getString("uname")+" ");//uname
                System.out.print(rs.getInt("kor")+" ");//kor
                System.out.print(rs.getInt("eng")+" ");//eng
                System.out.print(rs.getInt("mat")+" ");//mat
                System.out.print(rs.getInt("aver")+" ");//aver
                System.out.print(rs.getString("address")+" ");//address
                System.out.print(rs.getString("regdt")+" ");//regdt
            }
            else
            {
                System.out.print("조회 행 없음!!");
            }
           
        }catch(Exception e){
            System.out.print(e.getMessage());
        }finally{
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try

    }

}
-------------------------------------------------------SELECT

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectRec {
    public static void main(String[] args) {
        String driver="org.gjt.mm.mysql.Driver";
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
       
        try{
            Class.forName(driver);
            con=DriverManager.getConnection(url,user,password);
           
            String sql="SELECT * FROM tb_sungjuk order by sno";
           
            stmt=con.createStatement();
            rs=stmt.executeQuery(sql);//select결과값 저장
                       
            while(rs.next())
            {
                System.out.print(rs.getInt("sno")+" ");
                System.out.print(rs.getString("uname")+" ");//uname
                System.out.print(rs.getInt("kor")+" ");//kor
                System.out.print(rs.getInt("eng")+" ");//eng
                System.out.print(rs.getInt("mat")+" ");//mat
                System.out.print(rs.getInt("aver")+" ");//aver
                System.out.print(rs.getString("address")+" ");//address
                System.out.print(rs.getString("regdt")+" ");//regdt
                System.out.println();
            }          
        }catch(Exception e){
            System.out.print(e.getMessage());
        }finally{
            try{
                if ( rs != null){ rs.close(); }
            }catch(Exception e){}           
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try
       

    }

}

-----------------------------------------------------[문제]

문)aver들의 평균보다 잘한 레코드 출력

 

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectEx1 {
    public static void main(String[] args) {
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
        try{
            Class.forName("org.gjt.mm.mysql.Driver");
            String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=euckr";
            String user="root";
            String password="1234";
            con=DriverManager.getConnection(url,user,password);
            stmt=con.createStatement();

            //문)aver들의 평균보다 잘한 레코드 출력
            String sql="";
            sql=sql+" SELECT * FROM tb_sungjuk ";
            sql=sql+" WHERE aver>= ";
            sql=sql+"             (SELECT AVG(aver) FROM tb_sungjuk) ";

            rs=stmt.executeQuery(sql);

            while(rs.next()){
                System.out.print(rs.getInt("sno")+" ");
                System.out.print(rs.getString("uname")+" ");
                System.out.print(rs.getInt("kor")+" ");
                System.out.print(rs.getInt("eng")+" ");
                System.out.print(rs.getInt("mat")+" ");
                System.out.print(rs.getInt("aver")+" ");
                System.out.print(rs.getString("address")+" ");             
                System.out.print(rs.getString("regdt").substring(0,10)+" ");
                System.out.println();
            }
        }
        catch(Exception e){
            System.out.println(e);
        }
        finally{
            try{
                if (rs != null){ rs.close(); }
            }catch(Exception e){}           
            try{
                if (stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if (con != null){ con.close(); }
            }catch(Exception e){}  
        }

    }

}

-----------------------------------------------------[문제]

문)각 주소별 학생의 인원수 내림차순으로 출력

 

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectEx2 {
    public static void main(String[] args) {
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
        try{
            Class.forName("org.gjt.mm.mysql.Driver");
            String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=euckr";
            String user="root";
            String password="1234";
            con=DriverManager.getConnection(url,user,password);
            stmt=con.createStatement();

            //문)aver들의 평균보다 잘한 레코드 출력
            String sql="";    
            sql=sql+" SELECT address,count(*) as cnt ";
            sql=sql+" FROM tb_sungjuk ";
            sql=sql+" GROUP BY address ";
            sql=sql+" ORDER BY count(*) DESC ";

            rs=stmt.executeQuery(sql);

            while(rs.next()){
                System.out.print(rs.getString("address")+" ");
                System.out.print(rs.getInt("cnt")+" ");
                System.out.println();
            }
        }
        catch(Exception e){
            System.out.println(e);
        }
        finally{
            try{
                if (rs != null){ rs.close(); }
            }catch(Exception e){}           
            try{
                if (stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if (con != null){ con.close(); }
            }catch(Exception e){}  
        }


    }

}

-----------------------------------------------------[문제]

문)sno 역순으로 정렬한뒤 위에서부터 5개 레코드만 출력

 

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectEx3 {

    public static void main(String[] args) {
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
        try{
            Class.forName("org.gjt.mm.mysql.Driver");
            String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=euckr";
            String user="root";
            String password="1234";
            con=DriverManager.getConnection(url,user,password);
            stmt=con.createStatement();

            //문)
            String sql="";    
            sql=sql+" SELECT * ";
            sql=sql+" FROM tb_sungjuk ";
            sql=sql+" ORDER BY sno DESC limit 0,5 ";
           
            rs=stmt.executeQuery(sql);

            while(rs.next()){
                System.out.print(rs.getInt("sno")+" ");
                System.out.print(rs.getString("uname")+" ");
                System.out.print(rs.getInt("kor")+" ");
                System.out.print(rs.getInt("eng")+" ");
                System.out.print(rs.getInt("mat")+" ");
                System.out.print(rs.getInt("aver")+" ");
                System.out.print(rs.getString("address")+" ");             
                System.out.print(rs.getString("regdt").substring(0,10)+" ");
                System.out.println();
            }
        }
        catch(Exception e){
            System.out.println(e);
        }
        finally{
            try{
                if (rs != null){ rs.close(); }
            }catch(Exception e){}           
            try{
                if (stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if (con != null){ con.close(); }
            }catch(Exception e){}  
        }


    }

}

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[예제] set, map 예제  (0) 2012.06.26
[Vector 예제] Buyer - 반품 refund() 메소드  (0) 2012.06.26
[34] 제네릭 Generics  (0) 2012.05.08
[33] Java Collections Framework  (0) 2012.05.08
[32] Object 클래스  (0) 2012.05.04

 

* Generics

 - 객체를 저장하는 기술인 Collection Framework의 단점을 개선한 기능.

 - 데이터 자료형인 String, Integer같은 형태를 처음에 정해 놓지 않고

    임의의 타입으로 명시해 준 후에 나중에 직접적으로 해당구문을 사용할때 지정하는 형태

 - Class ArrayList<E>에서 'E'가 있는 곳에는 ArrayList를 선언하고
   생성할 때 사용할 실제타입이 들어간다.

 - E는 Element(원소)를 말하며,
    new ArrayList<String>() 이면 'E'는 'String' 클래스를 가르키며,
    < > 안의 String은 유형 매개 변수(type parameter)이다.
   따라서 boolean add(Object o) 메소드는 boolean add(String o) 가 된다.

 - 'E'는 ArrayList의 인스턴스를 만들때 < > 안에 넣는 타입을 말함.

 - 'E'는 컬렉션에 저장하고 컬렉션에서 리턴할 원소의 타입을 가르킴.

 

   형식)

           class 클래스명 <제네릭타입>

           {

                   ~~~

            }

 

----------------------------------------------------GenericsEx1.java

class Test <T>{
     private T a;
     public Test(T a){
           this.a=a;
     }
     public T get(){
           return a;
     }
}

 

public class GenericsEx {
   public static void main(String[] args) {
         //제네릭클래스를 사용할때 객체생성시 <String>처럼
         //파라미터를 반드시 써야 함
         Test<String> ts=new Test<String>("제네릭 타입으로 String 선택");
         System.out.println(ts.get());

         Test<Integer> ti=new Test<Integer>(100);
         System.out.println(ti.get());

         Test<Double> td=new Test<Double>(3.14);
         System.out.println(td.get());
  
         //와일드카드 <?>는 모든 타입의 파라미터를 받아들일수 있다
         Test<?> tq1=ts; //<?>이 <String>타입 파라미터를 받아들임
         System.out.println(tq1.get());
  
         Test<?> tq2=ti;
         System.out.println(tq2.get());

         Test<?> tq3=td;
         System.out.println(tq3.get());
  
         //?는 Number의 하위 타입이므로 Integer타입 ti를 받아들일수 있다
         Test<? extends Number> ten=ti;
         System.out.println(ten.get());

         //?는 Number보다 상위타입이므로 Integer타입 ti를 받아들일수 없다
         //Test<? super Number> tsn=ti; 에
         //System.out.println(tsn.get());
     }

}

----------------------------------------------------GenericsEx2.java

class Test2{
    public <T> void get(T a){
        System.out.println(a);
    }
}
public class GeneEx {
     public static void main(String[] args) {

          Test2 t=new Test2();
           //제네릭 메소드는 타입 파라미터를 지정할 필요가 없다
           t.get("dd");
           t.get(100);
           t.get(3.14);
     }

}

----------------------------------------------------GenericsEx3.java

package oop9jcf;

import java.util.ArrayList;
import java.util.Iterator;

public class GenericsEx3 {
   
    //list인수는 Integer객체만 저장된 List 객체를 받을 수 있다.
    public void prn(ArrayList<Integer> list){
        Iterator i = list.iterator();
       
        for (int k=0; k < list.size(); k++){
            Integer su = (Integer)i.next();
            System.out.println("su=" + su);           
        }//exception 발생
    }
   
   
    public static void main(String[] args) {
      //1)Generics사용하지 않은 경우. exception발생
     /*
        ArrayList list = new ArrayList(10);    
        list.add(new Integer(10));  //Integer 추가
        list.add(new Integer(50));  //Integer 추가
        list.add("List Test");      //String 추가
        list.add(new Float(100.0)); //Long 추가
       
        for(int i=0; i<list.size(); i++){         
            Integer iobj = (Integer)list.get(i);
            int tot = iobj.intValue() + 1000;
            System.out.println("tot= " + tot);
        }
     */
       
        //2)generics가 적용된 코드 (compile 시점에 에러가 체크됨 )
        ArrayList<Integer> list = new ArrayList<Integer>(10);
        list.add(new Integer(10));
        list.add(new Integer(20));
       
        // ERROR 강제 발생 부분, Integer 타입만 가능,코딩할때 발견.
        // Generics는 ArrayList에 지정된 타입만 저장되게 하는 기능을 제공       
        //list.add("HAPPY");
        //list.add(new Long(10));
       
        //3)메소드에서 Generics 사용
        ArrayList al=new ArrayList();
        al.add(new Integer(123));
        al.add("HAPPY");
       
        GenericsEx3 gg=new GenericsEx3();
        gg.prn(al);
    }
}

----------------------------------------------------GenericsEx4.java

package oop9jcf;

import java.util.ArrayList;
import java.util.Iterator;

class Mountain
{
    public String name; //산이름
    public int height;  //산높이
    public Mountain() {}
    public Mountain(String name, int height) {
        this.name = name;
        this.height = height;
    }   
}
//===================
public class GenericsEx4 {
    public static void main(String[] args) {
        Mountain mt1=new Mountain("관악산", 1000);
        Mountain mt2=new Mountain("수리산", 2000);
        Mountain mt3=new Mountain("금강산", 3000);
       
        ArrayList<Mountain> list=new ArrayList<Mountain>();
        list.add(mt1);
        list.add(mt2);
        list.add(mt3);
       
        for(int idx=0; idx<list.size(); idx++){
            //Grnerics 사용시 형변환 불필요
            Mountain m=list.get(idx);
            System.out.println(m.name+" "+m.height);
        }
       
        Iterator<Mountain> iter=list.iterator();
        while(iter.hasNext()){
           Mountain m=(Mountain)iter.next(); // 형변환 필요         
           System.out.println(m.name+" "+m.height);
        }
    }
}

 

 



 

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[Vector 예제] Buyer - 반품 refund() 메소드  (0) 2012.06.26
[35] JDBC  (0) 2012.05.15
[33] Java Collections Framework  (0) 2012.05.08
[32] Object 클래스  (0) 2012.05.04
[31] Exception 예외처리  (0) 2012.05.04

 

* 자바 컬렉션 프레임워크

 

  - java.util.ArrayList

  - 객체를 수집하여 저장하여 두었다가 요청이 있을시 저장소에서
    추출하여 제공하는것을 목적으로 함.

  - 배열의 단점을 개선한 클래스로 객체만 저장할 수 있다.

  - int등 각종 기본 데이터 타입을 저장하려면 Integer Wrapper Class 등으로  변환해서 사용해야 한다.

  - 배열의 크기는 변경이 불가능하나 ArrayList, Vector는 동적인 크기 변경이 가능하다.

 

 

* Collection Framework의 핵심 인터페이스

- List : 순서가 있는 데이터의 집합. 데이터의 중복을 허용
           배열기반. 순서를 유지. 중복허용
           매개변수가 중요.
           ArrayList Iterator Vector Collectors

 

- Set : 순서를 유지하지 않는 데이터의 집합
          중복허용안함.

 

- Map : key, value쌍으로 이뤄져 있음. 순서유지하지 않음.
            key 중복불가능
            value 중복가능
            우편번호,지역번호


* 다형성
- 상속을 해야지만 다형성을 이룰수 있음.
- 생성된 객체가 자식일때 성립.
- 자식타입이 부모로 갈 때는 형변환 생략 가능
- 부모타입이 자식으로 갈 때는 형변환 반드시 지정.

 

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

package oop9jcf;

class Data {
    String title="롯데시네마";
    String date="2012-05-07";
    String content="어벤저스";
}
//=======================
class Container {
    Data data = null;
   
    public void save(Data data){
        this.data = data;
    }
   
    public Data load(){
        return data;
    }
}
//======================

public class JcfEx1 {
    public static void main(String[] args) {
        Container cont=new Container();
        Data data=new Data();//롯데시네마 2012-05-07 어벤저스
        cont.save(data);
        Data dt=cont.load();//롯데시네마 2012-05-07 어벤저스
        System.out.println(dt.title);
        System.out.println(dt.date);
        System.out.println(dt.content);   
       
        //Data 객체가 10000 생성해야 한다면?
        Data dt2=new Data();//롯데시네마 2012-05-07 어벤저스

    }
}

 

 

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

package oop9jcf;

class ContainerObj{
    Object data = null;
  
    public void save(Object data){
        this.data = data;
    }
   
    public Object load(){
        return data;
    }
}
//=================
public class JcfEx2 {
    public static void main(String[] args) {
        Data data=new Data();
        ContainerObj cont=new ContainerObj();
       
      //첫번째 경우
        cont.save(data);
      //Object타입 사용시 원래의 타입으로 형변환 필요.
        Data dt=(Data)cont.load();
        System.out.println(dt.title);
        System.out.println(dt.date);
        System.out.println(dt.content);
       
      //두번째 경우 String객체       
        cont.save("오필승코리아");
        String str=(String)cont.load();//오필승코리아
        System.out.println(str);
       
      //세번째 경우 Integer객체
        cont.save(new Integer("123"));
        Integer ii=(Integer)cont.load();
        System.out.println(ii.intValue());
       
      //123.45 jdk 1.4권장사항 아님
        cont.save(new Double("123.45"));
        Double dd=(Double)cont.load();
        System.out.println(dd.doubleValue());
       
    }

}

 

 

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

package oop9jcf;

import java.util.ArrayList;

class Jumsu{
    String name="";
    int kor = 0;
    int eng = 0;
    int mat = 0;
    int aver= 0;
    public Jumsu() {}
    public Jumsu(String name, int kor, int eng, int mat) {
        this.name = name;
        this.kor = kor;
        this.eng = eng;
        this.mat = mat;
        this.aver=(kor+eng+mat)/3;
    }
   
}

//======================
public class JcfEx3 {
    public static void main(String[] args) {
        Jumsu one  =new Jumsu("무궁화",70,80,40);
        Jumsu two  =new Jumsu("진달래",40,50,30);
        Jumsu three=new Jumsu("봉선화",50,80,90);
       
        // 저장공간 선언, 메모리 자동 할당 및 증가
        ArrayList list=new ArrayList();//ctrl+shift+o
        list.add(one);
        list.add(two);
        list.add(three);
        System.out.println("list객체 요소 갯수 "+list.size());
       
        Jumsu jj=(Jumsu)list.get(2);//2번째 요소 가져옴
        System.out.println(jj.name);
        System.out.println(jj.kor);
        System.out.println(jj.eng);
        System.out.println(jj.mat);
        System.out.println(jj.aver);
       
        //반복문을 활용해서 전체 요소 출력
        int size=list.size(); //3
        int idx;
        for(idx=0; idx<size; idx++)
        {
            jj=(Jumsu)list.get(idx);
            System.out.print(jj.name+" ");
            System.out.print(jj.kor+" ");
            System.out.print(jj.eng+" ");
            System.out.print(jj.mat+" ");
            System.out.print(jj.aver+" ");
            System.out.println();
        }
    }
}

 

 

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

 

package oop9jcf;
import java.util.ArrayList;
import java.util.Iterator;
//import java.util.*;

public class IterEx4 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();       
        list.add(new Integer(10));
        list.add(new Integer(20));
        list.add(new Integer(30));
        list.add(new Integer(40));
        list.add(new Integer(50));
        int idx;
        for(idx=0; idx<list.size(); idx++)
        {
            Integer ii=(Integer)list.get(idx);
            System.out.println(ii);
        }

/*       
        //Iterator형으로 변환된 형태로 반환
        Iterator iter=list.iterator();
       //가져올 요소가 있는지 검사, true false값으로 반환
       //가져올 요소가 없으면 false반환
       
        while(iter.hasNext())
        {
            Integer ii=(Integer)iter.next();//요소가져오기
            System.out.println(ii.intValue());
        }
*/
        //subList(시작값,끝값-1)
        //list=10 20 30 40 50
        ArrayList list2=new ArrayList(list.subList(1, 3));
        System.out.println(list2);

        list2.add("B");//요소추가
        list2.add("C");
        System.out.println(list2);
       
        //원하는 위치에 요소 추가하기
        list2.add(0, "A");
        System.out.println(list2);
       
        //요소값 수정
        list2.set(3, "HAPPY");
        System.out.println(list2);
       
        //list=10 20 30 40 50
        //list2=A 20 30 HAPPY C
       
        //요소삭제
        list2.remove(3);
        System.out.println(list2);
       
        //list2에서 list에 포함된 객체들을 삭제함
        for(int i=list2.size()-1;i>=0;i--){
            if(list.contains(list2.get(i))) list2.remove(i);
        }
       
        System.out.println(list2);
    }
}

 

---------------------------------------------------set 예제

  HashSet hs=new HashSet();
  hs.add("happy");
  hs.add("seoul");
  hs.add("sky");
  hs.add("sky"); 
  System.out.println(hs.size());

 

----------------------------------------------------map 예제

  HashMap hm=new HashMap();
  hm.put(one", "대한민국");
  hm.put("two", "오필승코리아");
  hm.put("three", "오필승코리아");

  System.out.print(hm.get(one"));

 

 


 

 

 

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[35] JDBC  (0) 2012.05.15
[34] 제네릭 Generics  (0) 2012.05.08
[32] Object 클래스  (0) 2012.05.04
[31] Exception 예외처리  (0) 2012.05.04
[30] Interface 구현  (0) 2012.05.03

 

* Object Class

  - 모든 클래스는 기본적으로 이 클래스를 상속받는다.
  - 모든 클래스의 객체는 이 클래스 타입으로 형변환을 할 수 있다.
  - 가장 상위에 있는 공통 데이터 타입
  - 메소드가 특정 클래스의 타입을 받지 않고 다양한 모든 타입을 받으려면
     인수의 타입을 Object로 지정해야 한다.

 

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

 

package oop8ex;

class English extends Object{
    String publisher = "스크린영어사";
   
    public void show(){
        System.out.println("출판사: " + publisher);
        System.out.println("시리즈: " + "screenplay");
    }  
}

public class ObjectEx1 {
    public static void main(String[] args) {
        //왼쪽의 자료형=오른쪽의 자료형
        English eng=new English();
        eng.show();
       
        Object obj=new English();
        //obj.show();//에러. 부모에 존재하는 메소드만 호출 가능
       
        //부모를 자식으로 형변환
        English mat=(English)obj;
        mat.show();
       
    }

}

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

 

package oop8ex;

//메소드가 받는 객체가 Object 타입이면 모든 객체를 전달 받을 수 있다

class Movie{
    public static void displayStar(Object obj){
        Screen screen=(Screen)obj;
        System.out.println(screen.getData());
    }
}

class Screen{
    public String getData(){
        return "";
    }
}

class TitleA extends Screen{
    public String getData(){
        return "댄싱퀸";
    }//override
}

class TitleB extends Screen{
    public String getData(){
        return "건축학개론";
    }//override
}

public class ObjectEx2 {
    public static void main(String[] args) {
       TitleA ta=new TitleA();
       System.out.println(ta.getData());      
       Movie.displayStar(ta);
      
       TitleB tb=new TitleB();
       Movie.displayStar(tb);
    }

}

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[34] 제네릭 Generics  (0) 2012.05.08
[33] Java Collections Framework  (0) 2012.05.08
[31] Exception 예외처리  (0) 2012.05.04
[30] Interface 구현  (0) 2012.05.03
[29] 내부클래스  (0) 2012.05.03

 

1. 오류의 구분 

   - 예외 (Exception) : 가벼운 오류이며 프로그램적으로 처리한다. 프로그래머가 해결할 수 있는 오류

 - 오류 (Error) : 치명적인 오류이며 JVM에 의존하여 처리한다. 프로그래머가 해결할 수 없는 오류

 

2. 예외처리(Exception handling) 에 대한 필요성

  - 프로그램의 비정상적인 종료를 막고, 정상적인 수행을 할 수 있도록 하기 위해서이다.

 

3. 예외의 구분

   - 일반적 예외 : 컴파일할 때 발생하는 오류이며,

                     컴파일할 때에 확인되므로 반드시 예외처리를 해야만 컴파일 된다.

- 실행 시 예외 : 배열의 범위를 넘었을때, 특정 수를 0으로 나누었을때등

                      프로그래머의 실수로 인한 예외이며,

                      예외처리를 하지 않아도 컴파일에는 무리가 없다.

 

4. 예외처리방법 

  ① try~catch문

     - 예상했던 예외가 발생하면 해당 예외 객체를 잡아(catch)내어 원하는 동작을 수행하고

       프로그램이 종료되지 않고 계속 진행할 수 있도록 하는 것.

 

  ② throws문

    - 예외를 처리하기보다는 발생한 예외객체를 양도하는 것.

    - 현재 메소드에서 예외처리를 하기가 조금 어려운 상태일때 현재 영역을 호출해준 곳으로

      발생한 예외객체를 대신 처리해 달라며 양도하는 것.

 

  ③ finally문

    - 예외가 발생하든 발생하지 않든 무조건 수행하는 부분.

 

5. try~catch문 형식

try{

//예외가 발생 가능한 문장들;

} catch(예상되는예외객체 변수명){

//해당 예외가 발생했을때 수행할 문장들;

}

 

6. 다중 catch문

try{

//예외가 발생 가능한 문장들;

} catch(예상되는예외객체1 변수명){

//해당 예외가 발생했을때 수행할 문장들;

} catch(예상되는예외객체2 변수명){

//해당 예외가 발생했을때 수행할 문장들;

} catch(예상되는예외객체3 변수명){

//해당 예외가 발생했을때 수행할 문장들;

}

 

7. finally문

try{

//예외가 발생 가능한 문장들;

} catch(예상되는예외객체1 변수명){

//해당 예외가 발생했을때 수행할 문장들;

} catch(예상되는예외객체2 변수명){

//해당 예외가 발생했을때 수행할 문장들;

} finally {

//예외발생 여부와 상관없이 수행할 문장들;

}

 

8. throws 예약어

접근제한 반환형 메소드명(인자1,…인자n) throws 예외클래스1,…예외클래스n {

 

}

 

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

 

-------------------------------------------------------Test12exception.java

package test3;

public class Test12exception {
 public static void main(String[] args) {
  
  //4.====================
  System.out.println(1);
  System.out.println(2);
  
  try{
   System.out.println(3);
   System.out.println(0/0);//예외발생
   System.out.println(4);

  }catch(ArithmeticException ae){
   System.out.println(5);
  }catch(Exception e){
   System.out.println("예외발생");
  }//반드시 맨 마지막에 와야 함.
  finally{
   System.out.println("나는 꼭 수행되어야 함.");
  }//예외발생여부와 상관없이 무조건 수행
  System.out.println(6);

  //3.=====================
  /*
  try{
   Exception e=new Exception("고의로 발생시킨 예외");
   System.out.println("예외객체 만들기만 함.");
   throw e;//예외를 발생시킴
   //throw new Exception("고의로 발생시킨 예외")
  }
  catch(Exception e){
   System.out.println("에러메시지:"+e.getMessage());
   e.printStackTrace();//문제가 발생한 정보를 모두 보여 줌
  }
  System.out.println("프로그램 정상 종료");
  */
  
  //2.===========================
  /*
  System.out.println(1);
  System.out.println(2);
  
  try{
   System.out.println(3);
   System.out.println(0/0);//예외발생
   System.out.println(4);

  }catch(Exception e){
   System.out.println(5);
  }
  System.out.println(6);
  //정상수행->5출력 안됨
  //예외발생->4출력 안되고 바로 catch문으로 이동
  *

  

//1.=======================
  /*
  int number=100;
  int result=0;
  //
  //for(int i=0;i<10;i++){
   //result=number/(int)(Math.random()*10);
   //System.out.println(result);
  //}
  
  //수정 소스
  for(int i=0;i<10;i++){
   try{
    result=number/(int)(Math.random()*10);
    System.out.println(result);
    System.out.println("정상수행");
   }catch (ArithmeticException e){
    System.out.println("0");
   }
  }
  //0으로 나누면 오류가 발생하므로 예외처리 해줌.
*/
 }

}

-------------------------------------------------ExceptionEx1.java

public class ExceptionEx1 {
    public static void main(String[] args) {
        // main()함수는 사용자가 호출하는 것이 아니라 JVM호출
  //실행이 값을 전달해 주면 main함수의 args변수가 받는다
  //args[0]  args[1]  args[2]
  //전달인자값의 구분은 space로 한다

        //ExceptionEx1 10 5
  //int a=int("123");//"123"
  int a=Integer.parseInt(args[0]); //5
  int b=Integer.parseInt(args[1]); //10
/*
        if (b == 0){
          System.out.println("0으로 나눌수 없습니다.");
          System.exit(1); // 프로그램 종료
        }
*/
        System.out.println(" a = " + a + " b = " + b );
        System.out.println(" a/b = " + (a/b) );
        System.out.println("나눗셈이 수행되었습니다.");
    }

}

-------------------------------------------------ExceptionEx2.java

public class ExceptionEx2 {
    public static void main(String[] args) {
  int a=Integer.parseInt(args[0]);
  int b=Integer.parseInt(args[1]);
  System.out.println(" a = " + a + " b = " + b );

        try{
     //만일 b값이 0일경우 예외발생
              System.out.println(" a/b=" + a/b );
  }
  catch(ArithmeticException e){
          // 예외 발생시 처리
          //System.out.println("[경고]예외발생:" + e.toString());
          //System.out.println("[경고]예외발생:" + e.getMessage());
          e.printStackTrace();
  }
  finally{
          // 무조건 실행
          System.out.println("나눗셈 연산이 종료 되었습니다.");
        }
     
      // 나머지 루틴 정상 실행
      System.out.println("나머지 루틴을 정상적으로 실행");

    }//main end

}//class end

 

-------------------------------------------------ExceptionEx3.java

package oop8ex;

public class ExceptionEx3 {
    public static void main(String[] args) {
        Integer integer = null;
        int i = 4;
/*
        if (i % 2 == 0){
            integer = new Integer(i);  //짝수일때만 객체 생성
        }

        if (integer == null){
            System.out.println("객체가 안 만들어 졌다.");
        }else{
            System.out.println("hashCode(): " + integer.hashCode());   
        }

        System.out.println("십진수: " + integer.intValue());
*/  
/*
NullPointerException [중요]
객체를 생성하지않고 메소드나 변수를 호출한 경우 NullPointerException 발생
이런 경우는 흔히 개발자의 판단 실수로 발생함으로 꼼꼼한 코드 테스트가 필요
*/   
        try
        {
            if (i % 2 == 0){
                integer = new Integer(i);  //짝수일때만 객체 생성
            }
           
            System.out.println("십진수: " + integer.intValue());
            System.out.println("2진수: " + integer.toBinaryString(i));
            System.out.println("8진수: " + integer.toOctalString(i));
            System.out.println("16진수: " + integer.toHexString(i));
        }
        catch(NullPointerException e)
        {
            System.out.println("객체를 만드세요.");
            System.out.println(e.toString());
        }
        finally
        {
            System.out.println("==================================");
            System.out.println("예외 처리 끝내고 finally 블럭을 수행한다");
        }
       
    }
}

 

-------------------------------------------------ExceptionEx4.java

package oop8ex;

public class ExceptionEx4 {
    public static void main(String[] args) {
 /*      
        try{
            Integer integer=null;
            //int n=integer.intValue();
           
            int a=10/0;
        }
        catch(NullPointerException e){
            System.out.println(e.toString());
        }
        catch(ArithmeticException e){
            System.out.println(e.toString());
        }
*/

/*
Exception 처리는 파생된 Exception를 상속해준
최고 조상에 해당하는 Exception클래스가 받아서 처리해 주는 형태를
많이 사용한다.
여러 예외가 있지만, 외우기 힘드므로 최고조상의 Exception만 사용해도 무방함.
*/
        try{
            Integer integer=null;
            int n=integer.intValue();
           
            int a=10/0;
        }
        catch(Exception e)
        {
            System.out.println(e.toString());
        }
       
    }

}

 

------------------------------------------------ThrowsEx.java

package oop8ex;

class Test1{
    public void print() throws Exception{
        int a = 10/0;//예외강제발생
        /*
        try
        {
            int a=10/0;
        }catch(Exception e){}
        */
    }

    public void disp() throws Exception{
        Integer integer=null;
        int n=integer.intValue(); //예외강제발생
        /*
        try
        {
            Integer integer=null;
            int n=integer.intValue();
        }catch(Exception e){}
        */
    }
}

public class ThrowsEx {
    public static void main(String[] args) {
        Test1 test=new Test1();
        try{
            test.print();//exception발생
            test.disp(); //exception발생
        }catch(Exception e){
            System.out.print(e.toString());
        }
       
    }
}

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[33] Java Collections Framework  (0) 2012.05.08
[32] Object 클래스  (0) 2012.05.04
[30] Interface 구현  (0) 2012.05.03
[29] 내부클래스  (0) 2012.05.03
[28] 추상화  (0) 2012.05.03

 

1. 인터페이스 정의

  - 추상클래스와 비슷. 추상클래스보다 추상화 정도가 더 높음.

  - 서비스 요청에 따른 중계자 역할을 하는 것. 실제 구현된 것이 전혀 없는 기본 설계도. (메뉴판)

  - 인터페이스는 일반멤버변수, 일반멤버메소드를 갖지 못함.

  - 변수는 상수로 자동설정, 메소드는 추상메소드로 정의됨.

  - 일반클래스에서 implements 예약어로 특정 인터페이스를 구현하겠다고 명시해야 함.

  - 인터페이스가 가지는 추상메소드들은 구현받은 클래스에서 하나도 빠짐없이 오버라이딩해야 함.

  - 만들어진 인터페이스의 활용도가 더 높음.

 

  - 인터페이스 형식

      [접근제한] interface 인터페이스명 {

                상수;

                추상메소드;

       }

 

- 구현

        class 클래스명 implements 인터페이스명 { 

        }

 

 

2. 인터페이스간의 상속

  - 실제 구현력이 없는 인터페이스간의 상속에서는 다중상속이 제공된다.

  - 인터페이스는 인터페이스로 부터만 상속받을수 있음.

  - 인터페이스가 다른 인터페이스로부터 상속을 받았다고 하지만 오버라이딩을 할 수는 없다.

  - 인터페이스는 몸체를 가지는 일반 메소드를 포함할 수 없다.

  - 상속을 받은 자식 인터페이스를 구현하는 일반 클래스에서 부모 인터페이스와 자식 인터페이스의

    추상 메소드들을 모두 오버라이딩해야 한다.

  - 인터페이스간의 다중 상속으로 여러 가지 객체로의 참조변수 변환이 간편하게 이루어지는

     유연함이 있다.

 

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

 

package oop7inner;

interface ISungjuk {
    //멤버함수의 정의부분(머릿말)만 올수 있다.
    //멤버함수의 몸통부분{} 작성시 에러발생
    public void setJumsu(int kuk, int eng);
    public abstract void print();//추상메소드  abstract생략가능
}
//=====================
class Sungjuk implements ISungjuk{
    int kuk = 0; // 국어
    int eng = 0; // 영어
   
    @Override
    public void print() {
        System.out.println("성적 증명서");
        System.out.println("국어: " + this.kuk);
        System.out.println("영어: " + this.eng);       
    }
   
    @Override
    public void setJumsu(int kuk, int eng) {
        this.kuk = kuk;
        this.eng = eng;           
    }
}
//=====================
public class InterEx1 {
    public static void main(String[] args) {    
        //인터페이스는 추상 메소드만 있음으로 객체를 만들 수 없다.
        //ISungjuk is=new ISungjuk(); 객체생성불가능
               
        Sungjuk sj=new Sungjuk();
        sj.setJumsu(40, 50);
        sj.print();
       
        //인터페이스는 객체를 만들 수 없음으로 기본적으로 다형성을 지원함.
        ISungjuk is=new Sungjuk();
        is.setJumsu(60, 70);
        is.print();       
       
    }
}

 

 

 


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

 

파일명 : ICalc.java

package oop7inner;

//인터페이스를 이용하여 사칙연산을 하는 프로젝트를 생성
//+, -, *, /, % 를 구현하는 메소드 원형 5개 선언.
public interface ICalc {
    public int nuAdd();
    public int nuSub();
    public int nuMul();
    public int nuDiv();
    public int nuNa();
}

 

 

파일명 : Calc.java

 

package oop7inner;

public class Calc implements ICalc{
    private int x;
    private int y;
   
    public Calc() {}
    public Calc(int x, int y) {
        this.x = x;
        this.y = y;
    }
    @Override
    public int nuAdd() {       
        return x+y;
    }
    @Override
    public int nuDiv() {
        return x/y;
    }
    @Override
    public int nuMul() {
        return x*y;
    }
    @Override
    public int nuNa() {
        return x%y;
    }
    @Override
    public int nuSub() {
        return x-y;
    }
}

 

파일명 : CalcEx.java


package oop7inner;

public class CalcEx {
    public static void main(String[] args) {
        //인터페이스의 다형성으로 접근
       
        ICalc calc=new Calc(10,20);

        //Calc cl=new Calc(10,20);
        //ICalc calc=cl;
       
        System.out.println("더하기: " + calc.nuAdd());
        System.out.println("빼기: " + calc.nuSub());
        System.out.println("곱하기: " + calc.nuMul());
        System.out.println("나누기: " + calc.nuDiv());
        System.out.println("나머지: " + calc.nuNa());
       
    }
}
==========================

 

 

파일명 : InterEx2.java

 

package oop7inner;

class Unit{
    int currentHP;//유닛의 체력
    int x;        //유닛의 위치(x좌표)
    int y;        //유닛의 위치(y좌표)
}

interface Movable{
    void move(int x, int y);
    //지정된 위치(x,y)로 이동하는 기능의 메소드
}

interface Attackable{
    void attack(Unit u);//지정된 대상(u)를 공격하는 기능의 메소드
    //public abstract void attact (Unit u) //원래코드
}

interface Fightable extends Movable, Attackable
{}

class Fighter extends Unit implements Fightable
{
    @Override
    public void attack(Unit u) {
               
    }
 
    @Override
    public void move(int x, int y) {
               
    }
}

public class InterEx2 {

   

}

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

 

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[32] Object 클래스  (0) 2012.05.04
[31] Exception 예외처리  (0) 2012.05.04
[29] 내부클래스  (0) 2012.05.03
[28] 추상화  (0) 2012.05.03
[Buyer클래스 예제]  (0) 2012.05.01

 

* Inner class

 

1. 내부클래스 특징
  - 특정클래스안에 또 다른 클래스가 정의되는 것
  - 내부클래스는 외부클래스의 모든 멤버들을 마치 자신의 멤버처럼 사용할 수 있다.
  - static 내부클래스를 제외하고는 다른 내부클래스는 항상 외부클래스를 통해야 생성할 수 있다.
  - 이벤트 처리에 많이 사용.
  - GUI 어플리케이션(AWT, Swing)의 이벤트 처리에 주로 사용

  - class안에 class가 있는 경우.
  - 외부에서 접근할 필요가 없는 클래스,
     즉 특정 클래스에  전적으로 사용되는 클래스는 내부 클래스로 선언.
  - 내부 클래스를 사용하려면 먼저 외부 클래스를 생성해야 가능.


2. Member 내부클래스
  - 객체를 생성해야만 사용할 수 있는 멤버들과 같은 위치에 정의되는 클래스
  - 내부클래스를 생성하려면 외부클래스의 객체를 생성한 후 생성할 수 있다.

    

    class Outer {
            …
              class Inner {
              }
            …
    }

 

    class Outer {
           …
           public void methodA( ) {
                  class Inner{
                  }
           } //멤버메소드
           …
     }

 

3.static 내부클래스
  - 내부클래스가 아니라 할 수 있으며, 외부클래스를 거치지 않고도 접근할 수 있다.
  - 최상위 클래스
  - 내부클래스안에 static변수를 가지고 있다면 해당 내부클래스는 static으로 선언해야 함.
  - 외부클래스를 생성하지 않고도 외부클래스명.내부클래스생성자( ) 로 생성할수 있다.

        class Outer {
             …
             static class Inner {
             }
             …
         }


4. Anonymous 익명 내부클래스
  - 이름이 없는 클래스
  - 이름이 없기 때문에 생성자를 가질 수 없음.
  - 한번만 사용하고 버려지는 객체를 사용할 때 유용한 내부클래스
  - 이벤트구현시 많이 사용

 

  ① 내부클래스의 이름과 참조할 수 있는 참조 변수가 없는 유형

      class Outer {
            …
            public void methodA ( ) {
                    new Inner( ) {
                    };
            }
            …
       }

 

② 내부클래스의 이름은 존재하지 않지만 참조할 수 있는 참조변수의 이름이 있는 경우

       class Outer {
           …
            Inner inn=new Inner ( ){
            };
           …
       }

 

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

 

package oop7inner;

class WebProgram{
    String title = "ERP JAVA";
    public void print()
    {
        //내부클래스 멤버접근에 하려면 반드시 객체생성를 하고
        //해당 객체명을 통해 사용가능하다.
        Language lang=new Language();//inner class객체생성
        lang.display();
       
    }//일반 멤버함수
   
    public class Language{
        String basic="JAVA,HTML,JavaScript";
       
        public void display(){
            System.out.println("기초 수업: " + basic);
        }
    }//내부클래스 inner class

    public class Script{
        String script = "JSP, Ajax, jQuery";       
        public void show(){
            print();
            //내부클래스에서 외부클래스 멤버함수는 접근가능
            System.out.println("Web script: " + script);
        }
    }//Script 내부클래스
   
    // 내부 클래스, static Inner Class
    public static class Android{
        public Android(){
            System.out.println("Android SDK");
        }       
        public static void view(){
            System.out.println("Android CORE Programming");
        }
    }
}

public class InnerEx1 {
    public static void main(String[] args) {
        //Language lang=new Language();
        //에러. 내부클래스는 독립적으로 객체생성 할 수 없다.
/*       
        WebProgram.Language lang=new WebProgram().new Language();
        //외부클래스.내부클래스 형태로 단계별로 접근하면 된다.
        lang.display();
*/       
        //WebProgram web=new WebProgram();
        //web.print();
       
        //WebProgram.Script ws=new WebProgram().new Script();
        //ws.show();
       
        //static 내부클래스 접근 방법
        WebProgram.Android wa=new WebProgram.Android();
        wa.view();

        WebProgram.Android.view();
               
    }
}

 

 

* 익명클래스

 

파일명 : AnoyEx.java

 

package oop7inner;

interface IMessage {
    public abstract void msgPrint();
}

class Message implements IMessage{
    @Override
    public void msgPrint() {
        System.out.println("Message클래스");       
    }
}

public class AnoyEx {
    public static void main(String[] args) {
        Message mess=new Message();
        mess.msgPrint();
       
        // anonymous익명클래스
        //IMessage msg=new IMessage(); //에러
       
        IMessage msg=new IMessage()
                     {
                        @Override
                        public void msgPrint() {
                            System.out.println("익명클래스");                           
                        }           
                      };
       
         msg.msgPrint();

    }

}

 

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[31] Exception 예외처리  (0) 2012.05.04
[30] Interface 구현  (0) 2012.05.03
[28] 추상화  (0) 2012.05.03
[Buyer클래스 예제]  (0) 2012.05.01
[27] super, super()  (0) 2012.05.01

1. 추상화의 이해
  - 구체적인 개념으로부터 공통된 부분들만 추려내어 일반화 할 수 있도록 하는 것을 의미
  - 일반적으로 사용할 수 있는 단계가 아닌 아직 미완성적 개념.
  - 적용분야 : 메소드, 클래스

 

* 추상메소드의 구성
  - 선언부만 작성하고 구현부는 작성하지 않은채로 남겨둔것. 몸통만 있음.
  - 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 주로 사용.
  - 추상메소드를 하나라도 가지게 되는 클래스가 추상클래스
  - { } 생략
  - 추상 클래스는 추상 메소드가 1개이상 선언되어 있다.
  - 추상 클래스는 객체를 생성할 수 없다.
  - 추상 클래스는 반드시 상속받아서 자식클래스에서 사용해야 한다.
  - 추상클래스가 객체를 생성하려면 추상 메소드를 Overriding(재정의) 해야 한다.


* 이클립스에서 자동생성 기능 ctrl + space bar

 

2. 다형성
 - 어떤 값을 할당할 때 좌변(장소)과 우변(값,객체)은 데이터 타입이 일치해야함.
 - 어떤 타입이 다른 타입의 값을 할당 받는 기능
 - 숫자와 비슷한 방법으로 클래스도 형변환 가능
 - 부모클래스로 자식객체를 생성할 수 있다.

 

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

 

package oop6abstract;

abstract class Travel {
    int bb=10;
    public void pl(String str){
        System.out.println(str);
    } 
    public void pl(){
        System.out.println("----------------------");
    }
    public abstract String travelWhere(); //추상메소드
}//추상클래스

class Type1 extends Travel{
    public String travelWhere()
    {
        return "제주도 올레길 투어";
    }//추상메소드 구현 overriding
}
//============================
class Type2 extends Travel{
    @Override
    public String travelWhere() {
        return "지리산 둘레길 투어";
    }
   
}
//===========================
class Type3 extends Travel{
  @Override
  public String travelWhere() {
      return "여의도 봄꽃축제";
  }
 
}
//===========================
class Type4 extends Travel{
    @Override
    public String travelWhere() {
        return "안양 충훈부 벚꽃축제 (1-2)";
    } 
}
//===========================
class Type5 extends Travel{
    int a=10;
    @Override
    public String travelWhere() {
        return "해외여행!!!";
    } 
  }
//============================
public class AbstractEx {

    public static void main(String[] args) {
        //Travel travel=new Travel();
        //추상클래스는 객체생성 할수 없다
/*
        Type1 one=new Type1();
        one.pl("여행가자");
        System.out.println(one.travelWhere());
        one.pl();
       
        Type2 two=new Type2();
        two.pl("두번째 여행");
        two.pl(two.travelWhere());
*/       
        //다형성 예제
        Travel travel=new Type3();
        travel.pl(travel.travelWhere());  //여의도
       
        travel=new Type4();
        travel.pl(travel.travelWhere());//안양

        travel=new Type1();
        travel.pl(travel.travelWhere());//제주
       
        travel=new Type2();
        travel.pl(travel.travelWhere());//지리산
       
        //Type1 type=new Travel();에러
        //자식클래스는 부모클래스 객체를 생성할수는 없다
       
        travel=new Type5();
        //travel.aa=20; 에러
        //travel.bb=20; 에러아님

       
    }

}

 

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

 

파일명 : Product.java

 

package oop6abstract;

public abstract class Product {
    // 추상 메소드(각각의 클래스마다 고유하게 구현)
    public abstract void print();

    // 일반 메소드(공통으로 공유)
    public void line1(){
        System.out.println("---------------------------");
    }   
    public void line2(){
        System.out.println("***************************");
    }   
    public void copyright(){
        System.out.println("Created By GREEN 2012");
    }   
    public void pl(String str){
        System.out.println(str);
    }

 

 

파일명 :  Pc.java

 

package oop6abstract;

public class Pc extends Product{
    private String name;
    private String cpu;
    private String ram;
   
    public Pc() {}

    public Pc(String name, String cpu, String ram) {
        this.name = name;
        this.cpu = cpu;
        this.ram = ram;
    }

    public void print()
    {
        System.out.print(this.name+" ");
        System.out.print(this.cpu+" ");
        System.out.print(this.ram+" ");
        System.out.println();
    }
}

}

 

파일명 :  Lcd.java

 

package oop6abstract;

public class Lcd extends Product{
    private String name;
    private String inch;
    //기본생성자
    public Lcd() {}   
    //private속성의 멤버변수 초기화해주는 생성자
    public Lcd(String name, String inch) {
        this.name = name;
        this.inch = inch;
    }   
    //override구현, 멤버변수 출력 메소드
    public void print()
    {
        System.out.print(this.name+" ");
        System.out.print(this.inch+" ");
        System.out.println();
    }
}

파일명 : Notebook.java

 

package oop6abstract;

public class Notebook extends Product{
    private String name;
    private String hdd;
    public Notebook() {}
    public Notebook(String name, String hdd) {
        this.name = name;
        this.hdd = hdd;
    }
    //override구현, 멤버변수 출력 메소드
    public void print()
    {
        System.out.print(this.name+" ");
        System.out.print(this.hdd+" ");
        System.out.println();
    }
}

 

파일명 : AbstractEx2.java

 

package oop6abstract;

public class AbstractEx2 {

    public static void main(String[] args) {
        Product product = new Pc("고성능 PC", "i5", "2GB");
        //호출할 수 있는 메소드는 부모클래스 Product 클래스안에 있는
        //메소드와 오버로딩된 메소드만 가능
        product.line1();
        product.print();
        product.line2();
        product.copyright();
       
        product=new Lcd("LCD모니터","19인치");
        product.line1();
        product.print();
        product.line2();
        product.copyright();

        product=new Notebook("SAMSUNG","60기가");
        product.line1();
        product.print();
        product.line2();
        product.copyright();
    }
}

 

 

 

 

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[30] Interface 구현  (0) 2012.05.03
[29] 내부클래스  (0) 2012.05.03
[Buyer클래스 예제]  (0) 2012.05.01
[27] super, super()  (0) 2012.05.01
[26] 상속관계에서의 생성자  (0) 2012.05.01

+ Recent posts