큰 프로그램을 작게 나눠서 만들고 합치는 방식
동작들을 객체들에게 나눠서 수행하게 함
객체와 객체는 서로 협력관계
객체를 형으로 구분하여 표현
완성도가 있다.-> 기능을 수행하는 단위, 완전함을 갖는다.
정보가 은닉되어 있다. -> 객체의 정보가 밖에서 접근하거나, 밖에서 객체 내의 정보에 접근하지 못하게 한다
객체는 스스로 동작할 수 있는 환경을 가지고 있어야함(외부에 의존, 침략을 제한해야함)
접근제한자:
접근제한자의 범위가 항상 헷갈렸었었다.. 복습해서 잘알아둬야겠다...
[추상객체] 상위 부모 super
[구체객체] 하위, 자식,this
내가 예전에 생각했던 상속
공통된 기능을 여러 객체들한테 전달 하고 싶을때 사용한다고 생각
기준이 명확하고 포함(?)관계가 있을때
추상체와 구상체로 구분이 되는것
ex) 원자> 물질> 동물> 포유류 > 사람 > 남자 > 짱구
=>위로 올라갈 수록 추상화 되며 상대적 개념이다
class Logout{
void logout();
}
interface Logout{
abstract void logout();
}
형이 많다
형에 따라 구현해야할 메소드가 다름
다른 객체지만 형이 같기 때문에 Animal에 구현되어 있는 메소드만 사용할 수 있다.
Animal a= new Animal();
Animal c= new Cat();
=>같은 객체일지라도 접근하는 형에 따라 접근 할 수 있는 권한을 가진 것만 접근 할 수 있다.
이 부분도 자바 배울때 헷갈려서 그냥 무조건 형과 객체를 같은 것으로 했었다... 다시 알아두기...
(1) S(SRP): 하나의 객체에 너무 많은 기능을 줘서는 안됨-> 수정을 한다면 수정의 이유는 하나 때문이어야한다.
(2) O(OCP): 수정보다는 확장해서 기능을 변경하는 방식으로 만들어라
(3) L(LSP): 추상객체로 사용되는 부분에 구상객체가 들어가도 아무 문제가 없어야한다.
-> 공통기능 때문에 상속을 했다면 L원칙이 깨진다.
(4) I(ISP): 인터페이스를 나누어 써라
(5) D(DIP): 구현클래스는 자주 변경될 가능성이 높기 때문에 인터페이스를 통해 의존성을 줄여라