반응형
제육's 휘발성 코딩
반응형
article thumbnail
[이펙티브 자바] 아이템 17 : 변경 가능성을 최소화하라
Book/Effective Java 2022. 7. 27. 17:56

변경 가능성을 최소화하라 String, BigInteger, BigDecimal 등은 자바 플랫폼 라이브러리에서 불변 클래스로 정의 된다. 불변 클래스란 인스턴스 내부 값을 수정할 수 없는 클래스를 의미한다. 불변 클래스는 가변 클래스보다 설계 및 구현이 쉬우며, 오류가 생길 여지가 적고 훨씬 안전하다. 불변 클래스 생성 규칙 객체의 상태를 변경하는 메서드(Setter)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 상속을 막는 대표적인 방법은 클래스를 final로 선언하는 것이며, 다른 방법도 있다. 모든 필드를 final로 선언한다. 시스템이 강제하는 기능을 이용해 설계자의 의도를 드러낸다. 새로 생성된 인스턴스를 동기화 없이 다른 스레드로 건네도 문제없이 동작하게끔 보장하는 데도 필요하다. ..

article thumbnail
[이펙티브 자바] 아이템 15 : 클래스와 멤버의 접근 권한을 최소화하라
Book/Effective Java 2022. 7. 27. 14:41

클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트는 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 잘 숨긴 컴포넌트이다. 모든 내부 구현을 완벽히 숨기고, 구현과 API를 깔끔히 분리하는 것이 중요하다. 이를 정보 은닉 혹은 캡슐화라고 한다. 정보 은닉의 장점 여러 컴포넌트를 병렬로 개발할 수 있기 때문에 시스템 개발 속도를 높인다. 디버깅과 교체에 용이하여 시스템 관리 비용을 낮춘다. 다른 컴포넌트에 영향을 주지 않기 때문에 제작 난이도를 낮추고 성능 최적화와 SW 재사용에 도움을 준다. 접근 제어자 자바에서는 정보 은닉을 위해 접근을 제어하는 메커니즘을 제공한다. public : 모든 곳에 접근할 수 있다. (공개 API - 영원한 관리 필요) protected : package-pri..

article thumbnail
[이펙티브 자바] 아이템 14 : Comparable을 구현할지 고려하라
Book/Effective Java 2022. 7. 27. 13:48

Comparable을 구현할지 고려하라 객체를 정렬하기 위한 인터페이스로 자바에선 Comparable 인터페이스와 Comparator 인터페이스 두 가지가 존재 한다. 정확히는 정렬하기 위한 인터페이스라기 보단, 객체를 비교할 수 있는 인터페이스라고 보는 것이 바람직하다. public class PointTest { public static void main(String[] args) { Point a = new Point(1, 2); Point b = new Point(2, 3); } static class Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } } 다음과 같은 Point 객체는 부등호 비교뿐만 아니라 객체를..

article thumbnail
[이펙티브 자바] 아이템 13 : clone 재정의는 주의해서 진행하라
Book/Effective Java 2022. 7. 27. 09:37

clone 재정의는 주의해서 진행하라 /** * A class implements the Cloneable interface to * indicate to the {@link java.lang.Object#clone()} method that it * is legal for that method to make a * field-for-field copy of instances of that class. * * Invoking Object's clone method on an instance that does not implement the * Cloneable interface results in the exception * CloneNotSupportedException being thrown. * *..

article thumbnail
[이펙티브 자바] 아이템 11 : equals를 재정의하려거든 hashCode도 재정의하라
Book/Effective Java 2022. 7. 23. 18:10

equals를 재정의하려거든 hashCode도 재정의하라 equals 재정의 후 hashCode를 재정의해야 한다. 그 이유는 논리적으로 같은 객체는 같은 해시코드를 반환해야하기 때문이다. Hash 함수를 사용하는 컬렉션을 사용하지 않으면 hashCode를 재정의하지 않더라도 문제가 발생하지 않는다. 하지만 애플리케이션 레벨에서 바라봤을 때 해시 컬렉션을 사용하지 않는다고 확신하기 어렵다. 따라서 hashCode도 같이 재정의 하는 것이 필요하다. equals만 재정의 한 경우 import java.util.*; public class Car { private final String name; public Car(String name) { this.name = name; } @Override public..

article thumbnail
[이펙티브 자바] 아이템 1 : 생성자 대신 정적 팩터리 메서드를 고려하라
Book/Effective Java 2022. 7. 4. 19:32

생성자 대신 정적 팩터리 메서드를 고려하라 정적 팩토리 메서드(Static Factory Method)란 객체 생성의 역할을 하는 클래스 메서드라는 의미를 갖고 있다. 즉, 생성자를 통해 객체를 생성하는 것이 아닌 메서드를 통해 객체를 생성하는 것을 의미한다. class Book { private String title; private long isbn; public static Book createByIsbn(long isbn) {...}; public static Book createByTitle(String title){...}; } 클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다. 장점 이름을 가질 수 있다. BigInter(int, int, Random) 보다 BigInteger...

반응형
반응형