책은 방어적 복사의 중요성에 대해 이야기한다. 방어적 복사에 앞서 깊은 복사와 얕은 복사를 알고 가야한다. 깊은 복사 객체 복사 시, 해당 객체와 인스턴스 변수까지 복사한다. 전부 복사해서 새 주소에 담는 ( 주소값은 달라진다) 즉 원본과 복사 객체는 독립적인 별개의 객체이되, 내부 정보는 동일한 상태로 초기화 하는 것. @Override public Object clone() throws CloneNotSupportedException{ return super.clone(); } 보통 위의 clone 메소드로 복사 하게된다. public static void main(String[] args) { try { // 원본 객체 생성 Person originalPerson = new Person("Alice..
😇 Effective java Item 18 이 책에서의 ‘상속'은 (클래스가 다른 클래스를 확장하는) 구현 상속을 말한다. 이번 아이템 에서 논하는 문제는 (클래스가 인터페이스를 구현하거나 인터페이스가 다른 인터폐이스를확장하는) 인터폐이스상속과는무관하다. 메서드 호출과 달리 상속은 캠슐화를 깨뜨린다. 변형된 HashSet : 원소 수 저장 , 접근자 메서드 추가 됨. pubUc Class InstrumentedHashSet extends Hashset { // 추가된 원소의 수 private int addCount = 0; public InstrumentedHashSet() { } pubUc InstrumentedHashset(int initCap, float 10adFactor) { super(ini..
업무 중에 습관적으로 toString을 쓰곤 했다. 객체의 값을 확인하거나. 아무생각없이 리스트의 목록을 값을 확인해볼때에도, 디버깅 할때에도 로그를 toString으로 쓰면서 디버깅 해본적도 꽤많았다. Object 의 기본 toString 메서드는 상당히 불편하다. 리액트로 개발을 할 때에는 자바스크립트에서 대충 console.log를 찍으며, 디버깅을 해도 값을 모두 확인해서 나름 편리하다? 라고 생각하며 개발을 했었기에, 다시 자바로 돌아와 개발 할 때에는 불편함을 더 많이 느꼈다. 앞 장인 equals 와 hashCode 아이템만큼의 중요성은 없지만 스스로 아무 생각없이 쓰던 함수이기에 정리해본다. 새로이 알게 된 내용은 다음과 같다. 사용자가 직접 호출하지 않더라도 java 어딘가에서 상당히 많..