Open jeongabae opened 4 years ago
1.3절의 코드에서 구현만 바꿈( LinkedList 클래스-> ArrayList 클래스 교체)
package com.allendowney.thinkdast;
import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.*;
import java.util.ArrayList; import java.util.List;
import org.junit.Test;
/**
*/ public class ListClientExampleTest {
/**
}
- ListClinetExampleTest
```java
package com.allendowney.thinkdast;
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
/**
* @author downey
*
*/
public class ListClientExampleTest {
/**
* Test method for {@link ListClientExample}.
*/
@Test
public void testListClientExample() {
ListClientExample lce = new ListClientExample();
@SuppressWarnings("rawtypes")
List list = lce.getList();
assertThat(list, instanceOf(ArrayList.class) );
}
}
ListClientExample 클래스의 getList 메서드를 실행하여 반환형이 ArrayList 클래스인지 확인. -> 실패( LinkedList클래스 반환해서)
ListClientExample 클래스에서 LinkedList 클래스-> ArrayList 클래스 교체, import문 추가. ListClientExample 클래스 컴파일, 실행. ->성공
package com.allendowney.thinkdast;
import java.util.ArrayList; import java.util.LinkedList; import java.util.List;
public class ListClientExample { @SuppressWarnings("rawtypes") private List list;
@SuppressWarnings("rawtypes")
public ListClientExample() {
list = new ArrayList();
//실습 수정 전에는 list = new LinkedList(); 였음!
}
@SuppressWarnings("rawtypes")
public List getList() {
return list;
}
public static void main(String[] args) {
ListClientExample lce = new ListClientExample();
@SuppressWarnings("rawtypes")
List list = lce.getList();
System.out.println(list);
}
}
cf) List가 있는 선언 부분을 ArrayList로 변경?
-> 프로그램 정상동작, but 과다 지정(oeverspecified)
cf) ListClientExample 클래스의 생성자에서 ArrayLIst 객체를 List 인터페이스로 교체하면?
-> 생성자에서 인스턴스가 생성되지 않지 않을까.. 인스턴스가 생성되지않으면 컴파일이 잘 되지 않지 않을까...생각...
cf) 왜 List 인터페이스로는 인스턴스가 생성되지 않을까?
-> 자바 인터페이스는 인스턴스를 생성할 수 없다고 알고 있는데... 즉 List 인터페이스가 인스턴스를 생성하는 객체가 아니기 때문에..?
1.1 리스트가 두 종류인 이유
1.2 자바 interface
1.3 List interface
JCF는 List라는 interface를 정의하고 ArrayList와 LinkedList라는 두 구현 클래스를 제공
ex_ ListClientExample
import java.util.LinkedList; import java.util.List;
public class ListClientExample { @SuppressWarnings("rawtypes") private List list;
}