인터페이스5 객체는 인터페이스를 사용해 참조하라 cf) Item.51 : 매개변수 타입으로 클래스가 아닌, 인터페이스를 사용하라 → 객체는 클래스가 아닌 인터페이스로 참조하라로 확장 적합한 인터페이스만있다면 매개변수뿐 아니라, return, 변수, 필드를 전부 인터페이스 타입으로 선언하자 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때뿐이다. 인터페이스를 타입으로 사용하는 습관은 프로그램을 훨씬 유연하게 만들어 준다 // Good Set sonSet = new LinkedHashSet(); Set sonSet = new HashSet(); //유연하게 변경가능 // Bad LinkedHashSet sonSet = new LinkedHashSet(); 인터페이스를 타입으로 사용하면 이후 구현 클래스를 교체할 때 새 클래스의 생성자(혹은 다른 .. 2022. 5. 15. 마커 인터페이스(Marker Interface) 마커 인터페이스 : 아무 메서드도 선언되어있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시하는 인터페이스 ex) Serializable : 자신을 구현한 클래스의 인스턴스는 ObjectOutputStream을 통해 Write(Serialization)이 가능하다는 것을 알려줌 마커 어노테이션이 등장하면서 마커 인터페이스는 구식이 되었다고들 얘기하지만, 사실은 그렇지 않다. # 마커 인터페이스의 장점 마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있으나, 마커 어노테이션은 그렇지 않다. 마커 인터페이스는 어엿한 타입이므로, 마커 어노테이션을 사용했다면 런타임 때 발견될 오류를 컴파일 타임에 잡을 수 있다. ObjectOutputStream.writeObjec.. 2022. 3. 20. 인터페이스 - 타입을 정의하는 용도로만 사용하기 인터페이스의 역할 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. → 클래스가 인터페이스를 구현한다는 것 : 자신의 인스턴스로 무엇을 할 수 있는 지 의미를 전달 인터페이스는 위에서 언급한 용도로만 사용되어야 한다. 잘못된 인터페이스의 용도 상수 인터페이스 상수 인터페이스 : 메서드 없이, 상수를 뜻하는 static final 필드로 구성된 인터페이스 public interface PhysicalConstants { // 아보가드로 수 (1/몰) static final double AVOGADROS_NUMBER = 6.022_140_857e23; // 볼츠만 상수 (J/K) static final double BOLTZMANN_CONSTANT = 1.380_648_52e.. 2022. 2. 7. 인터페이스 설계 - 구현하는 개발자를 생각하자 # default Method 자바 8 이전 기존 구현체를 깨뜨리지 않고, 인터페이스에 메서드 추가 방법 전무후무 - 인터페이스에 메서드 추가하면 대부분 컴파일 오류 발생 - 추가된 메서드가 기존 구현체에 존재할 가능성 희박 자바 8 이후 기존 인터페이스에 메서드를 추가할 수 있도록 디폴트 메서드 추가 핵심 컬렉션 인터페이스들에 많은 디폴트 메서드 추가 for lambda 활용 디폴트 메서드 선언시, 그 인터페이스를 구현한 후에 디폴트 메서드를 재정의하지 않은 모든 클래스에서는 디폴트 구현이 사용 단, 디폴트 메서드는 구현 클래스에 대한 정보 없이 무작정 삽입(추가) 된 것이므로 주의해야 한다. 자바 라이브러리의 디폴트 매서드는 코드 품질이 높고 범용적이므로 대부분의 상황에서 잘 작동 하지만, 생각할 수.. 2022. 2. 7. 인터페이스가 추상 클래스보다 우선인 이유 자바가 제공하는 다중 구현 메커니즘 - Interface (자바 8부터 default 메서드 제공) - Abstract Class 인터페이스와 추상 클래스 공통점 선언 내용은 존재, 하지만 구현 내용은 없음(추상 메서드를 가진다) 인스턴스 생성이 불가하다. 각각의 목적 인터페이스 Has - A 관계 : 함수의 껍데기만 존재하여 구현을 강제화 함 이를 통해 구현 객체가 같은 동작을 하도록 보장 다중 상속 - 여러개의 인터페이스를 구현이 가능하다. 인스턴스 필드를 가질 수 없고, public이 아닌 정적 멤버도 가질 수 없다(자바 9 부터 private static 메서드 구현 가능) 추상 클래스 IS - A 관계 : 추상 클래스를 상속하여 해당 클래스의 기능을 이용하고 또는 기능을 추가한다. 다중 상속 -.. 2022. 2. 6. 이전 1 다음