Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

eggrok

[java] List 인터페이스를 이용한, 다형성.==> List<> a = new ArrayList<>; 본문

programming

[java] List 인터페이스를 이용한, 다형성.==> List<> a = new ArrayList<>;

the awesomest 2012. 4. 15. 17:54

List 인터페이스를 이용한 다형성. 

예를 들면, List<> a = new ArrayList<>();

         List<> a = new Vector<>();

   List<> a = new AbstractSet<>(); 


이는 List 탑입의 a 변수를 선언하고서, ArrayList, Vector, AbstractSet 등 많은 타입을 생성할수 있기 때문이다.. 다양한 형의 데이타를 받을수 있다.


1. 인터페이스 List 대신에 구현 클래스 ArrayList의 형타입을 알 수 있다면 더 편리하게 사용할 수 있습니다. (낮게 나는 새가 더 자세히 본다) 


2. 구현 클래스 ArrayList 대신에 인터페이스 List를 사용하면 더 많은 형타입을 받아 들일 수 있습니다. (높게 나는 새가 더 멀리 본다.) 


예를들어, 목록의 모든 원소를 출력하는 메서드 public void printAll(List items)는 

public void printAll(ArrayList items) 보다 더 많은 종류의 형타입을 받아 들일 수 있습니다. (Vector, Set, etc) 


3. 구현 클래스 ArrayList 대신에 인터페이스 Iterable을 받아 들인다면, 클라이언트는 

인수로 받는 객체의 크기가 변하지 않을것이라는 보증을 할 수 있습니다. (Iterable 객체는 객체를 더 넣을 수 없습니다. 


4. 인터페이스 Map을 만족하는 객체라면 굳이 HashMap이 아니여도 Map을 구현하는 클래스를 만들어 사용할 수 있습니다. 

예를들어 서블릿에서 Cookie를 조작하기 위하여 HttpRequest와 HttpResponse클래스에 의존적인 작업을 해야 합니다만, 이들 클래스를 캡슐화 시키는 일반 클래스 CookieMap클래스를 만들 수 있습니다. 


public class CookieMap implements Map<String, String> { 

private HttpServletRequest req; 

private HttpServletResponse res; 


... 


public String get(String key) { 

for(Cookie cookie : req.getCookies()) { 

if(cookie.getName().equals(key)) { 

return cookie; 


public void put(String key, String value) { 

response.addCookie(new Cookie(key, value)); 


만약 위와 같은 구체화 클래스 CookieMap를 작성하였다고 할 경우에, 이 클래스의 인스턴스를 일반적인 Map객체와 같은 취급을 하는것이 가능합니다. 따라서 다른 클라이언트가 일반적인 Map의 조작을 하고 있다고 하더라도, 실제 클래스에서는 쿠키를 조작하게 되어 실제 구현을 숨기는, 즉 은닉성을 가지게 됩니다.