eggrok
[java] List 인터페이스를 이용한, 다형성.==> List<> a = new ArrayList<>; 본문
[java] List 인터페이스를 이용한, 다형성.==> List<> a = new ArrayList<>;
the awesomest 2012. 4. 15. 17:54List 인터페이스를 이용한 다형성.
예를 들면, 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의 조작을 하고 있다고 하더라도, 실제 클래스에서는 쿠키를 조작하게 되어 실제 구현을 숨기는, 즉 은닉성을 가지게 됩니다.
'programming' 카테고리의 다른 글
[java] JDBC에서 Connection, Statement,ResultSet의 close (0) | 2012.04.15 |
---|---|
[java] jsp에서 statement 란?? (0) | 2012.04.15 |
[java] 이클립스 serialVersionUid 경고. (0) | 2012.04.15 |
웹서버와 톰캣의 연동, load blancing. (0) | 2012.03.12 |
Web Server,Web Application Server, Apache, Tomcat (0) | 2012.03.12 |