객체 지향 프로그래밍이란 현실 세계를 컴퓨터로 옮겨와 프로그래밍하는 것을 말한다. 현실 세계의 사물들을 객체라 보고 그 객체로 부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍 한다. 이것을 추상화라고 한다.
SRP (Single Responsibility Principle) : 단일 책임 법칙
클래스는 단 하나의 책임을 가져야 하며, 변경하는 이유는 단 하나의 이유여야 한다.
OCP( Open-Closed Principle) : 개방 폐쇄 원칙
확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다
LSP(Liskov Substitution Principle): 리스코프 치환 원칙
상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상 작동해야한다
ISP (Interface Segregation Principle): 인터페이스 분리 법칙
인터페이스는 그 인터페이스를 사용하는 클라이언트로 부터 분리해야한다.
DIP (Dependency Inversion Principle): 의존 역전 원칙
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
장점
- 코드의 재사용성이 높다
- 코드의 관리가 용이하다
- 신뢰성 높은 프로그래밍이 가능하다
단점
- 객체가 상태를 갖게 되어 해당 변수로 인해 객체가 에측할 수 없는 상태를 갖게 될 경우 애플리케이션 내부에서 버그를 발생시킨다. 이런 단점으로 함수형 패러다임이 주목받고 있다.
함수형 프로그래밍이란?