전체 글(89)
-
List - 리스트 추상화2 - 의존관계 주입
MyArrayList를 활용해서 많은 데이터를 처리하는 BatchProcessor 클래스를 개발하고 있다고 가정하자. 그런데 막상 프로그램을 개발하고 보니 데이터를 앞에서 추가하는 이링 많은 상황이라고 가정해보자. 데이터를 앞에서 추가하거나 삭제하는 일이 많다면 MyArrayList 보다는 MyLinkedList를 사용하는 것이 훨씬 효율적이다. 데이터를 앞에서 추가하거나 삭제할 때 빅오 비교MyArrayList : O(n)MyLinkedList : O(1) 다음 예시 코드를 보자. public class BatchProcessor{ private final MyLinkedList list = new MyLinkedList(); //코드 변경 public void logic(int size)..
2024.05.22 -
List - 리스트 추상화 1 - 인터페이스 도입
자바 기본편에서 학습한 다형성과 OCP원칙을 가장 잘 활용할 수 있는 곳 중에 하나가 바로 자료 구조이다. List 자료구조순서가 있고, 중복을 허용하는 자료 구조를 리스트(List)라고 한다.우리가 지금까지 만든 MyArrayList와 MyLinkedList는 내부 구현만 다를 뿐 같은 기능을 제공하는 리스트이다. 물론 내부 구현이 다르기 때문에 상황에 따라 성능은 달라질 수 있다. 핵심은 사용자 입장에서 보면 같은 기능을 제공한다는 것이다. 이 둘의 공통 기능을 인터페이스로 뽑아서 추상화 하면 다형성을 활용한 다양한 이득을 얻을 수 있다. 같은 기능을 제공하는 메서드를 MyList인터페이스로 뽑아보자. MyListpackage collection.list;public interface MyList {..
2024.05.22 -
LinkedList - 직접 구현하는 연결 리스트4 - 제네릭 도입
지금까지 만든 연결 리스트에 제네릭을 도입해서 타입 안정성을 높여보자.추가로 여기서 사용하는 Node는 외부에서 사용되는 것이 아니라 연결 리스트 내부에서만 사용된다. 따라서 중첩 클래스로 만들자.package collection.link;public class MyLinkedListV3 { private Node first; private int size = 0 ; public void add(E e){ Node newNode = new Node(e); if(first == null){ first = newNode; }else{ Node lastNode = getLastNode(); last..
2024.05.22 -
LinkedList - 직접 구현하는 연결리스트 3 - 추가와 삭제 2
package collection.link;public class MyLinkedListV2 { private Node first; private int size = 0 ; public void add(Object e){ Node newNode = new Node(e); if(first == null){ first = newNode; }else{ Node lastNode = getLastNode(); lastNode.next=newNode; } size++; } public int size() { return size; } privat..
2024.05.22 -
LinkedList - 직접 구현하는 연결 리스트2 - 추가와 삭제 1
특정 위치에 있는 데이터를 추가하고, 삭제하는 기능을 만들어보자.void add(int index, Object e)특정 위치에 데이터를 추가한다.내부에서 노드도 함께 추가된다.Object remove(int index)특정 위치에 있는 데이터를 제거한다. 내부에서 노드도 함께 제거된다. 기능을 구현하기 전에 먼저 어떤 식으로 구현해야 할지 알아보자. 첫 번째 위치에 데이터 추가노드에 다음과 같은 데이터가 있다고 가정해보자.[a->b->c] 첫번째 항목에 "d"를 추가해서 [d->a->b->c] 로 만드는 코드를 분석해보자. 1.신규 노드 생성 2.신규 노드와 다음 노드 연결3. first에 신규 노드 연결최종 결과노드를 추가했으므로 오른쪽 노드의 index가 하나씩 뒤로 밀려난다.연결 리스트는 배열처럼..
2024.05.19