본문 바로가기

이펙티브

[Effective Java] 아이템 20. 추상클래스보다는 인터페이스를 우선하라. 안녕하세요 남갯입니다. 오늘은 이펙티브자바 item 20에 대해 포스팅 해보려고 합니다. 아이템 20. 추상 클래스보다는 인터페이스를 우선하라. 인터페이스와 추상클래스는 자바 8부터 default 키워드를 통해 default 메소드를 제공 할 수 있게 되어서 거의 비슷합니다. 둘의 가장 차이를 알아봅시다. - 추상클래스(Abstract)추상클래스가 정의한 타입을 구현하는 클래스는 추상클래스의 하위 타입이 되어야한다. 새로운 타입을 정의할때 제약을 안게 되는셈이고, - 인터페이스(implements)인터페이스가 선언한 메서드를 모두 정의하고 일반적 규약을 잘 치킨 클래스면 어떤 클래스를 상속해도 같은 타입으로 이용된다.인터페이스는 기존 클래스에도 손 쉽게 인터페이스를 구현할 수 있다. implements ..
[Effective Java] 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라. 안녕하세요 남갯입니다. 오늘은 이펙티브 자바 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라. 를 포스팅 해보려고 합니다. 이 책에서는 상속을 염두하지 않았다면 상속하지 말라고 한다. 그렇다면 상속을 고려한 설계와 문서화란 무슨말일까?상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야한다.final이 아닌 모든 메서드들이 어떤 순서로 호출하고 어떤 결과과 이어지는 처리에 어떤 영향을 주는지에 대한 정보를 담아야한다.예를들어 AbstractCollection 에서 remove 메소드를 재정의 하지 않았다면 UnsupportOperationExeption을 던진다. 상황에 따라 protected 메소드를 통해 필드나 메소드를 공개 해야할 ..
[Effective Java] 아이템 18. 상속보다는 컴포지션을 이용하라 안녕하세요 남갯입니다. 오늘은 이펙티브 자바 아이템 18. 상속보다는 컴포지션을 이용하라 에 대해 포스팅하려고 합니다. 상속은 코드를 재사용하는 강력한 수단이지만 항상 최선은 아니고 잘못사용하면 오류를 내기 쉽다. 여기서 말하는 상속은 구현상속을 말한다.(클래스가 다른 클래스를 상속하는 행위만을 말한다)메서드 호출과 달리 상속은 캡슐화를 깨트린다. 자식클래스는 부모클래스에 의존하기 때문에 부모클래스의 동작을 변경함에 따라 하위클래스가 오동작을 할 수 있다. 이렇게 상위클래스 설계자가 확장을 충분히 고려하고 문서화를 안하면 변경하지 않은 하위 클래스도 변경해야 한다. HashSet을 사용하는 프로그램이 있고 이 성능을 올리기위해 변경된 코드를 만들었다. public class InstrumentedHash..
[Effective Java] 아이템 7. 다 쓴 객체 참조를 해제하라. 안녕하세요 남갯입니다 오늘은 아이템 7. 다 쓴 객체 참조를 해제하라.에 대해 작성해보려고 합니다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Object[] getElements() { return elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) throw new EmptySta..
[Effective Java] 아이템 6. 불필요한 객체 생성을 피하라. 안녕하세요 남갯입니다 오늘은 이펙티브 자바 item 6에 대해 포스팅 해보려고 합니다. 아이템 6. 불필요한 객체 생성을 피하라. String 관련 글에서도 작성했었지만 아래와같이String s = new String("bikini"); 이렇게 생성할 경우 매번 힙영역에 올라가게 됩니다. 아래의 글을 참조해주세요 2019/12/08 - [IT/Java언어] - [Java] String, StringBuilder, StringBuffer 란? String s = "bikini" 를 통해 생성해서 상수풀에 올라가게 되므로 모든 코드가 똑같은 객체를 재사용함을 보장한다. Boolean(String) // deprecate in java9 생성자 대신 Boolean.valueOf(String) 팩터리 메서드를 ..