21년 1월 24일
한 일
-
자바의 정석 Chapter 12 지네릭스, 열거형, 애너테이션 중 지네릭스를 모두 읽었다.
-
지네릭스는 클래스 또는 메소드에 타입을 파라미터처럼 전달하여(타입 변수) 타입을 보다 자유롭게 쓸 수 있게 해준다.
-
지네릭스의 장점은 다음과 같다.
- 타입 안정성을 제공한다.
- 타입체크와 형변환을 생략할 수 있어 코드를 간소화해준다.
-
지네릭 메소드에 선언된 타입 변수와 지네릭 클래스에 선언된 타입 변수는 다르다.
-
지네릭 메소드에 선언된 타입 변수는 해당 메소드의 지역 변수와 같은 우선순위를 갖는다.
-
즉, 지네릭 클레스에 T라는 타입변수가 선언되어 있고, 지네릭 메소드에 T라는 타입변수가 있으면,
해당 메소드 내의 T는 지역변수나 마찬가지인 지네릭 메소드의 T를 의미한다.
-
-
와일드 카드에 대해 배웠다.
-
와일드 카드는 ?로 정의되며 <?> 라는 건 <? extends Object>를 생략한 것이다.
-
와일드 카드는 참조변수 타입에 선언되는데,
<? extends Fruit>라면 해당 참조변수의 인스턴스에는 타입 변수로 Fruit와 Fruit를 상속한 클래스 타입이 들어갈 수 있고,
<? super Fruit>일 경우에는 타입 변수로 Fruit와 Fruit가 상속한 부모 클래스 타입이 들어갈 수 있다.
-
와일드 카드로 선언된 참조변수 간에는 컴파일러가 판단하여 형변환을 할 수 있게 해준다.
-
Fruit와 Fruit를 상속 받은 Apple, Grape가 있다고 하자.
ArrayList<Fruit> fruitList = new ArrayList<>(); ArrayList<Apple> appleList = new ArrayList<>(); appleList = (ArrayList<Apple>)fruitList; // 에러; fruitList = (ArrayList<Fruit>)appleList; // 에러; ///////////////////////////////////////////////////////////////////////// ArrayList<? extends Fruit> fruitList = new ArrayList<>(); ArrayList<? extends Apple> appleList = new ArrayList<>(); appleList = (ArrayList<? extends Apple>)fruitList; //경고; fruitList는 Apple로 형변환할 수 있는 타입이 들어갈수도 있으므로 에러로 막지는 않음 fruitList = (ArrayList<? extends Fruit)appleList; //성공; appleList는 Fruit로 형변환할 수 있는 타입이 들어가있으므로 경고하지 않음 ///////////////////////////////////////////////////////////////////////// ArrayList<? extends Grape> grapeList = new ArrayList<>(); ArrayList<? extends Apple> appleList = new ArrayList<>(); appleList = (ArrayList<? extends Apple>)grapeList; //에러; grapeList는 Apple로 형변환할 수 있는 타입이 들어갈 수 없으므로 에러 grapeList = (ArrayList<? extends Grape)appleList; //에러; appleList는 grape로 형변환할 수 있는 타입이 들어갈 수 없으므로 에러
-
-
-
-
프로그래머스 문제 타겟넘버, 네트워크 문제를 풀었다.
-
타겟넘버:
- 간단한 DFS/BFS문제이다.
- 주어진 숫자들을 +또는 -로 연산해가면서 마지막에 target과 같을 경우 경우의 수를 늘려준다.
-
네트워크:
-
DFS/BFS로 풀수도 있고, union-find알고리즘으로 풀 수도 있다.
-
두 가지 방법으로 모두 풀어봤다.
-
union-find의 경우는 computers매개변수를 순회하며 1인경우 두 노드를 하나의 집합으로 만들어준다.
-
마지막에 parent 배열을 순회하며 각 parent배열 값을 다시 getParent(parent[n])로 확인하여 HashSet(집합 명 Set)에 넣어준다.
-
HashSet의 size가 네트워크 개수가 된다.
-
-
DFS/BFS로 푸는 방법은 그냥 areaNum을 늘려주며 area가 정해지지 않은 node의 area를 DFS/BFS로 areaNum으로 정해준다.
-
-
잘못한 것
- TCP/IP 쉽게 더쉽게 읽기라는 목표를 점점 뒤로 미루고 있다.
잘한 것
- 주말이라 쉬엄쉬엄했지만 꾸준함의 중요성을 인지하며 공부하고 있다.
느낌
- 제너릭스는 생각보다 어렵지 않았다.
- 자바 API를 읽을때마다 헷갈렸던 ?라는 와일드카드를 알게되어서 기분이 좋았다.
할 일
- 코드스쿼드 미션 하기
- 프로그래머스 문제 풀기
- 자바의 정석 열거형 읽기
- TCP/IP 쉽게 더 쉽게는 자바의 정석 1회독 한 후 읽어야 할 것 같다.