목록program() (15)
DINO NET
의존 관계 역전 원칙 Dependency Inversion Principle 상위 모듈은 하위 모듈의 구현 내용에 의존하면 안 된다. 상위 모듈과 하위 모듈 모두 추상화된 내용에 의존해야 한다. 두 클래스 A, B가 있을 때, A 클래스가 B 클래스를 사용하는 관계라고 한다면 A 클래스는 상위 모듈, B 클래스는 하위 모듈이라고 한다. 의존 한다는 말은 상위 모듈이 직접적으로 하위 모듈의 인스턴스를 사용하는 것을 말하는데, 의존을 하게 되면 하위 모듈이 바뀔 때 마다 상위 모듈 또한 계속 해서 수정을 해야하는 번거로움이 생기게 된다. (유지 보수의 어려움이 생김) 그러므로 추상 클래스를 이용하여 추상화 레이어를 만들어 주어야 한다. 1. 상위 모듈에는 추상 클래스의 자식 클래스의 인스턴스를 사용한다는 가..
인터페이스 분리 원칙 Interface Segregation Principle 클래스가 사용하지 않을 메소드에 의존할 것을 강요하면 안 된다. -> 클래스가 나중에 사용하지도 않을 메소드를 가지도록 강제하지 말라는 뜻 인터페이스 추상 클래스 중에서 추상 메소드만 있고 일반 메소드는 없는 것 추상 클래스를 상속 받는 자식 클래스는 추상 메소드를 반드시 오버라이딩 해야한다. 이는 강제로 메소드를 오버라이딩 해야하는 상황. 뚱뚱한 인터페이스: 많은 추상 메소드를 가지고 있는 인터페이스 뚱뚱한 인터페이스는 인터페이스 분리 원칙을 위반할 가능성이 높다. 뚱뚱한 인터페이스는 역할 인터페이스(role interface)로 작게 쪼개서 사용할 수 있음! -> 기능, 역할에 따라 쪼개야 한다.
리스코프 치환 원칙 Liskov Substitution Principle 부모 클래스의 인스턴스를 사용하는 위치에 자식 클래스의 인스턴스를 대신 사용했을 때, 코드가 원래 대로 작동해야 한다. -> 부모 클래스의 행동규약을 자식 클래스가 위반하지 말 것! 자식 클래스의 위반은 오버라이딩을 하는 과정에서 일어난다. 1. 자식 클래스가 부모 클래스의 변수 타입을 바꾸거나 메소드의 파라미터 또는 리턴 값의 타입 or 갯수를 바꾸는 경우 2. 자식 클래스가 부모 클래스의 의도와 다르게 메소드를 오버라이딩 하는 경우 1번의 경우에는 syntax error가 나므로 프로그램 상에서 오류를 잡을 수 있는 반면, 2번의 경우는 내용적으로 오류가 발생하는 경우이므로 실행 자체에는 오류가 발생하지 않으나 전혀 다른 결과를..
개방 폐쇄 원칙 Open-Closed Principle 클래스는 확장에 열려 있어야 하며, 수정에는 닫혀 있어야 한다. -> 어떤 클래스의 코드를 수정하지 않아도 기존 기능을 확장할 수 있어야 한다. 기존에 작성 되어 있는 코드들을 수정하지 않고 다른 코드들을 추가하여 기능의 확장만 하라는 뜻! -> 다형성(Polymorpism)을 이용하면 개방 폐쇄 원칙을 쉽게 지킬 수가 있다. 추상 클래스 여러 클래스들의 공통점을 추상화해서 모아놓은 클래스 확장 O -> 추상 클래스를 상속 받는 클래스들은 계속해서 추가가 가능 수정 X -> 추상 메소드는 상속 받는 클래스가 오버라이딩 하면 되므로 추상 클래스를 직접적으로 건들일 필요가 없음 개방 폐쇄 원칙 > isinstance 사용 개발의 편의성 up 코드의 유지..