IT/Java64 이펙티브 자바 4장 -2 추상 클래스보다는 인터페이스를 우선하라 추상클래스 방식은 자바가 단일상속만 지원하기에 새로운 타입을 정의하는데 제약을 가지게 된다. 인터페이스의 경우 어떠한 클래스를 상속했든 같은 타입으로 취급된다. 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해 넣을 수 있다. 인터페이스는 믹스인 정의에 안성맞춤이다. 믹스인이란 클래스가 구현할 수 있는 타입으로 믹스인을 구현한 클래스에 원래의 주된 타입 외에도 특정 선택적 행위를 제공한다고 선언하는 효과를 준다. 인터페이스로는 계층구조가 없는 타입 프레임워크를 만들 수 있다. 언터페이스는 기능을 향상시키는 안전하고 강력한 수단이다. 추상클래스로 정의해둔다면 그타입에 기능을 추가하는 방법은 상속뿐이며 상속해서 만든 클래스는 래퍼클래스보다 활용도가 떨어지고 깨지기는 더.. 2019. 12. 2. 이펙티브 자바 4장 - 1 클래스와 멤버의 접근 권한을 최소화 하라 컴포넌트에서 클래스 내부테이터와 내부 구현정보를 외부 컴포넌트로부터 잘 숨기는 것은 매우 중요하다. 변경과 관련이 있기 때문이다. 내부에서만 : 유효성 검사 X 코드 간결해짐 외부 유출 : 유효성 검사 중요 정보 은닉의 장점 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있다. 시스템 관리 비용을 낮춘다. 각 컴포넌트를 빨리 파악하여 디버깅할수 있으며 다른 컴포넌트로의 변경 부담도 적다. 정보 은닉이 성능을 높여주진 않지만 성능 최적화에 도움을 준다. 소프트웨어 재사용성을 높인다. 큰 시스템 제작 난이도를 낮춘다. 모든 클래스와 멤버의 접근성을 가능한 좁히는 것이 원칙이다. 한 클래스에서만 사용하는 package-private 톱레벨 클래스나 인터.. 2019. 11. 27. 이펙티브 자바 3장 Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되어있다. Object 에서 final이 아닌 메서드(equals, hashCode, toString, clone, finalize)는 모두 재정의를 염두에 두고 설계 된 것이라 재정의 시 지켜야하는 일반 규약이 정의도어 있다. 모든 클래스는 이 메서드들을 일반 규약에 맞게 재정의 해야한다. equals는 일반 규약을 지켜 재정의하라 다읨에 열거한 상황 중 하나에 해당한다면 재정의하지 않는 것이 최선이다. 각 인스턴스가 본질적으로 고유하다. 인스턴스의 논리적 동치성을 검사할 일이 없다. 상위클래스에서 재정의한 equals가 하위클래스에도 딱 들어 맞는다. 클래스가 private이거나 package-private이고 e.. 2019. 11. 26. 이펙티브자바 2장 생성자 대신 정적 팩터리 메서드(static)를 고려 ※정적 팩토리 메서드 : 객체를 생성하는 메서드를 만들고 static으로 선언하는 기법 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드 전통적으로 클래스의 인스턴스를 얻는 방법은 public 생성자이다. 하지만 정적팩터리 메서드를 제공할 수 있다. 팩터리 메서드 이점 1) 이름을 가질 수 있다. 생성자에는 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 설명하지 못한다. 2) 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다.(싱글톤) 더욱 유연해지기에 immutable class는 인스턴스를 미리 만들어 두거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다. ex) Boolean.valueOf.. 2019. 11. 23. 이전 1 2 3 4 5 6 7 8 ··· 16 다음