Interface 2

인터페이스 default 메소드와 static 메소드

기본 메소드 (Default Methods) 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있다. 기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다. 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다. 반드시 문서화 할 것. (@implSpec 자바독 태그 사용) public interface Foo { void printName(); /* * @implSpec * 이 구현체는 getName()으로 가져온 문자열을 대문자로 바꿔 출력한다. */ // getName() 에 null 값이 들어올 수 있음. 문제가 된다면 구현 클래스에서 재정의하자. default void printNameUpp..

Interface

인터페이스는 약속된 행위를 하도록 정의 한 후 실제 내부를 어떻게 구현할지는 각 Implements 에 따라 따로따로 만들 수 있게 하는 것이 인터페이스이다. 실제 다형성을 구현할 때 인터페이스를 많이 사용하게 된다. Implements 가 많아서 그것을 인터페이스 하나로 정의하여 사용하고 싶거나, 해당 소스코드가 라이브러리가 되어 외부사람한테 제공할 때 유용하게 쓰일 수 있다. (* 다형성 : 실제 오브젝트의 형태는 하나인데, 거기서 함수를 호출했을때 각 구현에 따라 그 행태가 달라지는 것 ) 단점은 코드가 읽기 어려워지고, 디버깅이 어렵다. 비지니스 요구가 계속 바뀌는 업종일 경우 인터페이스를 무작위로 추가하게되면 Implements 와 인터페이스 두 개다 계속해서 바꿔야 하는 상황이 와서 불편하다...