이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 함수 객체 = 가지고 있는 메서드가 인자로 전달된 객체에 뭔가를 하는 메서드 하나뿐인 객체는 해당 메서드의 포인터 구실을 한다. 그런 객체를 함수 객체라고 부른다. class StringLengthComparator { public int compare(String s1, String s2) { return s1.length() - s2.length(); } }StringLengthComparator 객체에 대한 참조는 해당 비교자에 대한 함수 포인터 구실을 한다. 그 참조를 통해 임의의 문자열 두개를 서로 비교할 수 있다. 다시 말해서, Strin..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 때로는 두 가지 이상의 기능을 가지고 있으며, 그 중 어떤 기능을 제공하는지 표시하는 태그(tag) 가 달린 클래스를 만날 때가 있다. 예를 들어, 아래의 클래스는 원을 표현할 수도 있고 사각형을 표현할 수도 있다. class Figure { enum Shape { RECTANGE, CIRCLE }; //어떤 모양인지 나타내는 태그 필드 final Shape shape; //태그가 RECTANGLE일 때만 사용되는 필드들 double length; double width; //태그가 CIRCLE일 때만 사용되는 필드들 double radius; //..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 인터페이스를 구현하는 클래스를 만들게 되면, 그 인터페이스는 해당 클래스의 객체를 참조할 수 있는 자료형 역할을 하게 된다. 인터페이스를 클래스가 구현한다는 것은 클라이언트에게 클래스의 객체가 어떤일을 하게 될지 알려주는 것이다. 다른 목적으로 인터페이스를 정의하고 사용하는 것은 적절치 못하다. 이 기준에 미달하는 사례로는 상수 인터페이스 라는 것이 있다. 상수 인터페이스 : 메서드가 없고, static final 필드만 있는 인터페이스 상수 이름 앞에 클래스 이름을 붙이는 번거로움을 피하기 위해서 다음과 같은 인터페이스를 만든다.//상수 인터페이스..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 자바 언어에는 여러 가지 구현을 허영하는 자료형을 만드는 방법이 두 가지 포함되어 있다. 1. 인터페이스 (interface) 2. 추상 클래스 (abstract class) 인터페이스와 추상 클래스의 분명한 차이 => 추상 클래스는 구현된 메서드를 포함할 수 있지만 인터페이스는 구현된 메서드를 포함할 수 없다. => 추상 클래스가 규정하는 자료형을 구현하기 위해서는 추상 클래스를 반드시 상속 받아야 한다. => 인터페이스는 클래스 계층에 속할 필요가 없다. 인터페이스는 믹스인(mixin)을 정의하는 데 이상적이다. 믹스인 = 주 자료형 이외에 추가..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 재정의 가능 메서드를 내부적으로 어떻게 사용하는지(self-use) 반드시 문서에 남기라는 것이다. /** * {@inheritDoc} * * This implementation iterates over the collection looking for the * specified element. If it finds the element, it removes the element * from the collection using the iterator's remove method. * * Note that this implementation thro..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 상속은 코드 재사용을 돕는 강력한 도구지만, 항상 최선이라고 할 수 없다. 메서드 호출과 달리, 상속은 캡슐화 원칙을 위반한다. => 하위 클래스가 정상 동작하기 위해서는 상위 클래스의 구현에 의존할 수 밖에 없다. 예제 클래스로 HashSet 클래스의 성능을 높이기 위해서 얼마나 요소가 추가되는지 확인하는 클래스를 작성해 본다. //계승을 잘못 사용한 사례 public class InstrumentedHashSet extends HashSet { //요소를 삽입하려 한 횟수 private int addCount = 0; public Instrume..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 변경 불가능(immutable) 클래스는 그 객체를 수정할 수 없는 클래스다. immutable class example = String, 기본자료형 클래스, BigInteger, BigDecimal //모든 필드는 private, final 로 선언되어 있다. public final class String implements java.io.Serializable, Comparable, CharSequence { /** The value is used for character storage. */ private final char value[]; /..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 public 클래스의 데이터 필드를 공개하게 되면, 그 내부 표현을 변경할 수 없게 된다. 변경하면 이미 작성된 클라이언트 코드를 깨뜨리게 되기 때문이다. public class Position { public int x; public int y; } //client 코드 Position ps = new Position(); ps.x = 10; ps.y = 10; //어떠한 요구사항에 의해서 x -> xx, y -> yy로 변경 public class Position { public int xx; public int yy; } //이 경우에 위에 작..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 URL 복사 통계 잘 설계된 모듈과 그렇지 못한 모듈을 구별 짓는 가장 중요한 속성 하나는 모듈 내부의 데이터를 비록한 구현 세부사항을 다른 모듈에 잘 감추냐의 여부다 잘 설계된 모듈은 구현 세부사항을 전부 API 뒤쪽에 감춘다. 모듈들은 이 API를 통해서만 서로 통신하며, 각자 내부적으로 무슨 짓을 하는지는 신경 쓰지 않는다. 이 개념은 정보 은닉(information hiding) 또는 캡슐화(encapsulation) 이다. 정보 은닉은 시스템을 구성하는 모듈 사이의 의존성르 낮춰서, 각자 개별적으로 개발하고, 시험하고, 최적화 하고, 이해하..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 Comparable 인터페이스를 구현한 객체들은 자연적 순서를 갖게 된다. 아래의 코드는 String이 Comparable을 구현하고 있다는 사실을 이용하여 명령행 인자들을 알파벳 순서로 정렬하는 동시에 중복을 제거하고 있다. public WordList{ public static void main(String[] args) { Set s = new TreeSet(); Collections.addAll(s, args); System.out.println(s); } }Comparable을 구현한 클래스는 다양한 제네릭 알고리즘 및 Comparable ..
- Total
- Today
- Yesterday
- Seperate Chaining
- MariaDB
- custom config data convertion
- getBoolean
- mariada-connector
- referencedColumnName
- ResultSet
- rate limit
- HashMap
- notify()
- reative
- AbstractMethodError
- router
- wait()
- GlobalFilter
- dynamodb
- mariadb-connector-j
- msyql-connector-java
- RoutePredication
- Lazy
- spring cloud gateway
- Flux
- RouteDefinition
- ConcurrentHashMap
- N+1
- circurit breaker
- notifyAll()
- reactor
- DyanomoDB
- aurora
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |