이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 중첩 클래스(nested class)는 다른 클래스 안에 정의된 클래스다. 중첩 클래스는 해당 클래스가 속한 클래스 내에서만 사용된다. 그렇지 않으면 중첩 클래스로 선언하면 안된다. 중첩 클래스의 4가지 종류 1. 정적 멤버 클래스 (static member class) 2. 비-정적 멤버 클래스 (nonstatic member class) 3. 익명 클래스 (anonymous class) 4. 지역 클래스 (local class) 1번을 제외하면 모두 내부 클래스(inner class)다. 정적 멤버 클래스는 바깥 클래스의 모든 멤버에 접근할 수 ..
이펙티브 자바 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) 이다. 정보 은닉은 시스템을 구성하는 모듈 사이의 의존성르 낮춰서, 각자 개별적으로 개발하고, 시험하고, 최적화 하고, 이해하..
- Total
- Today
- Yesterday
- mariada-connector
- msyql-connector-java
- Flux
- getBoolean
- reative
- wait()
- notifyAll()
- dynamodb
- notify()
- referencedColumnName
- HashMap
- N+1
- reactor
- RoutePredication
- RouteDefinition
- spring cloud gateway
- ConcurrentHashMap
- ResultSet
- aurora
- MariaDB
- circurit breaker
- Lazy
- router
- rate limit
- AbstractMethodError
- mariadb-connector-j
- DyanomoDB
- custom config data convertion
- Seperate Chaining
- GlobalFilter
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |