객체의 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때뿐이다. 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. Set 인터페이스를 구현한 LinkedHashSet 변수를 선언 // 좋은 예 : 인터페이스를 타입으로 사용했다. Set sonSet = new LinkedHashSet(); // 나쁜 예 : 클래스를 타입으로 사용했다. LinkedHashSet sonSet = new LinkedHashSet(); 인터페이스를 타입으로 사용하는 습관을 길러두면 프로그램이 훨씬 유연해진다. 나중에 구현 클래스를 교체하고자 한다면 그저 새 클래스의 생성자를 호출해주기만 하면 된다. 다른 코드는 전혀 손대지 않고 새로 구현한 클래스로의 교체를 완료할 ..