class Cal{ 수학 연산 관련 메소드... }
// 인터페이스 public interface iface{ public boolean isTrue(); } // 구현 클래스 A public class A implements iface{ @Override public boolean isTrue(){ return true; } } // 구현 클래스 B public class B implements iface{ @Override public boolean isTrue(){ return false; } } // main public class main{ public void main(...){ // 이때는 문제가 없음 iface a = new a(); iface b = new b(); // 클라이언트가 직접 구현 클래스를 선택하여 클라이언트 코드가 변경됨 // 다형성을 이용했지만 OCP 원칙이 깨짐 iface a = new b(); } }
public class parent{ // 더하기 기능 public int add(int i, int j){ return i + j; } } public class child extends parent{ // 부모 클래스의 add 메소드의 기능은 더하기인데 // 자식 클래스의 add 메소드는 빼기로 오버라이딩하여 부모 클래스의 add 메소드 기능을 무시 @Override public void add(int i, int j){ return i - j; } }
interface People { public void cook(); // 요리 public void cleaning(); // 청소 public void work(); // 일 public void submit(); // 제출 } // People 인터페이스의 기능을 보면 cook(), cleaning()은 가정부가 하는 역할이고, work(), submit()은 직장인이 하는 역할이다. // 그래서 People 인터페이스를 더 구체적으로 인터페이스를 분리하는 것이 ISP 원칙이다. interface housekeeper{ public void cook(); // 요리 public void cleaning(); // 청소 } interface worker{ public void work(); // 일 public void submit(); // 제출 }