기존의 클래스를 재활용하여 새로운 클래스를 작성하는 것
객체의 공통적인 속성과 기능을 추출하여 정의하는 것
데이터의 보호를 위해 최소한으로 필요한 부분만 외부로 노출될 수 있도록 하는 것
객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할 수 있는 객체 지향의 특성
Method Overloading
두 메서드가 같은 이름을 갖고 있으나 인자의 수나 자료형이 다른 경우
Method Overridding
상위 클래스의 매서드를 하위 클래스에서 재정의 하는 것
SRP, OCP, LSP, ISP, DIP를 말한다.
모든 클래스는 각각 하나의 책임만 가져야 하는 원칙.
변경이 있을 때 파급 효과가 적으면 원칙을 잘 따른 것.
확장에는 열려있고 수정에는 닫혀있는 기존의 코드를 변경하지 않으면서(Closed) 기능을 추가할 수 있도록(Open) 설계가 되어야 한다는 원칙.
자식 클래스는 언제든 프로그램의 정확성을 깨뜨리지 않으면서 자신의 부모 클래스를 대체할 수 있다는 원칙.
한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 하는 원칙.
즉 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
추상화에 의존하고 구체화에 의존하지 않는 원칙.
즉 구현 클래스에 의존하지 말고, 인터페이스에 의존.