Item 20 추상 클래스보다는 인터페이스를 우선하라 🟧 추상 클래스, 인터페이스 - 상속과 확장 추상 클래스 다중 상속이 불가능하다. 한 번 상속하면 이후에 확장하기 힘들다. 인터페이스 다중 상속이 가능하다. 기능을 추가하기 용이하다. 🤔 그러면 계속해서 확장가능한 인터페이스만 사용하면 되잖아 ?? (제목부터 인터페이스를 우선시하라는데 ??) 왜 그런 말이 나왔는지 일단 더 알아보자구요 ~ 🙅♂️ 먼저 추상 클래스와 인터페이스의 목적은 다릅니다. 🙅♂️ 🟧 목적이 다르고 차이점이 존재한다. 추상 클래스 상속받아 구현된 기능을 이용하고, 확장시킨다. 인터페이스 구현을 강제하기 때문에 같은 동작을 보장한다. 추상 클래스는 기존 기능을 이용해서 확장하고 인터페이스는 구현을 강제한다고..? 추상 클래스와 ..
Item 49 매개변수가 유효한지 검사하라 메서드나 생성자에 입력되는 매개변수들이 정상적인 데이터인지 검사하는 것은 중요합니다. 매개변수 검사를 제대로 하지 않는다면 다음과 같은 결과가 발생할 수 있습니다. 예상치 못한 동작이 발생할 수 있다. 잘못된 결과를 반환할 수 있다. 예외를 던지면서 애플리케이션 동작이 중단된다. 잘못될 수 있는 상황들을 예시로 보겠습니다. 🟧 예상치 못한 동작이 발생할 수 있다. 메서드는 정상적으로 실행됐으나 다른 객체를 잘못된 상태로 바꿔놓을 수 있습니다. Deck에서 카드를 뽑을 때 문제 없이 카드를 가져와야 정상적인 동작입니다. 하지만 덱을 생성할 때 빈 컬렉션이 매개변수로 들어갔습니다. Deck deck = new Deck(initData()); 아무런 문제가 없다고 생..
Item 26 Raw Type을 사용하지 말라. ✅ Raw Type? Raw Type은 제네릭 타입에서 타입 파라미터를 사용하지 않은 때를 의미합니다. 오라클 공식 문서를 보면 다음과 같이 기재되어 있습니다. 4.8. Raw Types To facilitate interfacing with non-generic legacy code, it is possible to use as a type the erasure (§4.6) of a parameterized type (§4.5) or the erasure of an array type (§10.1) whose element type is a parameterized type. Such a type is called a raw type. 제네릭을 사용하지 ..