Java/Effective Java
-
[Effective Java] Item 17. 변경 가능성을 최소화하라Java/Effective Java 2020. 8. 28. 23:08
불변 클래스란 그 인스턴스의 내부 값을 수정할 수 없는 클래스입니다. 대표적으로 String,, BigInteger, BigDecimal이 여기 속합니다. 불변 클래스를 만들기 위한 5가지 규칙 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 모든 필드를 final로 선언한다. 모든 필드를 private로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 아래는 불변 클래스에 대한 예제 코드입니다. public final class Complex { private final double re; private final double im; public Complex(double re, double im) { this.re = re; this..
-
[Effective Java] Item 15. 클래스와 멤버의 접근 권한을 최소화하라Java/Effective Java 2020. 8. 27. 22:01
잘 설계된 컴포넌트의 특징은 클래스의 내부 구현 정보를 외부 컴포넌트로부터 숨기고, 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 개의치 않는다는 점입니다. 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리입니다. 정보 은닉의 장점 여러 컴포넌트를 병렬로 개발할 수 있기 때문에 시스템 개발 속도를 높일 수 있습니다. 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 컴포넌트로 교체하는 부담이 적어지므로 시스템 관리 비용을 낮춥니다. 정보 은닉 자체가 성능을 높여주지는 않지만, 성능 최적화에 도움을 줍니다. 완성된 시스템을 프로파일링 해 최적화할 컴포넌트를 정한 다음 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화할 수 있기 때문입..
-
[Effective Java] Item 14. Comparable을 구현할지 고려하라Java/Effective Java 2020. 8. 26. 23:56
Comparable Comparable 인터페이스는 compareTo() 메서드를 가지고 있고, 이를 구현한 클래스는 그 인스턴스들에 자연적인 순서가 있음을 뜻합니다. Comparable을 구현한 객체들의 배열은 다음과 같이 간단하게 정렬할 수 있습니다. Arrays.sort(a); 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 Comparable 인터페이스를 구현하는 것이 좋습니다. compareTo() 메서드의 일반 규약 이 객체와 주어진 객체의 순서를 비교한다. 이 객체가 주어진 객체보다 작으면 음의 정수를, 같으면 0을, 크면 양의 정수를 반환합니다. 이 객체와 비교할 수 없는 타입의 객체가 주어지면 ClassCastException을 던진다. 다음 설명에서 sgn(표현식) 표기..
-
[Effective Java] Item 13. clone 재정의는 주의해서 진행하라Java/Effective Java 2020. 8. 26. 01:11
Cloneable 인터페이스는 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스입니다. 하지만 clone() 메서드는 Cloneable 인터페이스가 아닌 Object 클래스에 선언이 되어있고, 접근 지정자는 protected로 선언이 되어 있습니다. 메서드가 하나도 선언되어 있지 않은 Cloneable 인터페이스는 Object의 protected 메서드인 clone() 메서드의 동작 방식을 결정합니다. Cloneable을 구현한 클래스의 인스턴스에서 clone()을 호출하면 그 객체의 필드들을 하나하나 복사한 객체를 반환하며, Cloneable을 구현하지 않은 클래스에서 이를 호출하면 CloneNotSupportedException이 발생합니다. clone() 메서드에 대한 Object 명세 이..