지금도 부족한점이 많지만 어디서 본건 많아지다 보니

 

이제는 이게 왜 이렇게 쓰였는지 어떻게하는게 더 좋은 코드인지 등등

 

많은것을 고려하면서 코드를 짜게되는거 같다

 

예전부터 그냥 이렇게 하는게 좋다니까 이렇게 한다 식으로

 

코드를 작성하는게 많았는데 그 중 객체 생성시 클래스와 생성자를

 

다르게 작성하는 이유에대해 알아보고자 한다

 

1) 같게
ArrayList<Object> list = new ArrayList<Object>();

2) 다르게
List<Object> list = new ArrayList<Object>();

 

위 코드를 보면 2)에 해당하는 다르게 쓰는 방식을 권장한다

 

ArrayList 생성자와 같은 구현체 클래스가 아닌

List라는 인터페이스로 선언하는 방식이다

 

그 이유는

 

' 객체지향 프로그래밍의 일환으로 다형성을 지원하기 위해서 이다 '

 

처음부터 확장에 유연한 구조로 미리 설계를 하는 방식이라고 보면 된다

 

예를들어

ArrayList는 빠른 탐색에 유리하다는 장점이 있고

LinkedList는 삽입/삭제에 유리하다는 장점이 있다

 

만약 1)과 같이 선언해두면 나중에 용도를 변경하고 싶어지면

ArrayList로 선언한걸 다 찾아내서 LinkedList로 바꿔줘야 한다

 

여기에 ArrayList에는 지원하는 메서드인데

LinkedList에는 지원하지 못하면 그 메서드를 사용 못하게도 된다

 

반면 2)와 같이 선언해두면 선언부 외에는 다른 부분을

변경할 필요가 없어진다

 

쉽게 말해 List로 선언해 놔야 List에서 제공하는 메서드를 사용가능 하고

ArrayList나 LinkedList나 상속에 의해 List 메서드를 다 사용할 수 있으니

특정 자식으로 선언하기 보다 부모로 선언하는게 좋다는 것이다

 

- 정리하기 -

객체는 인터페이스를 사용해 선언하는게 좋다

 

나중에 기존 코드를 바꾸지 않고 인터페이스 내에서

변경하기 쉽도록 하기 위해서 이다