일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 자바 필터
- 수정자주입
- 스프링di
- 스프링
- fetch join
- open-session-in-view
- ioc컨테이너
- 그래프큐엘
- 기능적 요구사항
- 정적팩토리메서드
- jpa no session
- Atomicity
- kotlin 리팩터링
- kotlin ::
- IOC
- Spring
- 동적파라미터
- 스프링 시큐리티 설정
- 생성자주입
- java predicate
- 토비의 스프링
- method refetence
- spring formatter
- 소프트웨어의 품격
- 비기능적 요구사항
- jpa lazy
- 스프링 포매터
- 스프링부트 도커
- 스프링시큐리티
- 도커 이미지 빌드
- Today
- Total
목록분류 전체보기 (109)
공부기록
equals를 재정의한 클래스 모두에서 hashCode도 재정의해야한다. - 그렇지않으면 hashCode 일반 규약을 어기게 되어 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으킬 것이다. - 일반규약 1. equals 비교에 사용되는 정보가 바뀌지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode메서드는 호출할 때 마다 일관되게 항상 같은 값을 반환해야한다. 2. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 똑같은 값을 반환해야한다. 3. equals(Object)가 두 객체를 다르다고 판단하더라도, 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없다. 단, 다른 객체에 대해서는 다른 값을 반환해야 해시..
equals를 재정의 하지 않아도 되는 경우. 각 인스턴스가 본질적으로 고유하다. 예를 들어 Thread처럼 값을 표현하는 게 아닌, 동작하는 개체를 표현하는 클래스 인스턴스의 논리적 동치성을 검사할 일이 없다 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다. 예를들어 Set구현체는 AbstractSet이 구현한 equals를 상속받아 쓴다. 클래스가 private이거나 default이고 equals메서드를 호출할 일이 없다. equals 를 호출하는 걸 막으려면 다음과 같이 구현하자. @Override public boolean equals(Object o) { throw new AssertionError(); } equals를 재정의 해야하는 경우 논리적 동치성을 확인해야하는데 ..
try-finally보다는 try-with-resources를 사용하라 try-with-resources 는 AutoCloseable인터페이스를 구현해야한다. 자바 라이브러리와 많은 서드파티 라이브러리들의 수 많은 클래스와 인터페이스가 이미 AutoCLoseable 을 구현한 상태다. 닫아야 하는 자원을 쓰는 클래스를 만들어야한다면 AutoCloseable 을 반드시 구현하자. try-with-resources 의 기본 형태 try(InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dst)){ ... }catch(IOException e) { ... }finally { ... }
다 쓴 객체 참조를 해제하라 자바는 가비지컬렉터 덕분에 메모리를 직접 관리하지 않아도 된다. 그렇다고 메모리 관리에 신경쓰지 않아도 된다는 뜻은 아니다. Stack 구현한 간단한 코드 중 일부 (메모리 누수가 일어난다.) ... public Object pop() { if(size == 0) { throw new EmptyStackException(); } return elements[--size]; } ... 이 코드에서는 스택이 커졌다가 줄어들었을 때 스택에서 꺼내진 객체들을 GC가 회수하지 않는다. 스택이 그 객체들의 다 쓴 참조를 여전히 가지고 있기 떄문. 다음은 그것을 개선한 코드다. public Object pop() { if(size == 0) { throw new EmptyStackExce..