Language/JAVA15 [Effective java] 상속보다는 컴포지션을 사용하라 목적 확장할 목적으로 설계되었고 문서화도 잘 된 클래스라면 상속도 안전합니다. 하지만 일반적인 다른 패키지의 구체 클래스를 상속하는 일은 위험할 수 있다고 합니다. 오늘은 상속을 쓰기 좋은 상황과 상속의 위험성과 상속대신 컴포지션을 사용하는 방법을 알아보려고 합니다. 상속의 위험성 상위 클래스는 릴리스마다 내부 구현이 달라질 수 있습니다. 해당 여파로 하위 클래스가 오동작할 수 있습니다. 하위클래스가 상위클래스로 인해 깨지기 쉬운 예시 1. HashSet - 문서화가 잘 안되어 있을 경우 HashSet으로 생성된 이후 원소가 몇 번 더해졌는지 알 수 있어야한다라고 했을 때 다음과 같이 상속으로 구현할 수 있을 것입니다. import java.util.Collection; import java.util.H.. 2023. 9. 9. [Effective java] Comparable 구현 고려하기 목적 Comparable 인터페이스에는 compareTo 메서드가 있습니다. compareTo는 단순 동치성 비교뿐 만이 아닌 순서를 비교할 수 있고, 추가로 제네릭한 특징을 가지고 있습니다. Comparable을 구현했다는 것은 자연적인 순서가 있음을 뜻하게 되어 Arrays.sort()와 같은 메서드, 자동 정렬되는 컬렉션(ex. TreeSet) 등과 함께 사용하면 관리가 쉬워집니다. 단순히 Comparable을 구현해서 정렬만 쉽게 하면된다고 생각했는데, 몇 규약을 지키지 않을 경우 문제가 발생할 수 있다고 합니다. 그래서 오늘은 Comparable 인터페이스를 구현할 때 지켜야하는 규약과 규약을 지키지 않았을 때 문제점, 작성 요령에 대해 알아보고자 합니다. Comparable 인터페이스를 구현할.. 2023. 9. 2. [Effective java] 불필요한 객체 생성 피하기 목표 똑같은 기능의 객체를 여러번 생성하는 것 보단 객체 하나를 재사용하는 것이 나을 때가 많습니다. 이 점을 고려할 때. 피해야하는 방법과 권장되는 방법 등을 알아봅시다. 1. 문자열 생성에서의 불필요한 객체 생성 피하기 문자열을 선언하는 방법에는 String 리터럴과 new String() 두 가지가 있습니다. "abc" 리터럴 값을 사용하여 새로운 인스턴스를 만드는 대신 하나의 String인스턴스를 사용할 수 있습니다. 반면, new String("abc")는 새로운 인스턴스를 만들기 때문에 이를 반복문이나 빈번하게 호출되는 메서드 안에서 호출하게 된다면 불필요하게 매모리를 낭비하게 될 수 있습니다. 참고: "abc" vs new String("abc") 더 알아보기 https://je-pa.tis.. 2023. 8. 22. [JAVA] Supplier<T> 인터페이스 Supplier 인터페이스는 Java 8부터 추가된 함수형 인터페이스(Functional Interface) 중 하나로서, 데이터 공급자 역할을 수행하는 함수를 나타냅니다. Supplier 인터페이스의 메소드인 get()은 매개변수를 받지 않고, 데이터 값을 반환합니다. 즉, 파라미터를 받지 않고 값을 리턴하는 메서드를 나타내기 위해 사용됩니다. Supplier는 다양한 기능과 유연성을 제공하며, 람다 표현식 및 스트림 API와 함께 사용하여 코드를 간결하고 가독성 좋게 작성할 수 있습니다. package java.util.function; @FunctionalInterface public interface Supplier { /** * Gets a result. * * @return a result *.. 2023. 8. 22. 이전 1 2 3 4 다음 LIST