728x90 JAVA/Effective Java65 item 17. 변경 가능성을 최소화하라 불변 클래스? - 객체가 파괴되는 순간까지 인스턴스의 내부 값을 절대 수정할 수 없는 클래스 - ex) String, 기본 boxing type class, BigInteger, BigDecimal [ 불변 클래스를 만드는 이유 ] - 가변 클래스보다 설계, 구현, 사용이 쉽다. - 오류가 적고 안전하다. [ 불변 클래스를 만드는 다섯 가지 규칙] 1. 객체의 상태를 변경하는 메서드를 제공하지 않는다. 2. 클래스를 확장할 수 없도록 한다. 하위 클래스에서 객체의 상태를 변하게 하는 불상사를 막아준다. 상속을 막는 대표적인 방법은 클래스를 final로 설정하는 것이다. (다른 방법도 있음) 3. 모든 필드를 final로 선언한다. 시스템이 강제하는 수단을 이용하여 설계자의 의도를 명확히 드러내는 방법이다.. 2022. 4. 25. item 16. public 클래스에서는 접근자 메서드를 사용하라 다음과 같이 인스턴스 필드를 모아놓는 일 이외에는 아무 목적도 없는 클래스가 있다. public class item16 { // instance field 선언 이외 하는 일 없음. public int x; public int y; } 다음과 같이 public 필드를 노출시킨다면 여러 가지 단점이 있다. -> ex) java.awt.package 의 Point, Dimension class //java.awt.Point package java.awt; public class Point extends Point2D implements java.io.Serializable { public int x; public int y; public void move(int x, int y) { this.x = x; t.. 2022. 4. 25. item 15. 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트란? 클래스 내부 데이터와 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐에 달린다. 오직 API를 통해서 외부 컴포넌트와 소통한다. "캡슐화" [ 캡슐화 / 정보 은닉의 장점 ] 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발 가능 시스템 관리 비용을 낮춘다. 각 컴포넌트별 디버깅 속도가 빠르다. 컴포넌트 교체 부담이 적다. 성능 최적화에 도움을 준다. 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화가 가능하다. 소프트웨어 재사용성을 높인다. 외부에 거의 의존하지 않고 독자적으로 동작할 수 있는 컴포넌트일 경우. 큰 시스템 제작 난이도를 낮춰준다. 시스템이 완성되지 않은 상태라도 개별 컴포넌트 동작 검증이 가능하기 때문이다. [ 자바에서 제공하는 정보 은닉 장치 .. 2022. 4. 23. item 14. Comparable을 구현할지 고려하라 [ compare to ] - Comparable 인터페이스의 유일무이한 메서드 - Object 메서드가 아니다! - 단순 동치성 뿐만 아니라, 순서까지 비교할 수 있다. (즉, Comparable을 구현한 클래스의 인스턴스는 자연적 순서가 생긴다.) Comparable을 구현한 객체의 정렬 방법 : Arrays.sort(객) - 자바 플랫폼 라이브러리의 모든 값 클래스와 열거 타입이 Comparable을 구현했다. - 순서가 명확한 값 클래스를 작성한다면 Comparable interface를 구현해야 한다. [ 일반 규약 ] 해당 객체와 주어진 객체의 순서를 비교한다. 객체가 매개변수로 들어온 객체보다 작으면 음의 정수(-1), 같으면(0), 크다면 양의 정수(+1)을 반환 객체와 매개변수로 들어온 .. 2022. 4. 23. item 13. clone 재정의는 주의해서 진행하라 Cloneable 복제해도 되는 클래스임을 명시하는 용도의 mix-in interface. clone() 한마디로 말하면 복제하는 메소드 이다. 그러나, 모든 클래스가 clone() 메서드를 사용할 수 있는 것이 아니다. 왜? -> clone() 메서드가 선언된 곳은 Object고 접근 제한자는 protected이지만, clone()은 Clonealbe 인터페이스의 추상 메소드이기 때문. 따라서, Cloneable을 구헌하는 것 만으로는 clone()을 호출할 수 없다. //clone() 자동생성method @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } Cloneable Interf.. 2022. 4. 23. item 12. toString을 항상 재정의하라 toString [규약] 모든 하위 클래스에서 이 메서드를 재정의한다. 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환한다. [기본 메서드] - 기본적으로 class_Name@16진수로_표시한_hashCode 반환. (간결하고 읽기 쉽지만, 상대적으로 덜 유익하다.) - 객체를 println, printf, 문자열 연결 연산자(+), assert 구문에 넘길 때, 혹은 디버거가 객체를 출력할 때 자동으로 불린다. - 즉, 직접 호출하지 않더라도 호출될 수 있다. public class item12 { public static void main(String[] args) { Info info1 = new Info("Gayoung", 26); System.out.println(info1); // to.. 2022. 4. 19. 이전 1 ··· 6 7 8 9 10 11 다음 728x90