yoni
[42][OOP] JCF(Java Collection Framework: ArrayList, HashMap), Generics, JCF의 활용 본문
java of educational by contents
[42][OOP] JCF(Java Collection Framework: ArrayList, HashMap), Generics, JCF의 활용
yoni-1117 2018. 12. 28. 11:07[01] JCF(Java Collection Framework) - java.util.ArrayList, java.util.Vector, java.util.HashMap
- 객체를 수집하여 저장하여 두었다가 요청이 있을시 저장소에서
추출하여 제공하는것을 목적으로 합니다. 배열도 가능하나 배열은 필요에 따라
메모리 공간을 변경 할 수 없습니다.
- JCF class들은 객체를 저장시 Object 타입으로 변경하여 저장하고 리턴합니다.
그 이유는 다양한 타입을 저장 할 수 있도록하기 위해서입니다.
메모리 공간을 변경 할 수 없습니다.
- JCF class들은 객체를 저장시 Object 타입으로 변경하여 저장하고 리턴합니다.
그 이유는 다양한 타입을 저장 할 수 있도록하기 위해서입니다.
java.lang.Object <-- 모든 클래스의 부모 클래스, 모든 클래스로 자동 상속됨
|
+--java.util.AbstractCollection
|
+--java.util.AbstractList
|
+--java.util.ArrayList
모든 구현 인터페이스:
Cloneable , Collection , List , RandomAccess , Serializable
1. 실습
[실행 화면]
java
2017
1.25
▷ oop5.ArrayListTest.java
-----------------------------------------------------------------------------------
package oop5;
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList list = new ArrayList();
// Vector list = new Vector(); // Network 관련 개발에 주로 사용
list.add("JAVA"); // String -> Object
list.add(2017); // int -> Integer -> Object
list.add(1.25); // double -> Double -> Object
.....
}
}
-----------------------------------------------------------------------------------
2. HashMap
- 키와 값의 구조
HashMap map = new HashMap();
map.put(key, value)
map.get(key)
[실행 화면]
Web 개발자
Object -> int -> long: 2500000000
Object -> long: 3500000000
▷ oop5.MapTest.java
-----------------------------------------------------------------------------------
package oop5;
import java.util.HashMap;
public class MapTest {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("A01", "Web 개발자"); // key, value
map.put("2016", 2000000000);
map.put("2017", 3000000000L);
.....
}
}
-----------------------------------------------------------------------------------
[03] Generics
- 객체를 저장하는 기술인
Collection Framework(ArrayList, Vector, HashMap...)의 단점을 개선한 기능입니다.
기존의 1.4이하에서는 ArrayList등에 들어오는 객체의 타입을
Design Time(Eclipse 개발시)에 확인이 안되 에러를 잡기 힘들었으나
1.5부터는 개발자가 개발시에 이클립스로부터 에러 상황을 바로 확인할
수 있습니다.
- Class ArrayList<E>에서 'E'는 ArrayList에 저장할 데이터의 타입을
말합니다.
- E는 Element(원소)를 말하며, new ArrayList<String>() 이면 'E'는
'String' 클래스를 가르키며, < > 안의 String은 유형 매개 변수
(type parameter)이다. String 객체만 저장 가능합니다.
- Generics를 이용하면 저장된 객체 추출시 자동 형변환됨, 형변환 과정 생략.
1. Generics를 사용하지 않은 경우.
▷ oop5.Generics.java
-----------------------------------------------------------------------------------
package oop5;
import java.util.ArrayList;
public class Generics1 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("January"); // String -> Object
list.add("February");
list.add(3); // int 상수 --> Integer --> Object 타입으로 변환
list.add("April");
list.add(5); // int 상수 --> Integer --> Object 타입으로 변환
}
}
-----------------------------------------------------------------------------------
2. Generics 사용
[실행 화면]
[실행 화면]
JAVA
HTML5
CSS3
------------------
2500000000
▷ oop5.Generics2.java
-----------------------------------------------------------------------------------
package oop5;
import java.util.ArrayList;
public class Generics2 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("JAVA");
list.add("HTML5");
list.add("CSS3");
// list.add(2017); // ERROR. 선언된 타입외에는 저장 불가능
.....
}
}
3. 메소드에서의 Generics 사용
[실행 화면]
1
2
3
▷ oop5.Generics3.java
-----------------------------------------------------------------------------------
package oop5;
import java.util.ArrayList;
class Print {
public void print( ) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
public class Generics3 {
public static void main(String[] args) {
Print print = new Print();
ArrayList<String> list1 = new ArrayList<String>();
list1.add("1월");
list1.add("2월");
list1.add("3월");
print.print();
ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(2014);
list2.add(2015);
list2.add(2016);
// The method print(ArrayList<String>) in the type Print is not applicable for the arguments (ArrayList<Integer>)
// print.print(list2);
}
}
-----------------------------------------------------------------------------------
[02] HashMap에서의 Generics 사용
[실행 화면]
상품명: 노트북
가격: 500000
상표: 아수스
상품명: 태블릿
가격: 600000
상표: LG
상품명: Desktop
가격: 400000
상표: Dell
------------------------
상품명: 노트북
가격: 500000
상표: 아수스
상품명: 태블릿
가격: 600000
상표: LG
상품명: Desktop
가격: 400000
상표: Dell
▷ oop5.Product.java
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
▷ oop5.MapTest2.java
package oop5;
class Product{
private String name;
private int price;
private String brand;
public Product() { }
public Product(String name, int price, String brand) {
.....
}
public void print(){
System.out.println("상품명: " + name);
System.out.println("가격: " + price);
System.out.println("상표: " + brand);
System.out.println();
}
}
▷ oop5.MapTest2.java
-----------------------------------------------------------------------------------
package oop5;
import java.util.HashMap;
public class MapTest2 {
public static void main(String[] args) {
Product pro1 = new Product("노트북", 500000, "아수스");
Product pro2 = new Product("태블릿", 600000, "LG");
Product pro3 = new Product("Desktop", 400000, "Dell");
HashMap map = new HashMap();
map.put("pro1", pro1);
map.put("pro2", pro2);
map.put("pro3", pro3);
.....
System.out.println("------------------------");
HashMap<String, Product> list = new HashMap<String, Product>();
list.put("pro1", pro1);
list.put("pro2", pro2);
list.put("pro3", pro3);
.....
}
}
-----------------------------------------------------------------------------------
'java of educational by contents' 카테고리의 다른 글
[44][JDBC] JDBC Connection의 분리, enum 타입의 사용 (0) | 2018.12.28 |
---|---|
[43][JDBC] JCF, VO(DTO) 기반 영화 정보 시스템 제작 ★ (0) | 2018.12.28 |
[참고] Java + MyBATIS 3.4.1 + MySQL 5.6의 연동 및 JAR 배포 (0) | 2018.12.16 |
[40][JDBC] 영화 정보 시스템, 등록, 목록, 조회, 수정, 삭제, MovieDAO.java 제작 ★ (0) | 2018.12.15 |
[39][JDBC] Eclipse Java project와 MySQL Driver 연동, Movie 테이블, String, StringBuffer, StringBuilder의 특징 (0) | 2018.12.15 |
Comments