신입시절부터 개발을 시작하여 어느덧 3년차를 지나가는 시기에 Effective Java, 객체지향의 사실과 오해, 오브젝트 , Clean Code라는 책을 추천받아서 읽어볼 수 있는 기회가 생겼습니다.혼자 읽고 다 익힐 자신이 없어서 이렇게 글로 작성하면서 어떻게 동년
정적 팩토리와, 생성자를 통해 인스턴스를 생성할때에는 공통된 제약이 하나있습니다.바로 선택적 매개변수가 많을경우 적절한 대응이 어렵다는 점입니다. 다음과 같은 TimeUtil이 있다고 가정하겠습니다.지금은 예로 만들어서 클래스 내부에 년월일시분초를 의미하는 6개의 프로
Item3까지 오게 되었습니다. 바로 시작해보겠습니다.Effective Java에서의 Item3에서는 private 생성자나 열거타입으로 싱글턴임을 보증하라는 내용입니다.일단 싱글턴에 대해 알아보겠습니다 .싱글턴(singleton) 이란 인스턴스를 오직 하나만 생성할
\_아직 Item4까지 밖에 보지 않았지만 정말 개발을 하면서 신경쓰지 않았던 부분에 대해서 다시한번 반성하고 배워가게 되는 책인것 같습니다.Item4 같은 경우는 간단하게 보고 넘어가도 될듯 하여 짧게 포스팅을 하려고 합니다 .자동으로 생성된 생성자가 아닌 명시적으로
Item5 같은 경우는 Spring 개발을 하는 개발자라면 누구나 알만한 내용이라고 생각합니다.따라서 간단하게 중요한 내용만 정리하고 넘어가도록 하겠습니다. 의존 객체 주입에 대해 처음 접해보시는분들은 다른 클래스의 자원을 사용하기위해 해당 클래스에 static 또는
Item6은 불필요한 객체를 매번 만들지 말고 재사용해서 쓰는편이 좋다에 대한 개념으로 시작합니다 지금 보는 코드는 Item6에 해당하는 극단적인 예입니다 바로 String 을 new 를 통해 인스턴스를 만드는 방법입니다위의 코드는 해당 코드가 실행될때 마다 새로운 S
Item6은 객체 참조 해제에 관한 내용입니다.Java같은 경우에는 C와 C++과 다르게 메모리를 직접 관리하지 않아도 알아서 회수해가니 메모리 관리가 필요없다! 라고 생각하시는 분들이 많을거라고 생각합니다. 저 또한 그렇게 생각하고있었습니다. 어차피 다 관리해주는데?
Item8 은 finalizer와 cleaner의 사용을 피하라는 내용입니다.저같은경우는 2개가 어떤건지 모르지만 이번 기회에 공배해보면서 왜 피하라고 하는지 알아보도록 하겠습니다.일단 finalizer와 cleaner은 자바에서 제공하는 2가지 객체 소멸자이다.fin
Java 라이브러리에는 close 메서드를 호출하여 직접 닫아줘야 하는 자원들이 많다.대표적인 예로는 InputStream, OutputStream, java.sql.Connection이 좋은 예이다.자원을 닫는 방식은 클라이언트가 놓치기 쉬워, 예측할 수 없는 성능
이번 Item10은 equals에 대한 내용에 대한 글이 있습니다equals 메서드는 재정의하기 쉬워 보이지만 잘못된 구성을 하면 생각하지도 못한 사이드 이펙트때문에 디버깅하는데 문제를 발생시킬 수 있습니다. 문제를 발생시키지 않기 위해서는 애초에 재정의 하지 않는것을
위에 적어놓은 소제목 처럼 hashCode를 재정의하지 않는다면 일반 규약을 어기게 되어 HashMap이나 HashSet같은 Collection에서의 원소로 사용될 때 문제를 일으키게 된다.equals에 사용되는 핵심 필드가 변경되지 않았다면 , 실행되는 동안 hash
toString() 은 Java개발을 하는 누구라도 한번쯤은 봤을법한 메서드 입니다.toString()메서드는 Class의 최상의 부모인 Object의 기본 메서드 입니다.Object.toString()메서드는 우리가 볼수 있는 적당한 문자열을 반환하는게 아니라 클래스
Cloneable 는 복제해도 되는 클래스라는것을 명시하는 용도의 인터페이스 이지만, clone메서드가 선언된 곳이 Cloneable 클래스가 아닌 Object 클래스이다또한 clone 메서드는 protected로 되어있다. 그래서 외부 객체에서 clone 메서드를 호
Item14는 Comparable Interface의 메서드인 compareTo()에 대한 내용을 다룬다.compareTo 메서드는 Object의 메서드가 아닌 Comparable 메서드이며 두가지만 빼면 Object 클래스의 equals와 같다.compareTo 메서
앞으로 나오는 package-private은 접근제한자 default와 동일하다고 본다.잘 설계된 컴포넌트와 잘 설계하지 못한 컴포넌트는 내부 데이터를 외부에 얼마나 잘 숨겼는가만 봐도 알 수 있다. 잘설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨 구현과 API를 깔
예시 코드를 하나 보도록 하겠습니다.위와 같은 class는 public이기 때문에 데이터 필드에 직접 접근할 수 있기 때문에 캡슐화의 이점을 제대로 살리지 못한다. 위와 같은 class는 불변성을 보장할 수 없고, 외부에서 접근할 때 부수 작업을 수행할 수도 없습니다.
불변클래스란(Immutable Class) ? 해당 객체의 내부적인 값들을 변경할 수 없는 클래스를 의미한다. 불변 클래스는 해당 객체가 파괴되는 순간까지 절대 달라지지 않는다.불변 클래스는 가변 클래스보다 설계하고 구현하기 쉽고, 사이드 이펙트로부터 안전하다.클래스를