티스토리 뷰
Done
-
자바의 정석 지네릭스 https://bong-f.tistory.com/157
-
자바의 정석 ch 8 유용클래스 일부
Learned
equals(), hashCode()
- equals ()기본형은 값을 비교, 참조형은 객체의 주소를 비교
- hashCode () 객체의 주소를 int로 변환해서 반환
- equals 결과가 true면 hashCode 값 비교도 같아야돼
- 그래서 equals 오버라이딩 해주면 hasCode 도 오버라이딩 해줘야 함
- equals() 오버라이딩 참조변수의 값 비교하고 싶을 때 오버라이딩 해줌
String 클래스
- 내용 변경 불가
- 문자열 리터럴 : String str = "abc"; 로 하면 같은 객체를 여러 참조변수가 가리킬수 있어 메모리 절약. 매번 new String해주지마. 메모리 낭비
- 문자열 리터럴 = 상수, constant pool에 저장된다.
- 바람직한 초기화 String s = ""; char c = ' ';
String 클래스의 생성자의 메서드
- String(char[] value) <> toCharArray()
- charAt // Stirng s = "hello"; char c = s.charAt(1);
- compareTo // "abc".compareTo("abc"); 양수, 음수, 0 반환 ( a-a, b-b, c-d 이런식으로 비교)
- concat 문자열 결합 // string.concat("word");
- contains
- startswith, endswith
- eqqualsIgnoreCase
- indexOf(ch), indexOf(string)
- indexOf(ch, int pos) pos는 찾기시작할 위치, 못찾으면 -1
- lastIndexOF(ch) lastIndexOf(string) 끝부터 찾기
- split(구분자) 배열 반환
- spliit(구분자, int limit) 최대 몇개로 나눌지
- substring( int begin, int end) begin부터 end까지(미포함) 의 위치의 문자열 얻기
- toLowerCase, toUpperCase
- trim 양쪽 끝 공백만 제거
- valuOf 만능키 성능은 느림 >>다 문자열로 >> 문자열을 다른 형으로
문자열과 기본형 간의 변환
- 숫자를 문자열로
(1) "" 공백 더하기
(2) String.valueOf(숫자)
: 1번이 더 편리하다. 1. 쓰다가 성능이 안나오면 2 쓰기 - 문자열을 숫자로
: (1) "" 공백 더하기
;(2) String.valueOf(숫자) ( returb Integer라는 참조형이지만 오토박싱으로 int 참조변수로 받아줄 수 있음)
: 1번이 더 편리하다. 1. 쓰다가 성능이 안나오면 2 쓰기
지네릭스
-
런타임에러를 컴파일 에러로 끌고 오기 위한 여러 방법 중에서 하나다.
: 타입을 지정해줘서 컴파일시 이 타입과 맞지 않으면 컴파일 에러로 잡으려고 -
장점. 타입이 정해져 있으니 형변환 코드 생략 가능하는 등 중복된 코드를 많이 줄여줄 수 있다.
-
규칙
-
참조변수와 생성자의 대입된 타입은 일치해야 한다. ( 조상 - 자손 관계도 안된다)
: 단, 클래스 간의 다형성은 여전히 성립한다ArrayList<Product> list = newArrayList<Product>(); list.add(new TV()); 가능
: 매개변수의 다형성도 성립한다
-
static멤버에 타입 변수 타입은 사용 불가하다 ( 모든 인스턴스에 공통으로 사용되어야 하는데)
class Box<T> { static T item; // 불가
- new T 불가
-
-
넣을 수 있는 타입에 제한 두기
- T extends Fruit같이 대입할 수 잇는 타입을 제한할 수 있다.
-
와일드 카드 <?>
- 하나의 참조변수로 대입된 타입이 다른 객체를 참조 가능하게 한다
- 메서드의 매개변수에 와일드 카드를 사용 가능
enum 열거형
-
관련된 상수들을 묶어 놓은 것, 자동으로 값이 부여된다.
class Direction { EAST, WEST, SOUTH, NORTH }
-
EAST, WEST, SOUTH, NORTH에 자동으로 0, 1, 2, 3 값 부여된다
-
사용방법
- Direction dir; dir = Direction.EAST;
- Direction 객체끼리 값을 비교할 수 있다. equals와 == 모두 가능, compareTo 가능, 비교 연산자 불가
-
열거형의 조상 Enum의메소드 values(), valueOf 사용할 수 있다
-
원하는 값을 부여할 수도 있다. () 괄호 사용
enum Direction { EAST(1), WEST(5), SOUTH(-1), NORTH(10); private final int value; Direction(int value) { this.value = value; } }
-
여러개의 값을 부여가능 ex) EAST(1, ">")
애너테이션
- @Override
처럼 프로그램에는 영향을 주지 않으나 컴파일러나 다른 프로그램에게 유용한 정보를 제공. 형식이 틀리면 틀리다고 말해줌
Bad
- 조금 여유있게 했다.
Good
- 햇빛을 보려고 했다.
Feeling
- 길을 잃었다. 빠빠밤. 눈을 감고 걸어도 맞는 길을 골랐으면 _
- 자바의 정석을 가볍게나마 다봐간다.조금 더 구체적인 설명이 있는 자바책 하나를 구입하고 싶은데 고민인다.
Todo
generics, < T extends 특정클래스> < ? extends T> 차이 모르겠다
-
지네릭스에서 < T extends 특정클래스> : (특정클래스의 자손만 타입으로 지정가능) 과 와일드카드 < ? extends T> (T와 그 자손들만 가능) 으로 제한을 두는데 이 두가지 차이를 모르겠다
In isolation, there isn't much difference. However, two instances of List<? extends Number> in a single context are completely unrelated, while two instances of List in a single context refer to the same T and the same interface.
- 이정도로 이해해야 할까.. instances 들 끼리의 관련성 https://stackoverflow.com/questions/60536437/what-is-the-difference-between-extends-base-and-t-extends-base/60585268 https://stackoverflow.com/questions/18187005/java-generic-type-difference-between-list-extends-number-and-list-t-exten
You cannot use wildcard bounds while creating a generic type. You have to use type parameter bounds.
-
그리고 와일드 카드는 제네릭 타입 생성할 때 못쓴단 애긴가? 파라미터로만?
https://stackoverflow.com/questions/18384897/what-is-difference-between-extends-object-and-e-extends-object -
우선 활용예제를 보면,
\\ T extends
class FruitBox {}
일 때
FruitBox fruitBox = new FruitBox();
FruitBox fruitBox = new FruitBox();
으로, 일단, 한 문장 안에서 참조변수의 타입과 생성자의 타입이 일치한다.
\\ ? extends
ArrayList<? extends Product> list = new Arraylist();
ArrayList<? extends Product> list = new ArrrayList
();
으로 하나의 참조변수 형식으로 다양한 타입을 넣은 ArrayList를 받아준다.
T extends가 이거 생성할 때는 이것 포하 자손 클래스만 돼! 라고 제약을 걸어둔 느낌이라면
와일드카드는 이렇게 쓰면 이것도 받을 수 있고 저것도 받을 수 있어 로 열어둔 느낌
- 이런 느낌적인 느낌으로 이해했다.
'기타 > TIL' 카테고리의 다른 글
210206 - 07 토일 TIL (1) | 2021.02.05 |
---|---|
210204 목 TIL (0) | 2021.02.04 |
210202 화 TIL (0) | 2021.02.02 |
210201 월 TIL (0) | 2021.02.01 |
210129 금 TIL (0) | 2021.01.29 |
- Total
- Today
- Yesterday
- spring-boot-qna
- Gitignore
- SQL코딩테스트
- arraylist
- 백준
- array
- Stream
- Queue
- 순열조합
- 그래프이론
- 프로그래머스lev3
- 힙
- 프로그래머스lev1
- Sort
- 최단경로
- thread
- JdbcTemplate
- 우선순위큐
- 동빈북
- 예외
- 프로그래멋lev2
- 프로그래머스lev2
- FLASK
- Stack
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |