불필요한 부분을 제거함으로서 필요한 핵심만 나타냄.
다양한 형태를 가지는 것
객체 내부의 세부사항을 외부로부터 감추는 것
부모로부터 물려받는 것
SRP: Single Responsibility Principle (단일 책임의 원칙)
하나의 책임을 가진다.
OCP: Open/Closed Principle (개방 폐쇄의 원칙)
확장에는 열려있지만 변경에는 닫혀있다.(기존 코드를 변경하지 않고 기능을 추가할 수 있어야 한다.)
LSP: Liskov’s Subsititution Principle (리스코프 치환의 원칙)
상위 타입의 객체를 하위 타입의 객체로 치환해도 동작에 전혀 문제가 없어야 한다.
ISP : Interface Segregation Principle (인터페이스 분리의 원칙)
많은 기능을 가진 인터페이스를 작은 단위로 분리시킴으로써 클라이언트에게 필요한 인터페이스만 구현하도록 하는 개념 (클라이언트가 사용하지 않는 기능에 의존하게 되면, 예상하지 못한 문제가 발생할 수 있기 때문에 이를 예방하기 위함)
DIP : Dependency Inversion Principle (의존성 역전의 원칙)
의존관계를 맺을 때, 자주 변경되는 쪽이 아닌, 변경이 거의 일어나지 않는쪽에 의존하라는 의미 (자기보다 변하기 쉬운 것에 의존하게 되면 영향을 많이 받기 때문에 상위 클래스나 인터페이스를 둬서 변화에 영향을 받지 않게 하기 위한 원칙)
(하나하나에 큰 의존성을 두지 않음 ?)
하나의 메소드에서 게터를 통해 값을 가져온 뒤에 이곳에서 모든 처리가 집중되어 있다면 ,
절차지향 방식
해당 책임을 가진 객체에게 협력하도록 구현하는 방식
객체지향 방식
→ 서랍정리
비슷한것끼리 하나로 모아두고 , 다른 성격의 것들은 분리시킴으로서,
비슷한 것 → 높은 응집도 , 다른 성격의 것들은 분리시키는게 낮은 결합도
높은 응집도
공통적인 상태와 행동을 가진 객체들을 타입으로 분류 할 수 있다. → 이걸 기반으로 클래스를 구현
클래스 : 공통적인 상태와 행동을 가진 객체들을 추상화하는 것 (복잡성을 낮출 수 있다.)
클라이언트와 협력할 수 있는 퍼블릭 인터페이스를 정의한다.