객체지향
객체(Object), 클래스(Class), 메시지(Message)
클래스 - 설계도. 객체를 생성할 수 있는 구조와 정보를 가지고 있는 틀
메시지 - 객체들 사이의 상호작용 수단. 어떤 객체가 다른 객체에게 특정 작업을 요청하는 신호
<<include>>
: 포함관계. 공통적인 기능. 유스케이스의 수행결과에 의존.<<extend>>
: 확장관계. 부가적으로 추가된 기능클래스명, 속성, 메서드로 구분한다.
ex)
컴퓨터 세트 ----집합관계---- 본체, 마우스, 모니터, 스피커, 키보드
본체 ----복합관계---- CPU, RAM, HDD
SRP(Single Responsibility Principle) - 단일 책임 원칙
: 클래스와 모듈은 단일 작업에 중점을 두어야 한다.
OCP(Open Closed Principle) - 개방/폐쇄 원칙
: 확장에는 Open하고 수정에는 Close되어야 한다.
클래스를 수정하지 않고도 클래스의 행위를 확장할 수 있어야 한다.
LSP(Liskov Substitution Principle) - 리스코프 대체 원칙
: 부모 클래스의 인스턴스를 해당 자식 클래스 중 하나의 인스턴스로 교체할 수 있게 설계해야 한다.
부모 클래스가 무언가를 할 수 있다면 자식클래스도 할 수 있어야 한다.
ISP(Interface Segregation Principle) - 인터페이스 분리 원칙
: 몇 개의 큰 인터페이스가 있는 것보다 작은 인터페이스가 많은 것이 바람직하다.
DIP(Dependency Inversion principle) - 의존성 역전 원칙
: 의존 관계 수립 시 변화하기 어려운 것에 의존해야 한다.
구체적인 클래스가 아닌 추상화(인터페이스나 추상 클래스)에 의존해야 한다. 코드의 결합도를 낮추고 유연성을 높일 수 있다.
ex)
도형의 면적을 계산하고 결과를 화면에 출력하는 클래스 - 단일 책임 원칙(SRP)위반(면적 계산, 결과 출력)
Rectangle 클래스를 상속받아 정사각형 Square 클래스 구현 - 리스코프 대체 원칙(LSP)위반