Day 18

·2023년 6월 30일
0

Global_2023_2

목록 보기
17/56
post-thumbnail

1. 지네릭(Generic)이란?

  • "타입을 컴파일 시점에서 미리 정하고 들어감."
  • 클래스의 이름이 같아도 내용물이 다르면 완벽히 다른것
  • Object엔 ポリモーフィズム 때문에 다 들어가지만
    제네릭엔 설정한 타입만 들어간다(오남용을 막는다)

2. 아래가 나오도록 프로그래밍 하시오.

class DDBoxDemo {
public static void main(String[] args) {
DBox<String, Integer> box1 = new DBox<>();
box1.set("Apple", 25);

    DBox<String, Integer> box2 = new DBox<>();
    box2.set("Orange", 33);
    
    DDBox<DBox<String, Integer>, DBox<String, Integer>> ddbox = new DDBox<>();
    ddbox.set(box1, box2);

    System.out.println(ddbox);
}

}
/
Apple & 25
Orange & 33
/

class DBox<T1, T2> {
private T1 ob1;
private T2 ob2;
public void set(T1 ob1, T2 ob2) {
	this.ob1 = ob1;
	this.ob2 = ob2;
}
@Override
public String toString() {
	return ob1 + " & " + ob2;
}}class DDBox<T1, T2> {
private T1 ob1;
private T2 ob2;
public void set(T1 ob1, T2 ob2) {
	this.ob1 = ob1;
	this.ob2 = ob2;
}
@Override
public String toString() {
	return ob1 + "\n" + ob2;}}
    public class DDBoxDemo {
public static void main(String[] args) {
	DBox<String, Integer> box1 = new DBox<>();
    box1.set("Apple", 25);
    DBox<String, Integer> box2 = new DBox<>();
    box2.set("Orange", 33);
    DDBox<DBox<String, Integer>, DBox<String, Integer>> ddbox = new DDBox<>();
    ddbox.set(box1, box2);
    System.out.println(ddbox);
}}

3. 아래와 같이 출력값이 나오도록 프로그래밍 하시오.

public static void main(String[] args) {
Box box1 = new Box<>();
box1.set(99);

Box<Integer> box2 = new Box<>();
box2.set(55);

System.out.println(box1.get() + " & " + box2.get());
swapBox(box1, box2);
System.out.println(box1.get() + " & " + box2.get());

}

/
99 & 55
55 & 99
/

public static <T extends Number> void swapBox(Box<T> box1, Box<T> box2) {      
T temp;    
temp = box1.get();
box1.set(box2.get());
box2.set(temp); }}

4. 지네릭 메소드에 대하여 설명하시오.

  • 		class 뒤에 <T> 를 붙이면 클래스 전체 적용,
    		메소드 하나에만 적용하려면 public static <T> 형태
    그것이 제네릭 메소드

1. ArrayList, LinkedList 장점과 단점을 설명하시오.

  • LinkedList는 추가 / 삭제 할때 빠르고(주소만 바꾸면 되서)

    ArrayList는 느리다(새로 만들어서 for문을 새로 돌리기 때문)

  • ArrayList는 참조(조회)가 빠르고
    LinkedList는 느리다(일일히 주소를 확인해야 하기 때문)

  • 몇만건 수준에선 속도차이를 못느끼지만 몇억건부턴 차이가 느껴짐

2. List 특징은?

  • 순서가 있고 중복을 허용한다.

1. 쉬운걸 기본이라고 하지 않는다🔰

2. 자주 많이 쓰는 것을 기본적이라고 표현함♻

3. 대학교 컴공과 2학년 수준의 전공과목들의 내용을 기본이라고 표현 하는것 같음👨‍🎓


Point

  • toString을 오버라이드 하면 주소가 안나온다

  • 제네릭

    •    Box1<Apple> aBox = new Box1<Apple>();를
      	Box1<Apple> aBox = new Box1<>();로 써도 컴파일러가 자동입력
    • 제네릭 문법 = 데이터 타입을 파라미터화 시킴

    • @Override
      	public String toString() {
      		return left + " & " + right; 

      Orange(객체)가 들어가면 toString을 거쳐서 문자열로 맞춰짐

    • <T extends Number> // 넘버를 상속하는 T
    • 제네릭은 내가 쓰기보다 남의 코드를 이해하기 위한 것이라고 생각

  • 셋/리/큐/맵
    리스트, 맵을 가장 많이 씀 / 셋은 가끔 / 큐는 거의 안씀

    • 라이브러리 : .class들의 모임
  • 리스트

    • util에 있는걸 import 해야함

      • control + shift + o = util 생성
    • 배열은 반드시 처음에 용량을 정해야 한다

      • 연속된 공간이 필요(부족하면 즉사)
      • 3개 만들면 3개로 불변 (추가 add 불가)
        (메모리는 한정되어있기 때문)
    • ArrayList는 배열과 달리 추가 작업을 알아서 해준다

    • LinkedList의 원리는 아래와 같다

      		  class MyLinkedList{
      			int num;
      		 MyLinkedList myLinkedList;}
      
      		MyLinkedList my1 = new MyLinkedList();
      		my1.num = 10;
      		MyLinkedList my2 = new MyLinkedList();
      		my1.num = 11;
      		my1.myLinkedList = my2;

0개의 댓글