[ 1. Java Iterator 개념 및 사용방법 ]

 

1. 정의

   - Java에서 제공하는 컬렉션(Collection)객체는 보관하고 있는 자료들을 순차적으로 접근하면서 처리할 때 사용하는 Iterator 형식을 제공하고 있다.

   - Iterator는 반복자라고 부르며 컬렉션 종류에 관계없이 같은 방법으로 프로그래밍 할 수 있게 해 준다.

 

2. 사용방법

   - Iterator 개체는 컬렉션 개체의 iterator() 메서드를 호출하여 얻어올 수 있다.

   - hasNext() 메서드로 이동이 가능한지 확인한 후에 next() 메서드로 해당 위치의 보관한 개체를 참조하여 원하는 작업을 수행한다.

 

3. 장.단점

   - 이와 같은 Iterator 개체를 사용하면 size 메서드를 얻어와서 반복 처리하는 것보다 속도에서 불리하다.

   - 이는 Iterator 개체를 사용하는 부분이 있기 때문에 불가피한 사항이다.

     하지만 컬렉션 종류에 관계없이 일관성있게 프로그래밍할 수 있다는 장점을 갖고 있다.

   - 소스 코드에 어떠한 컬렉션을 사용할 지 정해지지 않았지만 컬렉션 내에 보관한 모든 내용을 출력하는 등의 작업을 먼저 하길 원한다면 Iterator를 사용하는 것은 좋은 선택이다.

 

3. 사용가능 객체

 

 

  ArrayList arr = new ArrayList();

  Vector<> vec = new Vector<>();

 LinkedList<Memberlink = new LinkedList<Member>();

 Set<String> st     = new Set<>(String);

 ....

 과 같은 Collection 객체들

 

 

4. Iterator객체 얻기

 

  Iterator it0 = arr.iterator()//vector의 요소를 순차 검색할 객체

  Iterator<> it1 = vec.iterator<>();

  Iterator<Member> it2 = link.iterator<Member>();

  Iterator<String> it3 = st.iterator<String>();

 ...

 

 

5. while 문으로 하나씩 객체 얻기

   - hasNext() : 해당 iterator객체에 값 존재 여부(boolean)

   - next() : iterator객체의 값 얻기.

 

 while (it0.hasNext()){

    String st = (String)it0.next();

 }

 

6. 참고, for문을 통한 객체 얻기

    - 이때는 Iterator객체가 아닌 Collection객체를 사용한다.

    - for 문장이 만나면 자동으로 Collection객체의 요소를 순차적으로 얻어 온다.

 

 

 for(Member mem : link){

    mem.get();

    mem.set();

    ...

 }

 

 

 for(String stOne : st){

    System.out.println(stOne);

    ...

 }

Posted by 농부지기
,

[ 1. Java ArrayList 개념 및 사용방법 ]

 

1. 정의

   - ArrayList<E>는 가변 크기의 배열을 구현한 컬렉션 클래스 이다.

   - Java 언어에서는 순차 리스트를 구현한 ArrayList 클래스를 제공하고 있다.

   - ArrayList는 내부 저장소가 배열처럼 연속적인 메모리 형태이다.

     그리고 저장소의 크기를 변화할 수 있다는 특징이 있다.

     이러한 점은 Vector 클래스와 차이가 없다.

   - 실제 Vector 클래스와 ArrayList 클래스는 거의 모든 부분에서 비슷하다.

 

2. ArrayList와  Vector 차이점

   - ArrayList는 Thread간에 동기화를 지원하지 않기 때문에

      다수의 Thread가 동시에 ArrayList에 요소를 삽입하거나 삭제할 때 총돌의 소지가 있다.

   - Vector는 동기화를 지원한다.

   - ArrayList의 속도가 Vector보다 다소 빠르다고 하지만 큰 의미를 갖는 정도는 아니다.

 

** ArrayList와 Vectory 선언 및 메서드는 거의 동일하다.

 

3. 선언

 

 

  ArrayList tmp = new ArrayList();

  ArrayList<> members = new ArrayList<>();

 ArrayList<Membermembers = new ArrayList<Member>();

 ArrayList<Integer> num     = new ArrayList<>();

 ArrayList<Integer> num2    = new ArrayList<Integer>();

 ArrayList<String>  str     = new ArrayList<String>();

 ArrayList<String>  str2    = new ArrayList<String>(10); //초기 용량 지정

 

4. 요소 추가  (Collection인터페이스 메소드)

    - add()메소드 이용

 

  Member member = new Member(num,name);

  members.add(member); 

  members.add(new Member(10, "농부"));

 members.add(new Member(11, "어부"));

 

 

  num.add(3);

  num.add(null);

  num.add(1, -10);  //요수 중간에 삽입

 

5. 객체 크기 및 특정요소 값 얻기

    - size()메소드 이용 

 

 Member Find(int num){

        int cnt = members.size();              

        for(Member member : members){

               if(member.getNum() == num){

                       return member;

               }

        }

        return null;

 }

 

 

 

for(Integer one : num){

       System.out.println("Integer value=" + one);

}

 

 

 

 Integer obj = num.get(1);

 int i = obj.intValue();

 

 

6. 특정 .요소 삭제

    - remove()메소드 이용  

    - clear()메소드 이용 

 

 Member member = Find(num);

 if(member == null){

        System.out.println("존재하지 않습니다.");

        return;

 }

 members.remove(member); 

 

 

 

 num.remove(1);  //index 1 요소 삭제

 num.removeAllElements();  //method 없음.

 num.clear();  //모든 요소 삭제

 

 

 

 

7. 현재크기 얻기

    - size()메소드 이용  

 

  int size = members.size();      //현 vectory 자료 개수 얻기

 int cap  = members.capacity();  //capacity method 없음.

 

 

 

 

 

Posted by 농부지기
,

[ 1. Java Vector 개념 및 사용방법 ]

 

1. 참고

   - Java 언어에서 배열은 생성할 때 크기를 결정할 수 있어야 한다.

   - 하지만 미리 크게 설정하면 메모리 효율을 떨어지고 작게 설정하면 충분한 개체를 보관할 수 없다.

   - Vector는 확장 가능한 배열로 저장소가 꽉 차면 자동으로 저장소의 크기를 늘려주기 때문에 유연하게 사용할 수 있다.

 

2. 정의

    - Vector 클래스는 Collection 인터페이스를 기반으로 구현한 List 클래스에서 파생한 클래스이다.

    - 따라서 Vector 클래스에는 Collection 인터페이스에 약속한 기능들을 사용할 수 있다.

    - 물론 Vector 클래스에서 추가적으로 제공하는 기능들도 있다.

    - Vectory<E>는 List<E>인터페이스를 구현한 클래스로서 가변개수의 배열이 필요시 적합

    - 요소에 값이 증가되면 자동으로 크기 조절

    - 요소의 값이 중간이 삽입 가능하고, 그 다음 요소들은 한 자리씩 뒤로 이동된다.

 

3. 선언

 

 

  Vector tmp = new Vector();

  Vector<> members = new Vector<>();

 Vector<Membermembers = new Vector<Member>();

 Vector<Integer> num     = new Vector<>();

 Vector<Integer> num2    = new Vector<Integer>();

 Vector<String>  str     = new Vector<String>();

 Vector<String>  str2    = new Vector<String>(10); //초기 용량 지정

 

4. 요소 추가  (Collection인터페이스 메소드)

    - add()메소드 이용

 

  Member member = new Member(num,name);

  members.add(member); 

  members.add(new Member(10, "농부"));

 members.add(new Member(11, "어부"));

 

 

  num.add(3);

  num.add(null);

  num.add(1, -10);  //요수 중간에 삽입

 

5. 객체 크기 및 특정요소 값 얻기

    - size()메소드 이용 

 

 Member Find(int num){

        int cnt = members.size();              

        for(Member member : members){

               if(member.getNum() == num){

                       return member;

               }

        }

        return null;

 }

 

 

for(Integer one : num){

       System.out.println("Integer value=" + one);

}

 

 

 Integer obj = num.get(1);

 int i = obj.intValue();

 

6. 특정 .요소 삭제

    - remove()메소드 이용  

    - removeAllElements()메소드 이용 

 

 Member member = Find(num);

 if(member == null){

        System.out.println("존재하지 않습니다.");

        return;

 }

 members.remove(member); 

 

 

 num.remove(1);  //index 1 요소 삭제

 num.removeAllElements();  //모든 요소 삭제

 

 

 

7. 현재크기 얻기

    - size()메소드 이용  

    - capacity()메소드 이용  : capacity는 기본 10배수로 커짐

 

 

 int size = members.size();      //현 vectory 자료 개수 얻기

 int cap  = members.capacity();  //현 vectory 물리적 크기 얻기

 

 //만약 size가 5이면 cap 은 10

 //     size가 15이면 cap은 20

 

 

Posted by 농부지기
,

[ 1. Java HashMap 개념 및 사용방법 ]

 

1. 정의

    - HashMap 클래스는 Map 인터페이스 기반의 구현 클래스 이다.

    - 그리고 해쉬 테이블 자료 구조를 표현한 클래스 이다.

    - keyvalue를 쌍으로 보관하는 클래스 이다.

    - HashMap 형식 변수 선언 및 개체 생성할 때는 제네릭 형식 인자로 키와 값을 명시하여 표현 한다.

 

2. HashMap 선언

 

 HashMap<String, Book> book_dic = new HashMap<String, Book>();

 

3. HashMap 값 추가 

    - put() 메소드 이용

 

 book_dic.put(isbn, book); 

 

4. HashMap 값 존재 확인

    - containsKey() 메소드 이용

 

 if(book_dic.containsKey(isbn)){

   System.out.println("이미 존재하는 ISBN입니다.");

   return;

 }

 

5. HashMap 한건 삭제

    - remove() 메소드 이용

 

  if(book_dic.containsKey(isbn)){

    book_dic.remove(isbn);

    System.out.println("삭제하였습니다.");

 }else{

     System.out.println("존재하지 않습니다.");

 }

 

6. 특정 Key값 얻기

    - get() 메소드 이용

 

 if(book_dic.containsKey(isbn)){

    Book book = book_dic.get(isbn);

    System.out.println("검색 결과>>"+book.toString());

 }else{

    System.out.println("존재하지 않습니다.");

 }

 

7. 저장된 목록 확인

    - values() 메소드 이용

 

  for(Book book : book_dic.values()){

     System.out.println(book.toString());

 }

 

8. 저장된 Key 목록 얻기

    - keySet() 메소드 이용

 

  for(String isbn : book_dic.keySet()){

     System.out.println(isbn);

 }

 

 

 

 다음 소스는 키를 도서의 ISBN, 값을 도서 개체로 관리하는 프로그램 예제입니다.

 

▷ 소스 3.13 도서 관리 프로그램(HashMap 클래스 이용)

//도서 클래스

public class Book {

        final String isbn;

        String title;

        int price;

        public Book(String isbn, String title,int price){

               this.isbn = isbn;

               this.title = title;

               this.price = price;

        }

        public String ISBN(){

               return isbn;

        }

        public String toString(){

               return String.format("ISBN:%s 이름:%s 가격:%d", isbn, title, price);        }

}

//도서 관리자 클래스

import java.util.HashMap;

import java.util.Scanner;

 

public class BookManager {

        Scanner scan = new Scanner(System.in);

        HashMap<String, Book> book_dic = new HashMap<String, Book>();

        public void Run(){

               int key = 0;

               while((key = selectMenu())!=0){

                       switch(key){

                       case 1: addBook(); break;

                       case 2: removeBook(); break;

                       case 3: searchBook(); break;

                       case 4: listBook(); break;

                       case 5: listISBN(); break;

                       default: System.out.println("잘못 선택하였습니다."); break;

                       }

               }

               System.out.println("종료합니다...");

        }

        int selectMenu(){

               System.out.println("1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료");

               int key = scan.nextInt();

               scan.nextLine();

               return key;

        }

        void addBook(){

               String isbn;           

               System.out.print("추가할 도서 ISBN:");

               isbn = scan.nextLine();

               if(book_dic.containsKey(isbn)){

                       System.out.println("이미 존재하는 ISBN입니다.");

                       return;

               }

               String title;

               int price;

               System.out.print("도서 제목:");

               title = scan.nextLine();

               System.out.print("가격:");

               price = scan.nextInt();

               scan.nextLine();

               Book book = new Book(isbn,title,price);

               book_dic.put(isbn, book);

               System.out.println(book.toString()+" 생성하였습니다."); 

              

        }

        void removeBook(){

               String isbn;           

               System.out.print("삭제할 도서 ISBN:");

               isbn = scan.nextLine();

               if(book_dic.containsKey(isbn)){

                       book_dic.remove(isbn);

                       System.out.println("삭제하였습니다.");                 

               }

               else{

                       System.out.println("존재하지 않습니다.");               

               }             

        }

        void searchBook(){

               String isbn;           

               System.out.print("검색할 도서 ISBN:");

               isbn = scan.nextLine();

               if(book_dic.containsKey(isbn)){

                       Book book = book_dic.get(isbn);

                       System.out.println("검색 결과>>"+book.toString());                                           

               }

               else{

                       System.out.println("존재하지 않습니다.");               

               }

        }

        void listBook(){

               System.out.println("도서 목록");

               int cnt = book_dic.size();

               System.out.println("도서 :"+cnt);

               for(Book book : book_dic.values()){

                       System.out.println(book.toString());

               }

        }

        void listISBN(){

               System.out.println("ISBN 목록");

               int cnt = book_dic.size();

               System.out.println("도서 :"+cnt);

               for(String isbn : book_dic.keySet()){

                       System.out.println(isbn);

               }

        }

}

//ISBN 키로 도서 검색(HashMap 클래스 이용)

public class Program {

        public static void main(String[] args){

               BookManager bm = new BookManager();

               bm.Run();

        }

}

 

▷ 소스 3.13 실행 결과

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

1

추가할 도서 ISBN:1234

도서 제목:Java

가격:2000

ISBN:1234 이름:Java 가격:2000 생성하였습니다.

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

1

추가할 도서 ISBN:4321

도서 제목:C언어

가격:5000

ISBN:4321 이름:C언어 가격:5000 생성하였습니다.

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

1

추가할 도서 ISBN:3421

도서 제목:자료구조

가격:2000

ISBN:3421 이름:자료구조 가격:2000 생성하였습니다.

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

4

도서 목록

도서 :3

ISBN:1234 이름:Java 가격:2000

ISBN:4321 이름:C언어 가격:5000

ISBN:3421 이름:자료구조 가격:2000

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

5

ISBN 목록

도서 :3

1234

4321

3421

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

3

검색할 도서 ISBN:1234

검색 결과>>ISBN:1234 이름:Java 가격:2000

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

2

삭제할 도서 ISBN:4321

삭제하였습니다.

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

4

도서 목록

도서 :2

ISBN:1234 이름:Java 가격:2000

ISBN:3421 이름:자료구조 가격:2000

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

5

ISBN 목록

도서 :2

1234

3421

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

0

종료합니다...

 



출처: http://ehclub.co.kr/3083 [언제나 휴일]

 

Posted by 농부지기
,

[ 5. Generic (제너릭) 타입의 상속과 구현 ]

 

발취 : http://palpit.tistory.com/667

Posted by 농부지기
,

[ 4. Generic (제너릭) 제한된 타입 파라미터 & 와일드 카드 타입 ]

 

발취 : http://palpit.tistory.com/667

Posted by 농부지기
,

 

 

발취 : http://palpit.tistory.com/667

Posted by 농부지기
,

[ 2. Generic (제너릭) 멀티 타입 파라미터 ]

 

 

1. 정의

    - 제네릭 타입은 두 개 이상의 멀티 타입 파라미터를 사용할 수 있는데, 이 경우 각 타입 파라미터를 콤마로 구분한다.

    - 구문 : (class<K, V, ...>, interface<K, V, ...>)

 

2. 예제 설명

   - 다음 예제는 Product<T, M> 제네릭 타입을 정의하고 ProductExam 클래스에서 Product<Tv, String> 객체와 Product<Car, String> 객체를 생성한다. 그리고 Getter와 Setter를 호출하는 방법을 보여준다.

 

3. 예문

   a. Product.java

      

 

   b. Tv.java

       public class Tv { .. }

 

   c. ProductMain.java

       

   * 실행결과

      generic.Tv:스마트 TV

      generic.Car:Das Auto

 

4. java7부터 선언방법 간소화

    a. 제네릭 타입 변수 선언과 객체 생성을 동시에 할 때 타입 파라미터 자리에 구체적인 타입을 지정하는 코드가 중복해서 나와 다소 복잡해질 수 있다.
       자바 7부터 제네릭 타입 파라미터의 중복 기술을 줄이기 위해 다이아몬드 연산자 <>를 제공한다.
       자바 컴파일러는 타입 파라미터 부분에 <> 연산자를 사용하면 타입 파라미터를 유추해서 자동으로 설정해 준다.

    b. 자바 6 이전 버전에서 사용한 제네릭 타입 변수 선언과 객체 생성 코드

        - Product<Tv, String> product<Tv, String>();

    c.  자바 7부터는 다이아몬드 연산자를 사용해서 다음과 같이 간단하게 작성할 수 있습니다.

        - Product<Tv, String> product<>();

 

출처 : http://palpit.tistory.com/666

Posted by 농부지기
,

[ 2. Generic (제너릭) Type - 사용예문2 ]

 

* 1. Generic 기본 개념 및 기본 예제

 

1. 일반적인 개발방법

    - 개발방법 : Box 클래스의 필드 타입이 Object 인데, Object 타입으로 선언한 이유는 필드에 모든 종류의 객체를 저장하고 싶어서다.

    a. Box.java

       

 

   b. Apple.java

      

 

   c. BoxMain.java

      

 

   d. 단점

      - 이와 같이 Object 타입을 사용하면 모든 종류의 자바 객체를 저장할 수 있다는 장점은 있지만, 저장할 때 타입 변환이 발생하고, 읽어올 때도 타입 변환이 발생한다.
        이러한 타입 변환이 빈번해지면 전체 프로그램 성능에 좋지 못한 결과를 가져올 수 있다.

 

2. Generic Type으로 개발방법

    - 개발방법 : 타입 파라미터 T를 사용해서 Object 타입을 모두 T로 대체했다.

                       T는 Box 클래스로 객체를 생성할 때 구체적인 타입으로 변경된다.                       

    a. Box.java

       

 

    b. BoxMain.java

        

 

    -> 최종 결과

        Hi

        11

 

    * 참고, 타입 파라미터 T는 String 타입으로 변경되어 Box 클래스의 내부는 다음과 같이 자동으로 재구성 된다.

      

 

참고URL : http://palpit.tistory.com/665

Posted by 농부지기
,

[ 2. Generic (제너릭) Type - 사용예문1 ]

 

* 1. Generic 기본 개념 및 기본 예제

1. Generic Type

    - 예) class<T>

            interface<T>

 

2. 일반적인 개발방법

    - 개발방법 : StudentPerson과 EmployeeInfo가 같은 구조로 개발 된 소스

   

 

3. 단순 중복 제거

    - 개발방법 : 중복 class제거

    

 

    - 단, 위 소스에서 컴파일은 정상적으로 진행되지만  실행오류가 발생한다. 

    

      [ Person p1 = new Person("부장"); ] 이 부분을 보면

   클래스 Person의 생성자는 매개변수 info의 데이터 타입이 Object이다. 따라서 모든 객체가 될 수 있다. 그렇기 때문에 위와 EmployeeInfo의 객체가 아니라 String이 와도 컴파일 에러가 발생하지 않는다. 대신 런타임 에러가 발생한다. 컴파일 언어의 기본은 모든 에러는 컴파일에 발생할 수 있도록 유도해야 한다는 것이다. 런타임은 실제로 애플리케이션이 동작하고 있는 상황이기 때문에 런타임에 발생하는 에러는 항상 심각한 문제를 초래할 수 있기 때문이다.

위와 같은 에러를 타입에 안전하지 않다고 한다. 즉 모든 타입이 올 수 있기 때문에 타입을 엄격하게 제한 할 수 없게 되는 것이다.

 

4. Genric화 된 소스

    - p1은 잘 동작할 것이다. 중요한 것은 p2다. p2는 컴파일 오류가 발생하는데 p2.info가 String이고 String은 rank 필드가 없는데 이것을 호출하고 있기 때문이다. 여기서 중요한 것은 아래와 같이 정리할 수 있다.

  • 컴파일 단계에서 오류가 검출된다.
  • 중복의 제거와 타입 안전성을 동시에 추구할 수 있게 되었다.   
  •    

     

    참고URL : https://opentutorials.org/module/516/6237

    Posted by 농부지기
    ,