TIL(2022.02.22~23)

조지성·2022년 2월 23일
0

TIL

목록 보기
37/78
post-thumbnail

오브젝트 클래스

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

컬렉션

컬렉션 vs 배열

  • 컬렉션 : 가변적, 동적, 데이터 읽는게 느리다 , 추가가 가능
  • 배열 : 정적 , 데이터 읽는게 빠르다 , 연속된 공간이 없는 경우가 있기 때문에 추가 할 수 없다.
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();
			}
		}
	}
}

profile
초보 개발자의 성장기💻

0개의 댓글