Effective Java 3/E를 공부하며 작성한 글입니다. 혼자 공부하고 정리한 내용이며, 틀린 부분은 지적해주시면 감사드리겠습니다 😀 타입 안전 열거 패턴 책의 초판에서는 다음과 같은 타입 안전 열거 패턴(typesafe enum pattern)을 소개했었다. public class TypesafeOperation { private final String type; private TypesafeOperation(String type) { this.type = type; } public String toString() { return type; } public static final TypesafeOperation PLUS = new TypesafeOperation("+"); public static..
자바 개발자를 위한 코틀린 입문을 공부하며 작성한 글입니다. 혼자 공부하고 정리한 내용이며, 틀린 부분은 지적해주시면 감사드리겠습니다 😀 var VS val 모든 변수는 우선 val로 만들고, 꼭 필요한 경우 var로 변경한다. long number1 = 10L; final long number2 = 10L; long과 final long의 차이는 가변 / 불변의 차이를 나타낸다. 구분 설명 long 처음 값을 할당 받고 나서, 다시 한 번 값을 바꿔줄 수 있다. final long 한 번 값을 지정해주면 더 이상 바꿀 수 없다. 위 코드를 코틀린으로 변환하면 다음과 같다. // variable var number1 = 10L // value val number2 = 10L 코틀린에서는 모든 변수에 수정..
Effective Java 3/E를 공부하며 작성한 글입니다. 혼자 공부하고 정리한 내용이며, 틀린 부분은 지적해주시면 감사드리겠습니다 😀 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는 것이다. 상수 인터페이스 상수 인터페이스란, 상수를 뜻하는 static final 필드로 가득찬 인터페이스를 의미한다. 이 상수들을 사용하려는 클래스에서는 정규화된 이름을 쓰는걸 피하고자 그 인터페이스를 구현하곤 한다. public interface PhysicalConstants { // 아보가드로 수 (1/몰) static final double AVOGADROS_NUMBER = ...; // 볼츠만 상수 (J/K) static final double BOL..
Effective Java 3/E를 공부하며 작성한 글입니다. 혼자 공부하고 정리한 내용이며, 틀린 부분은 지적해주시면 감사드리겠습니다 😀 Java8에서 부터 기존 인터페이스에 default 메소드를 추가할 수 있게 되었다. 이 메소드를 선언하면, 그 인터페이스를 구현한 후 디폴트 메소드를 재정의하지 않은 모든 클래스에서 디폴트 구현이 쓰이게 된다. 디폴트 메소드 public interface Calculator { int sum(int num1, int num2); int minus(int num1, int num2); default int multiple(int num1, int num2) { return num1 * num2; } } public class EngineeringCalc impleme..
서론 Effective Java 3/E를 공부하면서 Item5에 Supplier라는 것을 처음 보았다. 이 부분에 대해 이해가 가지 않는 부분이 있어, 늦게나마 스터디하는 팀원분들께 여쭤보았는데 내용이 흥미로워서 정리해본다! 함수형 프로그래밍 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. Java 8부터 이러한 방식으로 개발할 수 있도록 함수형 인터페이스를 지원한다. package java.util.function; @FunctionalInterface public interface Supplier { T get(); } 위 코드와 같이 함수형 인터페이스는 @FunctionalInterface 어노테이션을 지니고 있으며, 패키지를 들여다보면 정..
Effective Java 3/E를 공부하며 작성한 글입니다. 혼자 공부하고 정리한 내용이며, 틀린 부분은 지적해주시면 감사드리겠습니다 😀 Comparable Comparable 인터페이스를 살펴보면 compareTo라는 추상 메소드 하나만 존재한다. public interface Comparable { public int compareTo(T o); } 이름과 같이 매개변수로 들어온 것과 자신을 비교하는 것이다. 아래 차이점을 제외하면 Object.equals()와 동일한 기능을 한다. 단순 동치성 비교 순서 비교 + 제네릭 즉, Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서(natural order)가 있음을 뜻한다. public class ComparableTest ..