[EffectiveJava] Item 14. Comparable을 구현할지 고려하라
·
Backend/Java
Comparable특정 클래스의 인스턴스들 간에 순서를 정할 수 있는 기준을 제공합니다.compareTo라는 유일한 메서드를 구현해야 합니다.자연스러운 순서(natural order)가 있는 값들(예: 숫자, 문자열, 날짜 등)을 처리하기에 적합합니다.단순 동치성 비교에 더해 순서까지 비교할 수 있으며 제네릭하다public interface Comparable { int compareTo(T t);}compareTox.compareTo(y)compareTo는 기준 객체와 주어진 객체를 비교하고 정렬 기준을 나타내는 정수 값을 반환한다.기준 객체와 비교할 수 없는 타입의 객체가 주어지면 ClassCastException을 던진다 ClassCastException : 특정 클래스의 객체를 호환되..
[EffectiveJava] Item 55. 옵셔널 반환은 신중히 하라
·
Backend/Java
💡요약1. 반환 값이 없을 수 도 있고 클라이언트가 이를 특별히 처리해야 하는 경우Optional 을 활용해보자. - 성능 저하가 뒤따르니 성능에 민감한 메서드라면 null 반환이나 예외 처리를 고려2. 반환 값 이외의 용도는 쓰는 경우는 매우 드물고 굳이 쓸 이유가 없다. 1. 개요자바 8 이전에는 메서드가 특정 조건에서 값을 반환할 수 없을 때취할 수 있는 선택지가 두 가지 있었다. 바로 예외를 던지거나 null 값을 반환하는 것이다하지만 두 가지 방법에는 허점이 존재했는데1️⃣예외를 던진다정말 예외적인 상황에 쓰여야 할 예외 처리가 null 처리에 쓰이게 된다예외를 생성할 때 스택 추적 전체를 캡처하므로 이에 대한 비용 문제가 발생한다.Stack Trace란?더보기Stack Trace자바 프로그..
[EffectiveJava] item 61. 박싱된 기본 타입보다는 기본 타입을 사용하라
·
Backend/Java
자바의 데이터 타입은 크게 두 가지로 나눌 수 있다1. 기본 타입 (원시 타입, Primitive type)int, double, boolean …2. 참조 타입 (Reference type)String, List, enum, class, interface …각각의 기본 타입에 대응하는 참조 타입이 하나씩 존재이를 박싱된 기본 타입(Wrapper Class) 이라고 한다 기본 타입과 박싱된 기본 타입의 차이기본 타입은 값만 가지고 있으나, 박싱된 기본 타입은 값에 대해 식별성이라는 속성을 가진다.박싱된 기본 타입의 두 인스턴스는 값이 같아도 다르다고 식별될 수 있다.기본 타입의 값은 언제나 유효하나, 박싱된 기본 타입은 null 값을 가질 수 있다.기본 타입이 박싱된 기본 타입보다 시간과 메모리 사용에 ..
[EffectiveJava] item 64. 객체는 클래스가 아닌 인터페이스로 참조하라
·
Backend/Java
💡객체는 클래스가 아닌 인터페이스로 참조하라이 원칙을 따르면 코드의 유연성이 증가하고, 유지보수가 쉬워지며, 구현 교체가 간편해진다.적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라적합한 인터페이스가 없다면 클래스의 계층구조 중 필요한 기능을 만족하는 가장 덜 구체적인(상위의) 클래스를 타입으로 사용하자왜 인터페이스로 참조해야 할까?1. 구현 교체가 쉽다// 좋은 예: 인터페이스를 타입으로 사용Set sonSet = new LinkedHashSet();나중에 구현체를 변경할 때, 아래처럼 생성자만 바꾸면 된다.Set sonSet = new HashSet();하지만 실제 클래스(LinkedHashSet)로 사용하면// 나쁜 예: 클래스를 타입으로 사용L..
[EffectiveJava] Item 7. 다 쓴 객체 참조를 해제하라
·
Backend/Java
메모리 누수를 주의해야 한다.자바에서는 가비지 컬렉터가 다쓴 객체를 알아서 회수해간다 하지만 그렇다고해서 메모리 관리에 신경쓰지 않으면 안된다. 메모리 누수가 발생하는 프로그램을 오래 실행하다보면 점차 가비지 컬렉션 활동과 메모리 사용량이 늘어나 결국 성능이 저하되거나 메모리초과 오류(OufOfMemoryError) 가 발생할 수 있다.[메모리 누수가 일어나는 스택 구현]public class StackMemoryLeak { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { this.elements = n..