TIL(2022.02.22~23)


オブジェクトクラス
Objectクラス:すべてのクラスの親
package ch06;

//Object는 모든 클래스의 부모 클래스

class Dog{
	String name = "토토";
}

class Cat{
	String name = "야옹이";
}

public class ObjectEx01 {
	public static void main(String[] args) {
		Object o1 = new Dog(); // 다형성
		Object o2 = new Cat();
		
		Dog d1 = (Dog)o1; //다운캐스팅울 통해서 Dog에 접근할 수 있도록함
		
		System.out.println(d1.name);
	}
}
package ch06;

class 궁수{
	String name = "궁수";
}
class 전사{
	String name = "전사";
}


public class ObjectEx02 {
	public static void main(String[] args) {
		Object[] s1  =  new Object[2];
		
		s1[0] = new 궁수();
		s1[1] = new 전사();
		
		궁수 g1 = (궁수) s1[0];
		전사 g2 = (전사) s1[1];
		
		System.out.println(g1.name);
		System.out.println(g2.name);
	}
}
ジェニーリック
package ch06;


//경우에따라서 문자열을 담고, 숫자를 담고
class 바구니{
	Object data;
}

//Object클래스를 사용
//문자열과 숫자는 다운캐스팅 필요 없어
public class GenericEx01 {
	public static void main(String[] args) {
		바구니 s1 = new 바구니();
		s1.data = 1;
		System.out.println(s1.data);
		
		바구니 s2 = new 바구니();
		s2.data = "문자열";
		System.out.println(s2.data);
	}
}
package ch06;

class 호랑이{
	String name = "호랑이";
}

class 사자 {
	String name = "사자";
}


//경우에따라서 호랑이 사자를 담음
class 큰바구니<T> {
	T data;
}

//제네릭 :  타입이 정해져 있지 않을 때 제네릭을 사용 , 다운캐스팅 필요없다.
public class GenericEx02 {
	public static void main(String[] args) {
		큰바구니<호랑이> s1 = new 큰바구니<>();
		s1.data = new 호랑이();
		System.out.println(s1.data.name);
		
		큰바구니<사자> s2 = new 큰바구니<>();
		s2.data = new 사자();
		System.out.println(s2.data.name);
	}
}
ワイルドカード
  • ワイルドカード=>?=>何なのか分からない!
  • < ? extends Object >
  • package ch06;
    
    abstract class{
    	abstract String getName();
    }
    
    class 농구공 extends{
    	private String name = "농구공";
    
    	//자식이 부모의 메서드와 동일한 것을 들고 있으면
    	// 부모의 메서드가 오버라이드된다.
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    }
    
    class 축구공 extends{
    	private String name = "축구공";
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    
    
    class 가방<T>{
    	private T data;
    	
    	public T getData() {
    		return data;
    	}
    	
    	public void setData(T data) {
    		this.data = data;
    	}
    }
    
    public class GenericEx03 {
    	
    	//와일드카드를 사용해서 어떤 클래스라도 반환할수 있도록 함
    	static 가방<? extends> 꺼내기(int time) { // 9시 => 축구 , 12시 => 농구
    		if(time == 9) {
    			System.out.println("축구공이 담겼어요");
    			축구공 g2 = new 축구공();//축구공하나 사기
    			가방<축구공> b2= new 가방<>();//축구공 가방 하나사기
    			b2.setData(g2); // 축구공을 가방안에 넣기
    			return b2;
    		}else {
    			System.out.println("농구공이 담겼어요");
    			농구공 g1 = new 농구공(); // 농구공 사기
    			가방<농구공> b1= new 가방<>(); // 농구공가방 사기
    			b1.setData(g1); //가방안에 농구공 넣기
    			return b1;
    		}
    	}
    	
    	public static void main(String[] args) {
    		가방<? extends> r1 = 꺼내기(9);
    		가방<? extends> r2 = 꺼내기(12);
    		
    	
    		r1.getData().getName();	
    		r2.getData().getName();
    	}
    }
    
    コレクション
    コレクションと配列
  • セット:可変、動的、データ読み取りが遅い、
  • を追加できる
  • 方式:静的で、データの読み取り速度が速く、連続空間がなく、追加できない場合がある.
  • package ch06;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    
    public class CollectionEx01 {
    	public static void main(String[] args) {
    		//int double char boolean => 기본자료형(값)
    		//String,커스텀자료형(클래스) => 래퍼런스자료형(주소)
    		//래핑클래스 = Integer,Double ,Character , Boolean
    		ArrayList<Integer> c1 = new ArrayList<>(); 
    		
    		c1.add(1);
    		c1.add(2);
    		c1.add(3);
    		
    		//System.out.println(c1.get(0));
    		
    		int size = c1.size();
    		//for문
    		for (int i = 0; i < size; i++) {
    			System.out.println(c1.get(i));
    		}
    	}
    }
    
    山紅
    package ch07;
    
    //SubThread -> Runnable (다형성)
    class SubThread implements Runnable{
    
    	// 자바의 서브 스레드
    	@Override
    	public void run() {
    		for (int i = 1; i < 11; i++) {
    			try {
    				Thread.sleep(1000);
    				System.out.println("서브 스레드 : "+i);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	
    }
    
    public class ThreadEx01 {
    	
    	//자바의 메인 스레드 
    	public static void main(String[] args) {
    		
    		SubThread st = new SubThread();
    		Thread t1 = new Thread(st); // 타겟 선정
    		t1.start(); // run 메서드 실행
    		for (int i = 1; i < 11; i++) {
    			try {
    				Thread.sleep(1000);
    				System.out.println("메인 스레드 : "+i);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }