JAVA 입문 시작

22.12.02 (불금) 제네릭

강준석 2022. 12. 2. 12:12
728x90

아 늦잠 잤다

 

제네릭클래스

 

package 제네릭;

public class NoGeneric<T> {
   
   //오브젝트로 처리한 이유는 어떤 자료형 타입을 사용할지 정하지 않았기 때문에
   
   T[] v; //오브젝트 자료형 타입은 어떤한 객체든 들어갈 수 있게끔 선언해준 것
   
   void set(T[] n) { //메인에서 호출한 무엇인가를 전달받아 클래스 변수인 v에다가 전달
   v = n;
   }
   
   T[] get() { //위에서 저장된 v를 전달
      return v;
   }
   
   void print() {
      for(T o : v) {
         System.out.print(o + " ");
      }
      System.out.println();
   }
}

 

 

 메인문

 

package 제네릭;

public class Sample01 {

   public static void main(String[] args) {
      
      //제네릭 설정할 때는 <자료형 타입> = new <> 처음에만 타입을 입력하면 된다.
      
      /**객체 생성 **/
      NoGeneric<String> nogen1 = new NoGeneric<>(); //String 문자열 타입 고정
      String[] ss = {"마스터이", "티모", "상남자강준석"}; //만든 배열을 위 객체로 전달
      
      /** 위에서 받은 배열값을 nogen으로 보낸다.**/
      nogen1.set(ss);
      nogen1.print();
      
      for(String o : nogen1.get()) {
         System.out.println(o + 1);
         
      }
      
      Integer[] ii = {1, 2, 3};
      
      NoGeneric<Integer> nogen2 = new NoGeneric<>();
      
      nogen2.set(ii);
      nogen2.print();
      
      for(Integer o : nogen2.get()) {
         
         System.out.print(o + 5);

         
      }
      

   }

}

결과

 

마스터이 티모 상남자강준석 
마스터이1
티모1
상남자강준석1
1 2 3 
678

 

 

예시1

 

메인클래스

 

package 제네릭;

import java.util.ArrayList;
import java.util.List;

public class Sample02 {

   public static void main(String[] args) {
      
      List<Member>list = new ArrayList<Member>();
      //<Member> : 제레릭처리, list는 Member클래스에 대한 객체만 넣을 수 있음.
      //Integer,Double,String 등등도 넣을 수 있음.
      
      /** 객체 생성 **/
      //객체 내부에는 name, id, password, age에 변수를 보관중
      
      Member mem1 = new Member();
      
      mem1.setName("마스터이");
      mem1.setId("aaa");
      mem1.setPassword("aa11");
      mem1.setAge(20);
      
      System.out.println(mem1);
      
  Member mem2 = new Member();
      
      mem2.setName("릴리야");
      mem2.setId("bbb");
      mem2.setPassword("aa22");
      mem2.setAge(26);
      
      System.out.println(mem2);
      
Member mem3 = new Member();
      
      mem3.setName("티모");
      mem3.setId("ccc");
      mem3.setPassword("aa33");
      mem3.setAge(1);
      
      System.out.println(mem3);
      
      list.add(mem1);
      list.add(mem2);
      list.add(mem3);
      
      for(int i =0; i<list.size(); i++) {
    	  
			System.out.println("이름 : " + (/* (Member) */list.get(i)).getName());
    	  //list는 순서가 있으므로 (i)번째 객체 / (Member)list.get(i) list는 Member클래스에서 만든 객체다라고 선언

								//Member를 주석처리한 이유 : 위에서 list를 이미 <Member>로 제네릭처리를 했기때문에
								//굳이 여기서(Member)list 선언처리를 하지않아두된다
			
    	  System.out.println("이름 : " + (/* (Member) */list.get(i)).getId());
    	  //list는 순서가 있으므로 (i)번째 객체 / (Member)list.get(i) list는 Member클래스에서 만든 객체다라고 선언
    	  System.out.println("이름 : " + (/* (Member) */list.get(i)).getPassword());
    	  //list는 순서가 있으므로 (i)번째 객체 / (Member)list.get(i) list는 Member클래스에서 만든 객체다라고 선언
    	  System.out.println("이름 : " + (/* (Member) */list.get(i)).getAge());
    	  //list는 순서가 있으므로 (i)번째 객체 / (Member)list.get(i) list는 Member클래스에서 만든 객체다라고 선언
      
      
      
      }		
      
      
     
    	  
      
      
      

   }

}

 

서브클래스

 

 

package 제네릭;

public class Member {
   
   /**Main에서 갖다 쓰지 못함 프라이빗 접근자에서는**/
   
   private String name;
   private String id;
   private String password;
   private int age;
   
   /** Member 안에 있는 값들을 리턴  **/
   @Override
   public String toString() {
      return "Member [name=" + name + ", id=" + id + ", password=" + password + ", age=" + age + "]";
   }
   
   
   /** 게터 메서드로 받게 되면 Main으로 주고 받고 가능 **/
   
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getId() {
      return id;
   }
   public void setId(String id) {
      this.id = id;
   }
   public String getPassword() {
      return password;
   }
   public void setPassword(String password) {
      this.password = password;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   
   
   
   
   

}

 

예시2

 

 

메인클래스

 

 

package 제네릭;

public class Main02 {

	public static void main(String[] args) {
		
		Generic2<String,Integer> gen = new Generic2<>();
		// 서브문의 K name(문자열),V id(정수)로 받기위해
		
		gen.set("문자열",10);
		//제네릭 설정 <String(문자열),Integer(정수)>으로 했기때문에
		//해당 조건에 맞지않는 값을 넣을시 오류

		System.out.println("이름"+gen.getName());
		System.out.println("아이디"+gen.getId());
	}

}

 

 

제네릭클래스

 

 

package 제네릭;

public class Generic2 <K,V> {
	
	K name;
	V id;
	
	void set(K name,V id) {
		this.name = name;
		this.id = id;
	}
	
	K getName() {
		return name;
	}
	V getId() {
		return id;
	}
	
	
	
}

 

List안에 Map을 넣기(제네릭사용)

 

package 제네릭;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//Arraylist에 map을 넣기

public class Sample03 {

	public static void main(String[] args) {

		// list 안에 Map을 넣음
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		// <key,value> //뒤에 <Map<String, Object>>는 <>로 생략가능

		Map<String, Object> hm = new HashMap<String, Object>();
		// Object : 최상위객채이므로 (int,string..)상관없이 아무거나 넣어두 오류안뜸

		hm.put("name", "티모");
		hm.put("id", "Teemo");
		hm.put("age", "10");
		// map에 값을 넣음

		list.add(hm);
		// hm=Map 이므로 list에 Map을 넣음

		System.out.println(hm);
		// 값을 넣은 hm = Map 출력

		hm = new HashMap<String, Object>();
		System.out.println(hm);
		// 새로운 hm을 만듬 그래서 출력하면 아무것도 안나옴

		hm.put("name", "마스터이");
		hm.put("id", "Master Lee");
		hm.put("age", "30");
		// map에 값을 넣음

		list.add(hm);
		// hm=Map 이므로 list에 Map을 넣음

		hm = new HashMap<String, Object>();
		

		hm.put("name", "강준석");							
		hm.put("id", "탑솔러 장인");
		hm.put("age", "26");
		// map에 값을 넣음
		                                /* 총3개의 객체(hm)를 생성해서 list의 3개의 방(hm의 k,v를 저장한 방)이 생김 */	
		list.add(hm);					/*Map(hm) 하나당  3가지 k,v(key,value)를 hm.put했기 때문에  Map(hm)에 3가지 (k,v)를 넣은 방이 3개 생김*/
									    /*결론적으로 list(Map방3개(Map의 k,v를 저장한 방3개)) */
		// hm=Map 이므로 list에 Map을 넣음

		for (int i = 0; i < list.size(); i++) {
			System.out.println(" 이름 : " + list.get(i).get("name"));
										//list.get(i): list(i)번방의 값을 가져온다 (hm의 i번방)
										//list.get(i).get("name") list(i)번방의 값(value)"name"을  가져온다 
			System.out.println(" ID : " + list.get(i).get("id"));
			System.out.println(" 나이 : " + list.get(i).get("age"));
		}			
		
		

	}

}

결과

 

{name=티모, id=Teemo, age=10}
{}
 이름 : 티모
 ID : Teemo
 나이 : 10
 이름 : 마스터이
 ID : Master Lee
 나이 : 30
 이름 : 강준석
 ID : 탑솔러 장인
 나이 : 26

728x90