책
-
SQL 첫걸음 책 샀다.책/misc 2021. 7. 25. 00:51
당근마켓에서 6,000원 주고 구매 SQL 쿼리 안쓰다보니 기억이 안나서 한 번 다시 봤어야 해서 장바구니에 담아놓는 책인데 마침 당근마켓에 있길래 구매 완료.. 그래도 다른 책 보단 덜 어렵기를 바라며,, 책 산것들 중간 보고) 알고리즘 5장, 이펙 아이템 15 쯤 ... 8/11 다 읽음 전체적인 설명이 잘되어있어서 보기 좋다. 근데 쿼리문을 잘 사용하긴 어려워 보인다 왜냐면 책이 얇다보니 예제들이 별로 없다. JOIN 이나 어려운 쿼리들은 알아서 따로 추가로 공부해야 할 필요가 있다. 비슷한 책중에 데이터베이스 첫걸음 이라고 있는데 당근에 올라오면 사야겠따 ..
-
아이템14. Comparable을 구현할지 고려하라책/이펙티브자바 2021. 7. 25. 00:39
package java.lang; import java.util.*; public interface Comparable { public int compareTo(T o); } compareTo() 동치성비교 순서 비교 제네릭 Comparable 구현시 해당 클래스의 인스턴스들에는 자연적인 순서가 있음을 뜻한다. Arrays.sort(a); 와 같이 손쉽게 정렬이 가능하다. 자바 플랫폼 라이브러리의 모든 값 클래스와 열거타입이 Comparable을 구현했다. 이 인터페이스를 활용하는 수많은 제네릭 알고리즘과 컬렉션의 힘을 누릴 수 있다. 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 을 구현하자. compareTo() 규약 이 객체와 주어진 객체의 순서를 비교한..
-
아이템13. clone 재정의는 주의해서 진행하라책/이펙티브자바 2021. 7. 20. 19:15
다룰 내용 clone 메서드를 잘 동작하게끔 해주는 구현 방법 언제 그렇게 해야 하는지, 가능한 다른 선택지에 관해 Cloneable Interface 가 하는 일 메서드 하나 없는 인터페이스 Object.clone()의 동작 방식을 결정한다. Cloneable을 구현한 클래스의 인스턴스에서 clone을 호출하면 그 객체의 필드들을 하나하나 복사한 객체를 반환하며, 그렇지 않은 클래스의 인스턴스에서 호출시 CloneNotSupportedException을 던진다. clone 규약 // 이 객체의 복사본을 생성해 반환한다. // 복사의 정확한 뜻은 그 개체를 구현한 클래스에 따라 다를 수 있다. // true x.clone() != x // true x.clone().getClass() == x.getCl..
-
아이템12. toString을 항상 재정의하라책/이펙티브자바 2021. 7. 19. 17:07
toString 규약 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 나타내라 모든 하위 클래스에서 이 메서드를 재정의하라 Object.toString() public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } IDE에서의 toString() 재정의 // PhoneNumber.class @Override public String toString() { return "PhoneNumber{" + "areaCode= '" + areaCode + '\'' + ", prefix='" + prefix + '\'' + ", lineNum=..
-
아이템11. equals를 재정의하려거든 hashCode도 재정의하라책/이펙티브자바 2021. 7. 2. 21:03
equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 hashMap, hashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으킬 수 있다. hashCode 규약 equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메소드는 몇 번을 호출해도 같은 값을 반환해야 한다. equals()가 true 를 반환하면, 두 객체의 hashCode는 같은 값을 반환해야 한다. equals()가 false 를 반환해도, 두 객체의 hashCode가 다를 필요는 없다. 단, 다른 객체에 대해서는 다른 값을 반환해야 해시테이블의 성능이 좋아진다. 좋은 hashCod..
-
아이템10. equals는 일반 규약을 지켜 재정의하라책/이펙티브자바 2021. 7. 2. 19:00
아래에 상황 중 하나에 해당한다면 equals 는 재정의 하지 않는 것이 최선이다. 각 인스턴스가 본질적으로 고유하다. 값을 표현하는게 아니라 동작하는 개체를 표현하는 클래스 ex) Thread 인스턴스의 '논리적 동치성'을 검사할 일이 없다. 상위 클래스에서 재정의한 equals 가 하위 클래스에도 딱 들어맞는다. 예를들어 대부분의 Set, List 구현체들은 AbstractSet, AbstractList가 구현한 equals 를 그대로 사용한다. 클래스가 private 이거나 package-private이고 equals 메소드를 호출할 일이 없다. // euqals가 실수로라도 호출되는걸 막고싶을 때 @override public boolean equals(Obejct o) { throw new As..
-
아이템9. try-finally보다는 try-with-resources를 사용하라책/이펙티브자바 2021. 6. 26. 18:34
자바 라이브러리에는 close 메소드를 호출해 직접 닫아줘야 하는 자원이 많다. ex) InputStream, OutputStream, java.sql.Connection 자원 닫기는 클라이언트가 놓치기 쉬워 예측할 수 없는 성능 문제로 이어지기도 한다. 상당수가 finalizer 를 안전망으로 사용하지만 믿을만하지 못하다. (아이템 8) 이전에는 자원이 제대로 닫힘을 보장하는 수단으로 try-finally 를 주로 사용했다. try-finally // 자원이 1개인 경우 static String firstLineOfFile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try {..
-
아이템8. finalizer와 cleaner 사용을 피하라책/이펙티브자바 2021. 6. 26. 18:33
자바에서는 두 가지 객체 소멸 자를 제공한다. finalizer 오동작, 낮은 성능 예측할 수 없고 위험하여 일반적으로 불필요하다. 자신을 수행할 스레드를 제어할 수 없다. finalizer 공격에 노출되어 심각한 보안문제를 일으킬 수 있다. 생성자나 직렬화 과정에서 예외가 발생하면, 악의적으로 하위 클래스의 finalizer가 수행될 수도 있다. GC가 수집하지 못하게 막을 수 있다. 위와 같은 이유로 Java9 에서 deprecated 되었고 새로운 대안으로 cleaner를 소개한다. cleaner finalizer 보다는 덜 위험하다. 하지만 여전히 예측할 수 없고, 느리고, 일반적으로 불필요하다. 자신을 수행할 스레드를 제어할 수 있다. 공통사항 즉시 수행된다는 보장이 없다. 실행되기까지 얼마나 ..