'Effective Java 2nd'에 해당되는 글 9건
- [Effective Java] 23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. 2009/10/30
- [Effective Java] 15. 가변성을 최소화하자. (2) 2009/10/19
- [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. (2) 2009/10/15
- [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. 2009/09/28
- [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) 2009/09/24
- [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) 2009/09/23
- [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 2009/09/17
- [Effective Java] 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. (3) 2009/08/26
- [Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자. (3) 2009/07/31
[Effective Java] 23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자.
Posted at 2009/10/30 10:14// Posted in 나만의 작업/Javaif (o instanceof Set) { // Raw type
Set<?> m = (Set<?>) o; // Wildcard type
...
}
'나만의 작업 > Java' 카테고리의 다른 글
| throw new UnsupportedOperationException() (4) | 2009/10/30 |
|---|---|
| [Effective Java] 23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. (0) | 2009/10/30 |
| [Effective Java] 19. 타입을 정의할 때만 인터페이스를 사용하자. (2) | 2009/10/27 |
| [Effective Java] 15. 가변성을 최소화하자. (2) | 2009/10/19 |
| [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. (2) | 2009/10/15 |
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
[Effective Java] 15. 가변성을 최소화하자.
Posted at 2009/10/19 10:08// Posted in 나만의 작업/Java[Effective Java] 15. 가변성을 최소화하자.
2) 상속을 할 수 없도록 하자. 일반적으로는 클래스를 final로 지정하면 상속을 막을 수 있다.
3) 모든 필드를 final로 지정한다. 새로 생성된 불변 클래스 인스턴스의 참조가 스레드간의 동기화를 하지 않고 하나의 스레드에서
다른 스레드로 확실하게 전달되도록 하는데도 필요하다.
4) 모든 필드를 private으로 지정한다. 필드로 참조되는 가변 객체를 클라이언트가 직접 접근하여 객체의 내용을 변경하는 것을 막기위함이다. 불변 클래스의 public final필드에서 기본형 데이터 값이나 불변 객체의 참조를 갖는 것이 기술적으로는 가능하다. 그러나 향후에 그 클래스의 내부 구조를 변경하기 어렵기 때문에 바람직하지 않다.
5) 가변 컴포넌트의 직접적인 외부 접근을 막자. 만일 가변 객체를 참조하는 필드가 클래스에 있다면, 그 클래스의 클라이언트가 해당 가변 객체의 참조를 획득할 수 없게 하자. 즉, 클라이언트가 주는 객체 참조로 그런 필드를 초기화해서는 절대 안되며, 접근자 메소드에서 객체 참조를 반환해도 안된다. 그대신 생성자와 접근자 메소드 및 readObject메소드에서 해당 객체의 방어 복사본(defensive copy)을 만들어 사용하도록 하자.
'나만의 작업 > Java' 카테고리의 다른 글
| throw new UnsupportedOperationException() (4) | 2009/10/30 |
|---|---|
| [Effective Java] 23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. (0) | 2009/10/30 |
| [Effective Java] 19. 타입을 정의할 때만 인터페이스를 사용하자. (2) | 2009/10/27 |
| [Effective Java] 15. 가변성을 최소화하자. (2) | 2009/10/19 |
| [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. (2) | 2009/10/15 |
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
[Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자.
Posted at 2009/10/15 10:03// Posted in 나만의 작업/Java이 인터페이스는 Object 클래스의 protected 메소드인 clone의 행동 방식을 규정한다. 만약, clone 메소드가 호출된 객체가 Cloneable 타입이라면, Object.clone 메소드는 이 객체의 모든 필드를 그대로 복사한 복제본을 리턴한다. 하지만 Cloneable 타입이 아니라면 CloneNotSupportedException을 던진다.
java.lang.Object.clone의 명세(Specification)
보통 모든 객체 x에 대하여, 다음 식
x.clone() != x는 true 이고, 또 다음 식
x.clone().getClass() == x.getClass()
도 true이지만 반드시 지켜야 할 사항은 아니다. 또 다음 식
x.clone().equals(x)
도 true이지만 반드시 지켜야 할 사항은 아니다. 어떤 객체를 복제할 때 보통 이 객체 클래스의 새로운 인스턴스는 반드시 생성해야 하지만, 내부 데이터 구조도 역시 복제해야 할지도 모른다. 이 메소드는 어떤 생성자도 호출하면 안 된다.
일반적인 Class의 clone() method
- field가 모두 기본형 타입일 경우
try {
return super.clone();
} catch(CloneNotSupportedException e) {
throw new Error("Assertion failuer");
}
}
어떤 객체가 가변 객체를 참조하는 필드를 갖고 있는 Stack클래스를 생각해 보자.
Stack 클래스의 clone 메소드가 올바르게 동작하려면, 원본 객체가 내부적으로 포함하고 있는 객체까지도 복제해주어야 한다.
그리고 그렇게 하는 가장 쉬운 방법은, elements 배열에 대해 재귀적으로 clone 메소드를 호출하는 것이다.
Cloneable을 implements 하는 클래스의 서브 클래스에서는 clone 메소드를 잘 구현해야한다.
객체를 복제하는 다른 방법을 제공하거나, 또는 복제할 수 없도록 하는 것이 좋다.
예를 들어, 불변 클래스의 객체 복제를 지원하는 것은 바람직하지 않다. 사실상 복제본이 원본과 같기 때문이다.
객체를 복제하는 좋은 방법은 복제 생성자나 복제 팩토리 메소드를 제공하는 것이다. 복제 생성자는 그냥 생성자로써, 그 생성자를 포함하는 클래스를 타입으로 하는
인자를 하나만 갖는다.
public Yum(Yum yum);
복제 팩토리는 복제 생성자와 유사한 static 팩토리 메소드로 다음과 같다.
public static Yum newInstance(Yum yum);
복제 생성자와 복제 팩토리 메소드를 사용하는 방법은 Cloneable 과 Clone을 사용하는 것에 대해 많은 장점을 갖고 있다.
'나만의 작업 > Java' 카테고리의 다른 글
| throw new UnsupportedOperationException() (4) | 2009/10/30 |
|---|---|
| [Effective Java] 23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. (0) | 2009/10/30 |
| [Effective Java] 19. 타입을 정의할 때만 인터페이스를 사용하자. (2) | 2009/10/27 |
| [Effective Java] 15. 가변성을 최소화하자. (2) | 2009/10/19 |
| [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. (2) | 2009/10/15 |
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
[Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자.
Posted at 2009/09/28 13:24// Posted in 나만의 작업/Java'나만의 작업 > Java' 카테고리의 다른 글
| [Effective Java] 23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. (0) | 2009/10/30 |
|---|---|
| [Effective Java] 19. 타입을 정의할 때만 인터페이스를 사용하자. (2) | 2009/10/27 |
| [Effective Java] 15. 가변성을 최소화하자. (2) | 2009/10/19 |
| [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. (2) | 2009/10/15 |
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
| Eclipse Galileo에 어떤 프로젝트가 있을까? (2) | 2009/08/26 |
[Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자.
Posted at 2009/09/24 11:07// Posted in 나만의 작업/Java'나만의 작업 > Java' 카테고리의 다른 글
| [Effective Java] 19. 타입을 정의할 때만 인터페이스를 사용하자. (2) | 2009/10/27 |
|---|---|
| [Effective Java] 15. 가변성을 최소화하자. (2) | 2009/10/19 |
| [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. (2) | 2009/10/15 |
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
| Eclipse Galileo에 어떤 프로젝트가 있을까? (2) | 2009/08/26 |
| [Effective Java] 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. (3) | 2009/08/26 |
[Effective Java] 5. 불필요한 객체 생성을 피하자
Posted at 2009/09/23 11:33// Posted in 나만의 작업/Java'나만의 작업 > Java' 카테고리의 다른 글
| [Effective Java] 15. 가변성을 최소화하자. (2) | 2009/10/19 |
|---|---|
| [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. (2) | 2009/10/15 |
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
| Eclipse Galileo에 어떤 프로젝트가 있을까? (2) | 2009/08/26 |
| [Effective Java] 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. (3) | 2009/08/26 |
| [Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자. (3) | 2009/07/31 |
-
2009/09/24 11:18 [Edit/Del] [Reply]흠... String s = "abc" 해도
결국 new String('a', 'b', 'c') 하는 거니까...
객체 생성 한다는 측면에선 별 차이가 없는...
문제가 되는 건 new String(antoherString)하는 과정에서 불필요한 메모리 복사가 발생한다는... 정도...^^-
2009/09/28 13:28 [Edit/Del]^^ 자주 등장하는 String 객체생성.
말씀해주셨다시피 String s = "abc"도 결국 내부적으론 new String 을 하는거니 성능상의 문제는 비슷하죠.
불필요한 작업을 피하자는 것~ ^^
-
-
[Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자
Posted at 2009/09/17 10:23// Posted in 나만의 작업/Java//이 클래스는 인스턴스 생성이 불가능하다라는 주석을 다는게 좋겠다.
private UtilityClass(){
throw new AssertionError(
}
'나만의 작업 > Java' 카테고리의 다른 글
| [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. (2) | 2009/10/15 |
|---|---|
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
| Eclipse Galileo에 어떤 프로젝트가 있을까? (2) | 2009/08/26 |
| [Effective Java] 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. (3) | 2009/08/26 |
| [Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자. (3) | 2009/07/31 |
| [Java] 자바 코딩하다가 실수하는 부분들 (8) | 2008/03/03 |
[Effective Java] 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자.
Posted at 2009/08/26 11:07// Posted in 나만의 작업/Java'나만의 작업 > Java' 카테고리의 다른 글
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
|---|---|
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
| Eclipse Galileo에 어떤 프로젝트가 있을까? (2) | 2009/08/26 |
| [Effective Java] 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. (3) | 2009/08/26 |
| [Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자. (3) | 2009/07/31 |
| [Java] 자바 코딩하다가 실수하는 부분들 (8) | 2008/03/03 |
| [java] java.util.Properties 클래스 (4) | 2007/05/10 |
-
2009/08/30 17:07 [Edit/Del] [Reply]오... enum 으로 싱글턴을... 신기하네요~
INSTANCE; 구문도 첨 본거고...
자바도 아직 공부할 게 많이 남았네요 ^^;;-
버리2009/09/01 12:17 [Edit/Del]Heart님 올만이에요~^^
저도 이번에 effective java 2nd 책 보면서 싱글턴으로 하는거 알아서..^^
메소드에 접근하고 싶다면,
Elvis.INSTACE.leaveTheBuilding();
이렇게 접근하면 된답니다.^^
-
[Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자.
Posted at 2009/07/31 11:05// Posted in 나만의 작업/JavaEffective Java Reloaded : http://developers.sun.com/learning/javaoneonline/2006/coreplatform/TS-1512.pdf?
'나만의 작업 > Java' 카테고리의 다른 글
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
|---|---|
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
| Eclipse Galileo에 어떤 프로젝트가 있을까? (2) | 2009/08/26 |
| [Effective Java] 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. (3) | 2009/08/26 |
| [Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자. (3) | 2009/07/31 |
| [Java] 자바 코딩하다가 실수하는 부분들 (8) | 2008/03/03 |
| [java] java.util.Properties 클래스 (4) | 2007/05/10 |
-
-
sebah2010/08/03 15:21 [Edit/Del] [Reply]좋은 책이죠. 저도 잘 보고 있습니다. 한가지.. public class Builder -> public static class Builder 로 변경해야 겠죠? ^^


