일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바예외
- 자바
- 이팩티브 자바
- 네트워크
- 인프런백기선
- CleanCode
- DDD
- 클린코드
- MariaDB
- 혼공SQL
- 스프링부트와AWS로혼자구현하는웹서비스
- 알고리즘
- aop
- 인프런김영한
- SQL쿡북
- react
- 이펙티브 자바
- vue.js
- mysql
- java
- 도메인 주도 개발 시작하기
- 기술면접
- 자료구조
- 인덱스
- 알고리즘분석
- 자바스터디
- AWS RDS
- AWS
- 이펙티브자바
- jpa
- Today
- Total
목록인프런백기선 (11)
기록이 힘이다.
-컴파일 에러를 신경쓰지 않아도 되며, -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(); } } 편리하다는 것을 이유로 사용하면 안된다. 왜 잡지 않은 예외를 메서드에 선언해야 하는가? -메서드에 선언한 예외는 프로그래밍 인터페이스의 일부다. 즉, 해당..
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..
핵심 정리: hashCode 규약 - equals 비교를 사용하는 정보가 변경되지 않았다면 hashCode는 매번 같은 값을 리턴해야 한다. (변경되거나, 애플리케이션을 다시 실행했다면 달라질 수 있다.) - 두 객체에 대한 equals가 같다면, hashCode의 값도 같아야 한다. - 두 객체에 대한 equals가 다르더라도, hashCode의 값은 같을 수 있지만 해시 테이블 성능을 고려해 다른 값을 리턴하는 것이 좋다. 동작은 한다. @Override public int hashCode(){ return 42; } hashCode가 같으면 모두 같은 버킷에 들어간다. linked list 처럼 동작 --> hash값으로 꺼내기 때문에 효용의 가치가 없다. O(n)만큼 들어가서 알고리즘의 효율성이 ..
핵심 정리: 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...
Finalizer 공격 import java.math. BigDecimal; public class Account { private String accountId; public Account(String accountId){ this.accountId = accountId; if(accountId.equals("푸틴")){ throw new IllegalArgumentException("푸틴은 계정을 막습니다."); //finalizer를 통해 보낼 수 있다 } } public void transfer(BigDecimal amount, String to){ System.out.printf("transfer %f from %s to %s\n", amount, accountId, to); } } public..

-문자열 -사실상 동일한 객체라서 매번 새로 만들 필요가 없다. -new String("자바")을 사용하지 않고 문자열 리터럴 ("자바")을 사용해 기존에 동일한 문자열을 재사용하는 것이 좋다. public class Strings { public static void main(String[] args) { String hello = "hello"; //TODO 이 방법은 권장하지 않습니다. String hello2 = new String("hello"); String hello3 = "hello"; System.out.println(hello == hello2); //false System.out.println(hello.equals(hello2)); //true System.out.println(he..