선언시, <> 사용.
기본 타입에서 사용하지 않으며, String 타입이나 Wapper 클래스 등을 사용한다.
기본적으로<타입>을 받는 클래스나 인터페이스로, 알파벳 하나로 타입 파라미터를 표현하는 경우가 많음
제네릭 타입은 두개 이상의 타입 파라미터 사용 가능하다.
객체 생성
다이아몬드 연산자.(생략가능)
package chapter07;
public class Box {
private Object object; //뒤의 object 참조변수
public Object get() {
return object;
}
public void set(Object object) {
//set 메소드 오브젝트 클래스인 객체를 받아 get 메소드로 리턴함
this.object = object;
}
}
package chapter07;
public class BoxExample {
public static void main(String[] args) {
Box box = new Box(); //객체 생성 box는 참조변수
box.set(new Integer(10));
//object는 최상위이니깐 다숫자든 문자든 다 받을 수 있다.
box.set("홍길동");
String name = (String) box.get();//다운 캐스팅
System.out.println(name);
box.set(new Apple());//apple 객체에 참조변수 오브젝트에 넣음
Apple apple = (Apple) box.get();//다운캐스팅
//오브젝트로 갔다가 나올떄 다우냌스팅 필요
System.out.println(apple);
//형변환이 되었음.
}
}
package chapter07;
public class Apple extends Object{//Object슈퍼 클래스 Apple 서브 클래스
}
package chapter07;
public class Box2<T> {//T : 타입 파라미터(매개변수)
private T t;
public T get() {
return t;
}
public void set(T t) {
this.t = t;
}
}
package chapter07;
public class BoxExample2 {
public static void main(String[] args) {
Box2<String> box1 = new Box2<String>();//객체 생성
//T는 String이 됨. t는 필드(변수)
box1.set("Hello");
// box1.set(new Integer(10));
// 위의 겨우엔 오류가 남.(스트링을 넣기로 했는데 10이 들어가서
String greet = box1.get();
// BoxExample과 비교할때 굳이 다운캐스팅 할 필요가 없다.
// object가 아닌 string으로 들어갔다 나와서 번거롭지 않음(퍼포먼스가 좋아짐
//get 메소드를 불러서 Hello를 받아서 greet에 넣는다.
System.out.println(greet);
Box2<Integer> box2 = new Box2<Integer>();
//객체 생성하면 Integer (Wrapper클래스)타입이 T에 해당됨
//t는 참조변수 (클래스 뒤에 오는 얘는 참조변수)
//Integer는 Wrapper클래스
// Box2<Integer> box2 = new Box2<>();
//생략가능
// box2.set("Hello");
//위의 경우엔 제너릭이 안맞음.(Integer과 String)
box2.set(6);
//참조변수 t에 6이 들어감.
int value = box2.get();
//get 메소드에 6이라는 객체 값을 가지고 와서 기본 타입int value에 넣음(자동 언박싱)
System.out.println(value);
}
}
package chapter07;
public class Product <T,M>{
private T kind;
private M model;
public T getKind() {
return kind;
}
public void setKind(T kind) {
this.kind = kind;
}
public M getModel() {
return model;
}
public void setModel(M model) {
this.model = model;
}
}
package chapter07;
public class ProductExample {
public static void main(String[] args) {
Product<TV, String> product1 = new Product<>();
//객체 생성하면서 T에는TV(클래스) , M엔 String 이 됨
//Kind는 참조변수 model은 속성(필드)가 됨.
product1.setKind(new TV());
//새로운 객체인TV가 kind에 들어감
product1.setModel("스마트TV");
//set 메소드를 통해서 모델에 스마트 TV가 들어감
TV tv = product1.getKind();
//kind에서 TV객체를 받음. (TV 객체 =tv 대걍 이런꼴인가?)
String tvModel = product1.getModel();
// tvModel 가 스마트TV를 가리킴(model에 스마트TV가 세팅되어있었음)
System.out.println(tv);
System.out.println(tvModel);
Product<Car, String> product2 = new Product<>();
product2.setKind(new Car());
//카인드의 참조변수가 car 객체를 가리킴
product2.setModel("디젤");
Car car = product2.getKind();
//카 참조변수가 카 객체를 가리킴
String carModel = product2.getModel();
//carModel이 디젤을 가리킴
System.out.println(car);
System.out.println(carModel);
}
}
package chapter08;
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List <String> list = new ArrayList<>();
list.add("Java");//값 추가
list.add("JDBC");
list.add("Servlet");
list.add(2, "Database"); //인덱스 번호, String 값 삽입
list.add("Spring");
int size = list.size();
System.out.println("총 list 갯수: "+size);
String skill = list.get(2);
System.out.println("2번쨰 인덱스: "+skill);
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
System.out.println(i+": "+str);
//get 메소드로 인덱스 값을 가지고, String 값을 출력
}
// 0: Java
// 1: JDBC
// 2: Database
// 3: Servlet
// 4: Spring
System.out.println();
list.remove(2);//2번 인덱스 값 삭제
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
System.out.println(i+": "+str);
}
// 0: Java
// 1: JDBC
// 2: Servlet
// 3: Spring
System.out.println();
list.remove(2);//2번 인덱스 값 삭제
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
System.out.println(i+": "+str);
}
// 0: Java
// 1: JDBC
// 2: Spring
System.out.println();
list.remove("Spring");//"Spring" 이란 객체 삭제
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
System.out.println(i+": "+str);
}
// 0: Java
// 1: JDBC
}
}
package chapter08;
import java.util.ArrayList;
public class ArrayListExample2 {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
array.add("oracle");//ArrayList 컬렉션에 "oracle"이란 String 값 추가
array.add("ms-sql");
array.add("oracle");//데이터 중복 상관x
for (int i = 0; i < array.size(); i++) {
String str = array.get(i);
System.out.println(i+": "+str);
}
// 0: oracle
// 1: ms-sql
// 2: oracle
}
}
package chapter08;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListEx {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<String> a = new ArrayList<String>();
String longname ="a";
for (int i = 0; i < 4; i++) {
System.out.println("이름을 입력하세요");
String s = scanner.next();
a.add(s);
}
for (int i = 0; i < a.size(); i++) {
String name = a.get(i);
System.out.print(name+" ");
}
int longestIndex = 0;
for (int i = 0; i < a.size(); i++) {
if (a.get(longestIndex).length() <a.get(i).length()) {
longestIndex = i;
}
}
System.out.println("\n 가장 긴 이름은 : "+a.get(longestIndex));
scanner.close();
}
}
package chapter08;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
class AA{}
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
// Set<Object> set = new HashSet<>();
set.add("Java");
set.add("JDBC");
set.add("Servlet/JSP");
set.add("Java");// 중복 허용 x
set.add("iBATIS");
// AA a = new AA();
// set.add(a);
//오류 발생(String 타입이 아닌 객체a를 넣을라고 해서)
// set.add(a.toString());
int size = set.size();
System.out.println("총 객체수 : "+size);
Iterator<String> iterator = set.iterator();
// Iterator<Object> iterator = set.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
// Object element = iterator.next();// Object로 하면 최종 결과는 순서가 엉망진창이다.
System.out.println("\t"+element);
}
System.out.println();
set.remove("JDBC");
set.remove("iBATIS");
System.out.println("총 객체수 : "+set.size());
//set.size()가 아니라 size로 하면 int size = set.size();의 int size를 뜻한다. 그래서 변화 없음
// Iterator<String> iterator2 = set.iterator();
// while (iterator2.hasNext()) {
// String element = iterator2.next();
// System.out.println("\t"+element);
// }
//결과 동일함
for (String string : set) {
System.out.println("\t"+string);
}
//for-each문
if (set.isEmpty()) {
System.out.println("비어 있음");
}else {
System.out.println("객체 있음");//2개가 있으니깐
set.clear();// 몽땅 다 삭제함
if (set.isEmpty()) {
System.out.println("비어 있음");
}else {
System.out.println("객체 있음");//2개가 있으니깐
}
}
}
}
//총 객체수 : 4
//Java
//JDBC
//Servlet/JSP
//iBATIS
//
//총 객체수 : 2
//Java
//Servlet/JSP
//객체 있음
//비어 있음
package chapter08;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
//Map 인터페이스 map클래스
map.put("임영웅", 31);//객체 추가(key가 임영웅, 값 31
map.put("영탁", 38);//객체 추가(key가 영탁, 값 38
map.put("이찬원", 25);//객체 추가(key가 이찬원, 값 25
// t는 우리
map.put("임영웅", 30);//객체 추가(key가 임영웅, 값 30
// t는 중복 되면 안됨. 그래서 걍 entty수는 변화 없음
map.put("김호중", 30);
map.put("정동원", 14);
System.out.println("총 Entry 수 : "+map.size());
System.out.println("임영웅: "+ map.get("임영웅"));//key값으로 호출해서 출력
System.out.println();
Set<String> keySet = map.keySet();
Iterator<String> keyIterator = keySet.iterator();
while (keyIterator.hasNext()) {
String key = keyIterator.next();
Integer value = map.get(key);
System.out.println("\t"+key+":"+value);
}
System.out.println();
map.remove("임영웅");
System.out.println("총 Entry 수 : "+map.size());
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
//키와 value의 값을 다 가지고 옴
Iterator<Map.Entry<String, Integer>> entryIterator= entrySet.iterator();
while (entryIterator.hasNext()) {
Map.Entry<String, Integer> entry = entryIterator.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("\t"+key+":"+value);
}
System.out.println();
map.clear();
System.out.println("총 Entry 수 : "+map.size());
}
}
(추후 추가 예정