본문 바로가기
[Effective Java] 오버로딩(overloading)을 분별력 있게 사용하자. [Effective Java] 오버로딩(overloading)을 분별력 있게 사용하자. public class CollectionClassifier{public static String classify(Set s){return "Set";} public static String classify(List lst){return "List";} public static String classify(Collection c){return "Unknown Collection";} public static void main(String[] args){Collection[] collections = { new HashSet(), new ArrayList(), new HashMap().values() };for( Col.. 2017. 1. 16.
[Effective Java] 가변성을 최소화 하자. [Effective Java] 가변성을 최소화 하자. -불변 클래스는 자신의 인스턴스가 갖는 값을 변경할 수 없는 클래스. - 불변 클래스는, 가변 클래스에 비해 설계와 구현 및 사용이 더 쉽다. 에러 발생이 적으며 보안이나 사용 측면에서 더 안전하다. - 불변 클래스를 만들 때는 다음 다섯 가지 규칙을 따르자. 1. 객체의 상태를 변경하는 그 어떤 메소드도 제공하지 않는다. 2. 상속을 할 수 없도록 하자. ( class 에 final 을 주어 막을 수 있다. ) 3. 모든 필드를 final 로 지정한다. 4. 모든 필드를 private 으로 지정한다. 5. 가변 컴포넌트의 직접적인 외부 접근을 막자. 생성자와 접근자 메소드 및 readObject 메소드에서 해당 객체의 방어 복사본을 만들어 사용하도록.. 2016. 10. 24.
[Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자. 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자. - static 팩토리 메소드와 생성자는 공통적 제약이 있다. 선택가능한 매개변수가 많아질 경우 신축성 있게 처리하지 못한다. - 텔레스코핑 생성자(telescoping constructor) 패턴이 대안이 될 수 있으나, 마찬가지로 매개변수 수가 증가하면 무척 번거로워 진다. 가독성도 떨어지고, 유지보수도 어려워진다. ( 갯수를 세고 의미를 파악하는데만도 한세월~ ) - 자바빈즈(Java Beans) 패턴이 두번째 대안이 될 수 있으나, 이 패턴은 심각한 단점을 가지고 있다. 여러 번의 메소드 호출로 나누어져 인스턴스가 완성되기 때문에 객체가 일관된 상태를 유지하지 못할 수 있다. ( multi thread 환경 ) 또한 자바빈즈는 불변 .. 2015. 2. 8.
[Effective Java] 생성자 대신 static 팩토리(factory) 메소드 사용을 고려하자. 생성자 대신 static 팩토리(factory) 메소드 사용을 고려하자. -일반적인 instance 생성 방법은 생성자(constructor)를 이용하는 것. - 클래스에 public static 팩토리 메소드를 두는 것이 더 유용하다. - public static 팩토리 메소드의 장점 1. 생성자와 달리 자기 나름의 이름을 가질 수 있다. 2. 동일한 시그너처를 갖는 복수의 생성자를 갖는 효과를 누린다. 3. 호출될 때마다 매번 새로운 객체를 생성할 필요가 없다. 불변 클래스의 경우 이미 생성된 인스턴스를 다시 사용할 수 있다. 중복 생성 방지를 할 경우에도 사용된다. ( singleton ) 4. 자신이 아닌 서브타입(subtype) 객체도 반환할 수 있다. interface 와 혼합하여 사용하면 유.. 2014. 9. 8.
Android ViewDragHelper Tutorial Android ViewDragHelper Tutorial 이 녀석은 Youtube 비디오가 우하단으로 축소되는 것의 구현에 사용된 녀석이다. ViewDragHelper ( 이하 VDH ) 는 다음과 같은 특징을 가지고 있다. - ViewDragHelper.Callback 은 parent view 와 VDH 간의 communication channel 이다.- VDH instance 를 만들기 위해서는 static factory method 를 이용하면 된다.- Drag direction 은 설정 가능하다.- View 가 없어도 drag detection 이 가능하다. VDH 는 support-v4 library 에 있다.VDH 는 VelocityTracker 나 Scroller 를 사용하여 구현되어 있다.. 2014. 6. 9.
[Java Design Pattern] 생성자 대신 static factory method를 사용해보자. 1. Prerequisite & Reference [Tutorial] 디자인 패턴이 뭔가요? 왜 필요한가요? 2. Information Static Factory Method 가 뭔가요? 일반적으로 객체를 생성할 때는 생성자 ( Constructor ) 을 이용하죠? Object object = new Object(); 와 같이.. Static Factory Method 는 public static method 로서 외부 클래스에서 바로 접근할 수 있는 method 로, 생성자의 역할을 하는 녀석입니다. Static Factory Method 를 쓰면 뭐가 좋은데요? 1. 생성자와는 달리 자기 나름의 이름을 가질 수 있습니다. 생성자는 Class 이름밖에 못 갖습니다. 예를 들어 Blog 라는 클래스를 .. 2012. 1. 10.
반응형