일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SQL쿡북
- 혼공SQL
- 인덱스
- 자바
- 네트워크
- 이펙티브자바
- 스프링부트와AWS로혼자구현하는웹서비스
- vue.js
- aop
- jpa
- 이펙티브 자바
- java
- AWS RDS
- 도메인 주도 개발 시작하기
- mysql
- 알고리즘
- 인프런김영한
- 기술면접
- 자바스터디
- react
- AWS
- DDD
- 인프런백기선
- CleanCode
- 이팩티브 자바
- 자바예외
- MariaDB
- 자료구조
- 클린코드
- 알고리즘분석
- Today
- Total
목록이펙티브 자바 (6)
기록이 힘이다.
-컴파일 에러를 신경쓰지 않아도 되며, -try-catch로 감싸거나 -메서드 선언부에 선언하지 않아도 된다. -그렇다면 우리는 비검사 예외만 쓰면 되는걸까? 검사 예외는 왜 있는 것일까? UncheckedException 예제 public class MyApp{ public void hello(){ System.out.println("hello"); throw new MyException(); } public static void main(String[] args){ MyApp myApp = new MyApp(); myApp.hello(); } } 편리하다는 것을 이유로 사용하면 안된다. 왜 잡지 않은 예외를 메서드에 선언해야 하는가? -메서드에 선언한 예외는 프로그래밍 인터페이스의 일부다. 즉, 해당..
지역변수의 유효 범위를 최소로 줄이면 코드 가족성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 지역변수의 범위를 줄이는 가장 강력한 기법은 역시 ‘가장 처음 쓰일 때 선언하기’다. 컬렉션이나 배열을 순회하는 권장 관용구 for(Element e: c){ ... } 반복자를 사용해야 하는 상황이면 for-each 문 대신 전통적인 for문을 쓰는 것이 낫다. for(Iterator i = c.iterator(); i.hasNext();){ Element e = i.next(); ... } for문은 변수 유효 범위가 for문의 범위와 일치하여 똑같은 이름의 변수를 여러 반복문에서 써도 서로 아무런 영향을 주지 않는다. Iterator i = c.iterator(); while(i.hasNext()){ ..
Comparable 인터페이스의 유일무이한 메서드인 compareTo를 알아보자. 성격은 두 가지만 빼면 Object의 equals와 같다. compareTo는 단순 동치성 비교에 더해 순서까지 비교할 수 있으며, 제네릭하다. Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 있음을 뜻한다. Arrays.sort(a); 검색, 극단값 계산, 자동 정렬되는 컬렉션 관리도 역시 쉽게 할 수 있다. public class WordList{ public static void main(String[] args){ Set s = new TreeSet(); Collections.addAll(s, args); System.out.println(s); } } 명령줄 인수들을 (중복은 제거하..

Cloneable 인터페이스는 Object의 protected 메서드인 clone의 동작 방식을 결정한다. Cloneable의 경우에는 상위 클래스에 정의된 protected 메서드의 동작 방식을 변경한 것이다. clone규약 x.clone() != x 반드시 true x.clone().getClass() == x.getClass() 반드시 true x.clone().equals(x) true가 아닐 수도 있다. 불변 객체라면 다음으로 충분하다. Cloneable 인터페이스를 구현하고 clone 메서드를 재정의한다. clone 메서드는 사실상 생성자와 같은 효과를 낸다. 즉, clone은 원본 객체에 아무런 해를 끼치지 않는 동시에 복제된 객체의 불변식을 보장해야 한다. 그래서 stack의 clone 메..
-toString은 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야 한다. -Object의 toString은 클래스이름@16진수로 표시한 해시 코드 -객체가 가진 모든 정보를 보여주는 것이 좋다. -값 클래스라면 포맷을 문서에 명시하는 것이 좋으며 해당 포맷으로 객체를 생성할 수 있는 정적 팩터리나 생성자를 제공하는 것이 좋다. -toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하는 것이 좋다. -경우에 따라 AutoValue, lombok 또는 IDE를 사용하지 않는게 적절할 수 있다. package me.whiteship.chapter02.item12; import lombok.ToString; // PhoneNumber에 toString 메서드 추가 (75쪽) p..
핵심 정리: equals를 재정의 하지 않는 것이 최선 다음의 경우에 해당된다면 equals를 재정의 할 필요가 없다. 각 인스턴스가 본질적으로 고유하다. ex)enum 인스턴스의 '논리적 동치성'을 검사할 필요가 없다. 상위 클래스에서 재정의한 equals가 하위 클래스에도 적절하다. 클래스가 private이거나 package-private이고 equals 메서드를 호출할 일이 없다. 핵심 정리: equals 규약 반사성: A.equals(A) == true 대칭성: A.equals(B) == B.equals(A) CaseInsensitiveString package me.whiteship.chapter02.item10; import java.util.ArrayList; import java.util...