분류 전체보기
-
Item 15. 클래스와 멤버의 접근 권한을 최소화하라백수의 개발/이펙티브 자바 2019. 9. 30. 12:00
잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 오직 API를 통해서만 다른 컴포넌트와 소통하며, 서로의 내부 동작 방식에는 전혀 개의치 않는다. 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다. 정보 은닉의 장점 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다. 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 컴포넌트로 교체하는 부담도 적기 때문이다. 정보 은닉 자체가 성능 향상을 시키지는 않지만, 성능 최적화에 도움을 준다. 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화할 수 있도록 하기 때문이다. 소프트웨어의 재사용성을 높인다. 외부에 거의 의존하지 ..
-
Item 14. Comparable을 구현할지 고려하라백수의 개발/이펙티브 자바 2019. 9. 29. 19:45
Comparable의 compareTo()는 단순 동치성 비교뿐만 아니라 순서까지 비교할 수 있으며, 제네릭하다. 따라서 Comparable을 구현했다는 것은 해당 클래스의 순서가 있음을 의미한다. 그로 인해 아래와 같이 간단하게 정렬을 사용할 수 있는 객체가 된다. Arrays.sort(a); CompareTo 메서드의 일반 규약 이 객체와 주어진 객체의 순서를 비교한다. 이 객체가 주어진 객체보다 작으면 음의 정수(-1)를, 같으면 0을, 크면 양의 정수(1)를 반환한다. 이 객체와 비교할 수 없는 타입이 주어지면 ClassCaseException을 던진다. 1. 대칭성 Comparable을 구현한 클래스는 모든 x, y에 대해 sgn(x.compareTo(y)) == -sgn(y.compareTo(..
-
[티스토리] 구글 애드센스 신청하기백수의 일상 & 잡담/티스토리 2019. 9. 4. 16:53
오늘은 구글 애드센스 신청하는 방법에 대해 작성하려고 한다. 먼저 구글에 구글 애드센스를 검색해보자. 구글 애드센스를 들어가서 아래처럼 블로그 주소와 이메일을 작성해주자. 애드센스 계정이 없으면, 애드센스 계정도 만들어주자. 계정을 만들었으면 구글 애드센스 페이지에서 세부 정보들을 입력해주자. 그리고 전화번호 본인 인증까지 해주자. 이 절차가 끝나면 아래와 같은 화면이 나온다. 이제 본격적으로 생성된 구글 애드센스를 블로그에 적용시킬 차례이다 빨간색 박스를 한 스크립트 부분을 복사해서 아래 절차대로 티스토리에 적용해주면 된다.. 블로그 관리 창에서 '스킨 편집 > html 편집' 으로 들어가 복사한 스크립트를 아래와 같이 적용시켜주자. 이렇게 스크립트 복사까지 마쳤다면, 아까 스크립트를 복사했던 페이지로..
-
Item 13. clone 재정의는 주의해서 진행하라백수의 개발/이펙티브 자바 2019. 8. 27. 20:32
Cloneable 인터페이스 Cloneable은 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스(mixin interface)이다. 그러나 clone 메서드가 Cloneable이 아닌 Object에 protected로 명시되어 있다. 그래서 Cloneable을 구현한다고 해서 clone을 호출할 수 없다. 그럼에도 불구하고 Cloneable 방식은 널리 사용되고 있어 올바르게 사용하는 방법을 알아보자. Cloneable의 역할 메서드 하나 없는 Cloneable 인터페이스는 Object의 protected 메서드인 clone의 동작 방식을 결정한다. Cloneable을 구현한 클래스의 인스턴스에서 clone을 호출하면 그 객체의 필드들을 모두 복사한 객체를 반환하며, 그렇지 않은 클래스의 인스..
-
Item 12. toString을 항상 재정의하라백수의 개발/이펙티브 자바 2019. 8. 22. 17:38
Object의 기본 toString 메서드는 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없다. 일반적으로 TestClass@a7cd(클래스이름@16진수로 표시된 해시코드)와 같이 보여줄 뿐이다. 그래서 toString을 재정의하여 사람이 읽기 쉬운 형태의 유익한 정보를 반환할 필요가 있다. toString를 재정의하는 이유 전화번호를 저장하는 PhoneNumber객체가 있을 때, 이를 출력한다고 가정해보자. PhoneNumber Jeny = new PhoneNumber(707, 867, 5309); System.out.println("Jeny PhoneNumber : " + Jeny); 이와 같이 했을 때, 'Jeny PhoneNumber : PhoneNumber@abcd'와 'Jeny..
-
Item 11. equals를 재정의하려거든 hashCode도 재정의하라백수의 개발/이펙티브 자바 2019. 8. 20. 17:43
equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. 이는 HashMap이나 HashSet같은 컬렉션의 원소로 사용할 때 문제를 일으킬 수 있기 때문이다. hashCode의 규약 equals에 비교되는 정보가 변경되지 않았다면, hashCode 메서드는 일관되게 항상 같은 값을 반환해야 한다.(단, 애플리케이션 재실행 시 값이 달라져도 상관없다.) equals가 두 객체를 같다고 판단했다면, 두 객체의 hashCode도 동일해야 한다. equals가 두 객체를 다르다고 판단하더라도, 두 객체의 hashCode가 다른 값을 반환할 필요는 없다.(단, 다른 값을 반환해주어야 해시테이블의 성능이 향상된다.) hashCode 재정의가 안되거나, 잘 못된 경우 대부분 hashCode 재정의 ..
-
Item 10. equals는 일반 규약을 지켜 재정의하라백수의 개발/이펙티브 자바 2019. 8. 13. 17:51
equals 메서드는 객체 내의 정보들에 대한 동등성을 비교하기 위한 메서드이다. 비교 가능한 객체의 경우 equals 메서드를 잘못 작성하게 되면 의도하지 않은 결과가 초래되니, equals를 재정의하는 방법에 대해 알아보자. equals를 재정의하지 않아도 되는 경우 1. 각 인스턴스가 본질적으로 고유하다. 데이터나, 객체의 정보를 표현하는 것이 아닌, 동작하는 개체를 표현하는 클래스가 이에 속한다.ex) Thread 2. 인스턴스의 '논리적 동치성'을 검사할 일이 없다. java.util.regex.Pattern은 Pattern의 인스턴스가 같은(동치성) 정규표현식을 나타내는지 검사할 필요가 없다. 3. 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다. 대부분의 Set 구현체들..
-
Item 9. try-finally보다는 try-with-resource를 사용하라백수의 개발/이펙티브 자바 2019. 8. 9. 19:12
자바 라이브러리에는 InputStream, OutputStream, java.sql.Connection등 close메서드를 호출해 직접 닫아줘야 하는 자원이 많다. 이러한 자원을 닫기 위한 수단으로 try-finally가 사용되었다. try-finally는 더 이상 자원을 회수하는 최선의 방책이 아니다! 아래와 같은 try-finally를 통해 자원을 닫을 수 있다. static String firstLineOfFile(String path) throws IOException{ BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); } } 그러나 자원을 하나..