diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..7d3b3e8
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..de0c428
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/List/ArrayList/ArrayList_enduf7686.java b/src/main/java/List/ArrayList/ArrayList_enduf7686.java
new file mode 100644
index 0000000..fd4f555
--- /dev/null
+++ b/src/main/java/List/ArrayList/ArrayList_enduf7686.java
@@ -0,0 +1,74 @@
+package List.ArrayList;
+
+import static java.lang.System.arraycopy;
+
+import List.List;
+
+public class ArrayList_enduf7686 implements List {
+
+ private static final int DEFAULT_INIT_SIZE = 10;
+
+ private Object[] array;
+ private int size;
+
+ public ArrayList_enduf7686() {
+ this(DEFAULT_INIT_SIZE);
+ }
+
+ public ArrayList_enduf7686(int initSize) {
+ this.array = new Object[initSize];
+ this.size = 0;
+ }
+
+ @Override
+ public void insert(E data) {
+ array[size++] = data;
+
+ if (array.length == size) {
+ Object[] temp = array.clone();
+
+ array = new Object[size + DEFAULT_INIT_SIZE];
+ arraycopy(temp, 0, array, 0, temp.length);
+ }
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return size == 0;
+ }
+
+ @Override
+ public boolean contains(E o) {
+ for (int i = 0; i <= size; i++) {
+ if (o.equals(array[i])) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public E get(int index) {
+ return (E) array[index];
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public E remove(int index) {
+ E temp = (E) array[index];
+
+ for (int idx = index + 1; idx < array.length; idx++) {
+ array[idx - 1] = array[idx];
+ }
+ array[--size] = null;
+
+ return temp;
+ }
+}
diff --git a/src/test/java/List/ArrayList/ArrayListTest_enduf7686.java b/src/test/java/List/ArrayList/ArrayListTest_enduf7686.java
new file mode 100644
index 0000000..4f8951f
--- /dev/null
+++ b/src/test/java/List/ArrayList/ArrayListTest_enduf7686.java
@@ -0,0 +1,104 @@
+package List.ArrayList;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+import List.List;
+import org.junit.jupiter.api.Test;
+
+public class ArrayListTest_enduf7686 {
+
+ @Test
+ void ArrayList의_생성_및_초기화() {
+ // 구현 후 수정
+ List list = new ArrayList_enduf7686<>();
+
+ assertThat(list).isNotNull();
+ }
+
+ @Test
+ void 데이터_5개_저장() {
+ // 구현 후 수정
+ List list = new ArrayList_enduf7686();
+
+ list.insert(11);
+ list.insert(11);
+ list.insert(22);
+ list.insert(22);
+ list.insert(33);
+
+ assertThat(list.size()).isEqualTo(5);
+ assertThat(list.get(0)).isEqualTo(11);
+ assertThat(list.get(1)).isEqualTo(11);
+ assertThat(list.get(2)).isEqualTo(22);
+ assertThat(list.get(3)).isEqualTo(22);
+ assertThat(list.get(4)).isEqualTo(33);
+ }
+
+
+ @Test
+ void 데이터_5개_저장_후_22인_데이터_모두_삭제() {
+ // 구현 후 수정
+ List list = new ArrayList_enduf7686();
+
+ list.insert(11);
+ list.insert(11);
+ list.insert(22);
+ list.insert(22);
+ list.insert(33);
+
+ // Iterable을 구현하면 enhanced for loop를 사용할 수 있습니다.
+ for (int i = 0; i < list.size(); i++) {
+ if (list.get(i) == 22) {
+ list.remove(i);
+ i--; // 삭제되면 index가 조정되므로 해당 index부터 다시 확인해야 합니다.
+ }
+ }
+
+ assertThat(list.size()).isEqualTo(3);
+ assertThat(list.get(0)).isEqualTo(11);
+ assertThat(list.get(1)).isEqualTo(11);
+ assertThat(list.get(2)).isEqualTo(33);
+ }
+
+ @Test
+ void 데이터_5개_저장_후_데이터_확인() {
+ // 구현 후 수정
+ List list = new ArrayList_enduf7686();
+
+ list.insert(11);
+ list.insert(11);
+ list.insert(22);
+ list.insert(22);
+ list.insert(33);
+
+ assertThat(list.contains(11)).isEqualTo(true);
+ assertThat(list.contains(12)).isEqualTo(false);
+ assertThat(list.contains(22)).isEqualTo(true);
+ assertThat(list.contains(33)).isEqualTo(true);
+ assertThat(list.contains(34)).isEqualTo(false);
+ }
+
+ @Test
+ void 데이터_15개_저장_후_데이터_확인() {
+ // 구현 후 수정
+ List list = new ArrayList_enduf7686();
+
+ list.insert(11);
+ list.insert(11);
+ list.insert(22);
+ list.insert(22);
+ list.insert(33);
+ list.insert(33);
+ list.insert(44);
+ list.insert(44);
+ list.insert(44);
+ list.insert(55);
+ list.insert(55);
+ list.insert(55);
+ list.insert(66);
+ list.insert(77);
+ list.insert(88);
+
+ assertThat(list.size()).isEqualTo(15);
+ }
+}
\ No newline at end of file