Skip to content

Commit 08ee17b

Browse files
committed
Adapter 패턴
1 parent 6f50c5e commit 08ee17b

File tree

5 files changed

+221
-0
lines changed

5 files changed

+221
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import java.util.Iterator;
2+
3+
public interface DataCollection<T> {
4+
boolean put(T t);
5+
T elemAt(int index);
6+
int length();
7+
Iterator createIterator();
8+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import java.util.ArrayList;
2+
import java.util.Iterator;
3+
4+
public class DataCollectionAdapter<T> implements DataCollection<T> {
5+
final int SIZE = 3;
6+
private int length;
7+
private int capacity;
8+
private ArrayList<T> data;
9+
10+
public DataCollectionAdapter(){
11+
data = new ArrayList<T>(SIZE);
12+
length = 0;
13+
capacity = SIZE;
14+
}
15+
@Override
16+
public boolean put(T t) {
17+
if (length >= capacity) {
18+
boolean b = resizeArray(); // 재할당
19+
if (b) {
20+
data.add(t);
21+
length++;
22+
}
23+
return b;
24+
}
25+
else {
26+
data.add(t);
27+
length++;
28+
}
29+
return true;
30+
}
31+
32+
@Override
33+
public T elemAt(int index) {
34+
if (index >= 0 && index < length) {
35+
return (T) data.get(index);
36+
}
37+
return null;
38+
}
39+
40+
@Override
41+
public int length() {
42+
return length;
43+
}
44+
45+
@Override
46+
public Iterator createIterator() {
47+
Iterator<T> itr = data.iterator();
48+
return itr;
49+
}
50+
51+
private boolean resizeArray() {
52+
ArrayList<T> newData = new ArrayList<T>(capacity + SIZE);
53+
if (newData == null) {
54+
return false;
55+
}
56+
for (int i = 0; i < capacity; i++) {
57+
newData.add(data.get(i));
58+
}
59+
data = newData;
60+
capacity += SIZE;
61+
return true;
62+
}
63+
}

Adapter Pattern/src/DynamicArray.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import java.util.Iterator;
2+
3+
//DynamicArray<String> strArray = new DynamicArray<String>();
4+
//DynamicArray<Integer> intArray = new DynamicArray<Integer>();
5+
6+
public class DynamicArray<T> implements DataCollection<T> {
7+
final int SIZE = 3;
8+
private int length;
9+
private int capacity;
10+
private Object[] data;
11+
12+
public DynamicArray() {
13+
data = new Object[SIZE];
14+
length = 0;
15+
capacity = SIZE;
16+
}
17+
18+
public boolean put(T t) {
19+
if (length >= capacity) {
20+
boolean b = resizeArray(); // 재할당
21+
if (b) {
22+
data[length] = t;
23+
length++;
24+
}
25+
return b;
26+
}
27+
else {
28+
data[length] = t;
29+
length++;
30+
}
31+
return true;
32+
}
33+
34+
public T elemAt(int index) {
35+
if (index >= 0 && index < length) {
36+
return (T) data[index];
37+
}
38+
return null;
39+
}
40+
41+
public int length() {
42+
return length;
43+
}
44+
45+
public Iterator createIterator() {
46+
return new DynamicArrayIterator(this);
47+
}
48+
49+
private boolean resizeArray() {
50+
Object[] newData = new Object[capacity + SIZE];
51+
if (newData == null) {
52+
return false;
53+
}
54+
for (int i = 0; i < capacity; i++) {
55+
newData[i] = data[i];
56+
}
57+
data = newData;
58+
capacity += SIZE;
59+
return true;
60+
}
61+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import java.util.Iterator;
2+
3+
public class DynamicArrayIterator implements Iterator {
4+
private DynamicArray array;
5+
private int index;
6+
7+
public DynamicArrayIterator(DynamicArray arr) {
8+
array = arr;
9+
index = 0;
10+
}
11+
12+
@Override
13+
public boolean hasNext() {
14+
return (index < array.length());
15+
}
16+
17+
@Override
18+
public Object next() {
19+
Object obj = array.elemAt(index);
20+
index++;
21+
return obj;
22+
}
23+
24+
@Override
25+
public void remove() {
26+
//throw new UnsupportedOperationException();
27+
}
28+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import java.util.Iterator;
2+
3+
public class TestDynamicArray {
4+
public static void main(String[] args) {
5+
DataCollection<String> arr1 = new DynamicArray<String>();
6+
arr1.put("Seoul");
7+
arr1.put("Busan");
8+
arr1.put("Gwangju");
9+
arr1.put("Daejeon");
10+
arr1.put("Cheonan");
11+
arr1.put("Ulsan");
12+
arr1.put("Daegu");
13+
arr1.put("Incheon");
14+
15+
16+
17+
System.out.println("\n변경 전: DynamicArray를 이용");
18+
System.out.println("--------------------------------");
19+
System.out.println("index");
20+
for (int i = 0; i < arr1.length(); i++) {
21+
String s = (String) arr1.elemAt(i);
22+
System.out.println(s);
23+
}
24+
25+
26+
System.out.println("--------------------------------");
27+
System.out.println("iterator");
28+
for (Iterator iter = arr1.createIterator(); iter.hasNext(); ) {
29+
String s = (String) iter.next();
30+
System.out.println(s);
31+
}
32+
33+
34+
DataCollection<String> arr2 = new DataCollectionAdapter<String>();
35+
arr2.put("Seoul");
36+
arr2.put("Busan");
37+
arr2.put("Gwangju");
38+
arr2.put("Daejeon");
39+
arr2.put("Cheonan");
40+
arr2.put("Ulsan");
41+
arr2.put("Daegu");
42+
arr2.put("Incheon");
43+
44+
45+
46+
System.out.println("\n변경 후: DataCollectionAdapter를 이용");
47+
System.out.println("--------------------------------");
48+
System.out.println("index");
49+
for (int i = 0; i < arr2.length(); i++) {
50+
String s = (String) arr2.elemAt(i);
51+
System.out.println(s);
52+
}
53+
54+
System.out.println("--------------------------------");
55+
System.out.println("iterator");
56+
for (Iterator iter = arr2.createIterator(); iter.hasNext(); ) {
57+
String s = (String) iter.next();
58+
System.out.println(s);
59+
}
60+
}
61+
}

0 commit comments

Comments
 (0)