스터디/이펙티브코틀린

아이템 4 - inferred 타입으로 리턴하지 말라

코틀린은 타입추론을 지원한다. 이 때 주의할 점이 있다. 먼저 추론된(inferred)타입은 정확하게 오른쪽에 있는 피연산자에 맞게 설정된다. 따라서 슈퍼클래스 혹은 인터페이스로 설정되지 않음을 기억해야한다. 따라서 원하는 타입보다 제한된 타입으로 설정됐다면 명시적으로 타입을 지정해주어야 한다. 외부에 제공하는 라이브러리의 인터페이스 반환 타입을 명시적으로 지정하다 제거해버리면 사용을 하는 쪽에서 문제가 발생 할 수 있다. 따라서 안전을 위해 외부 제공 API를 만드는 경우 반드시 타입을 지정하고, 지정한 타입을 변경하거나 제거하지 않아야 한다. 책에서 나온 예시와 같이 명시적 타입을 제거함으로써 인터페이스 구현체에서 더 이상 Car가 아닌 Ferrari 구현체만 반환하는 인터페이스가 되버린다. 결론 타..

2022.02.28 게시됨

스터디/이펙티브자바

[아이템4] 인스턴스화를 막으려거든 private 생성자를 사용하라

아이템 4 인스턴스화를 막으려거든 private 생성자를 사용하라 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. case 정적 메서드와 정적 필드만을 담은 클래스를 만들경우 (ex. 유틸성 클래스) java.lang.Math java.util.Arrays Java.util.Collections final 클래스와 관련한 메서드를 모아 놓을 때 추상 클래스로 만드는 것은 상속을 하라는 의미로 받아 들여질 수 있으므로 인스턴스화를 막는데 아무런 도움이 되지 못한다. 기본적으로 아무런 생성자를 만들어 놓지 않으면 컴파일러가 기본 생성자를 public하게 만들기 때문에 명시적으로 private한 생성자를 만들어두어 인스턴스화를 막을 필요가 있다. 그렇지 않으면 기본 생성자를 컴파일러가 만..

2020.01.18 게시됨