본문 바로가기
728x90

Gayoung162

item 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지해라 [ 상속 관련 문서화를 할 때의 규약 ] - 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야 한다. - 호출되는 메서드가 재정의 할 수 있는 가능성이 있다면 해당 사실과 호출 순서, 각각의 호출 결과가 처리에 어떤 영향을 미치는지도 적어야 한다. (재정의 가능 : public, protected method 중 non-final) - 재정의 가능 메서드를 호출할 수 있는 모든 상황을 API 문서로 남겨야 한다. (API 문서에서 내부 동작 방식을 결정하는 부분은 implementation Requirements 로 시작) public class HashMap extends AbstractMap implements Map, Cloneable, Serializable .. 2022. 5. 3.
[ Spring ] spring ~ springboot 보호되어 있는 글 입니다. 2022. 5. 1.
[Java]Hash Hash(Hash Table) 정의 hash는 데이터를 다루는 대표적인 데이터 처리 기법. 이를 활용해 데이터를 저장하는 자료구조가 hash table이다. Key, Value가 한 쌍으로 존재하며, key값에 해시함수를 적용해 index를 생성하여, 해당 인덱스에 value를 저장한다. 배경 Array는은 검색 속도가 빠르지만, 데이터의 삽입/삭제 시 속도가 느리다. LinkedList는 삽입/삭제 시 속도가 빠르지만, 순회 검색만 가능해 데이터가 많아질 수록 속도가 느리다. 이러한 속도적 한계를 극복하기 위해 제시된 기법. 특징 산술 연산 (hash function)을 이용해 데이터가 저장 될 위치를 계산한다. 데이터의 검색과 저장이 상수 시간 O(1)에 수렴한다. key를 추가/삭제시 key의 중복.. 2022. 4. 27.
item 18. 상속보다는 컴포지션을 사용해라 상속 - 코드를 재사용하는 강력한 수단. 같은 패키지 안에서 확장을 목적으로 사용된다면 안전한 방법이다. (인터페이스 상속) - 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들게 됨. 패키지 경계를 넘어 다른 패키지의 구체 클래스를 상속하는 일은 안전하지 않을 수 있다. (구현 상속 ) [ 상속을 구현할 때 주의 사항 ] 1. 캡슐화를 깨뜨린다. 상위 클래스의 구현에 따라 하위 클래스 동작에 이상이 생길 수 있다. public class item18 { public static void main(String[] args) { InstrumentedHashSet s = new InstrumentedHashSet(); //정적 팩터리 메소드인 list.of 사용 s.addAll(List.of("틱", "탁.. 2022. 4. 26.
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.
728x90