2022.08.03 -JAVA

sofia·2022년 8월 3일
0

JAVA

목록 보기
13/27
post-thumbnail

재네릭

선언시, <> 사용.
기본 타입에서 사용하지 않으며, 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);
	}
}

컬렉션:List, Set, Map 컬렉션

List

  • ArrayList

Set


Map


예제

예제 1

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
		
		

	}

}

예제2

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

		
		
		
	}

}

예제3

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();
	}

}

예제 4

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
//객체 있음
//비어 있음

예제5

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());
	}

}

복습 문제

(추후 추가 예정

0개의 댓글