본문 바로가기

프로젝트 & TIL/일별 공부 기록 (백엔드 스쿨)

42일차 - ArrayList, HashMap 직접 구현

@TestMethodOrder

테스트를 실행하는 순서를 보장해야 할 때 적용하는 어노테이션

@TestMethodOrder(MethodOrderer.MethodName.class)
public class MyArrayListTest {

    @Test
    void t002() {
        ...
    }

    @Test
    void t001() {
        ...
    }
}

위와 같이 실행하면 t001(), t002() 순으로 테스트가 실행된다.


ArrayList 직접 구현 시 참고 사항

  • List의 add()는 true를 리턴한다.
  • 제네릭 배열은 생성할 수 없다.
    • Object 배열로 만들고 return할 때 T로 형변환하는 식으로 진행
    • 배열은 공변하며 런타임에 실체화되지만, 제네릭 타입은 불공변하며 런타임에 소거
    • 이로 인해 배열은 타입 안전성을 보장해줄 수 없어 제네릭 배열을 직접 생성할 수 없다.
    • https://pompitzz.github.io/blog/Java/whyCantCreateGenericsArray.html#제네릭과-배열의-차이점

HashMap 직접 구현 시 ArrayList VS LinkedList

  • ArrayList ⇒ 인덱스 기반의 빠른 데이터 접근이 필요할 때
    • 인덱스 기반의 데이터 접근이 빠르다.
    • 요소들이 메모리 상에서 연속적으로 배치되어 있어 메모리 사용이 비교적 효율적이다.
    • 크기 변경 시 데이터를 복사해야 하므로 크기 조절이 느리다.
  • LinkedList ⇒ 요소의 추가와 삭제가 빈번하게 발생할 때
    • 크기 변경 시 노드의 참조만 변경하면 되므로 크기 조절이 빠르다.
    • 노드를 순차적으로 탐색해야 하므로 인덱스 기반의 데이터 접근이 느리다.
    • 각 노드마다 다음 노드와 이전 노드에 대한 참조를 저장해야 하므로 메모리 사용이 비교적 비효율적이다.