보통 ArrayList를 생성하려고 한다면, 다음과 같이 생성하는 걸 많이 보게 된다.
List<Object> list = new ArrayList<Object>();
List라는 인터페이스로 선언을 하는 식인데, 이렇게 업캐스팅해서 선언하는 이유가 있었다.
객체 지향 프로그래밍의 일환으로, 다형성을 지원하기 위해서라고 한다.
즉, 변경에 유연하게 하기 위함이란 의미이다.
만약, ArrayList라는 인스턴스로 선언하고 있다고 가정해보자.
데이터의 용도가 바뀌게 되어서 자료구조 LinkedList로 변경을 해야한다고 할 때,
서로가 호환되지 않는 메서드들은 모두 수정이 필요하게 된다.
이는 변경에 유연하지 못한 설계이다.
반면에, 인터페이스 List라는 인스턴스로 선언하게 된다면,
선언부만 LinkedList로 변경해주고 이외에 다른 부분들은 손대지 않아도 된다.
이렇기 때문에,
대개 구현체로 인스턴스를 선언하는 것이 아닌,
상위 인터페이스로 인스턴스를 선언하는 것이 객체 지향적인, 다형성을 구현하기 위한 설계를 해야 한다.
Ref)
'Develop > Java' 카테고리의 다른 글
중첩 삼항연산자 (0) | 2022.11.26 |
---|---|
ArrayList vs HashMap (0) | 2022.11.05 |
배열 내용 출력하기 (0) | 2022.10.14 |
.toString() vs String.valueOf() (1) | 2022.09.30 |
Null과 isEmpty()의 차이 (0) | 2022.09.24 |