선언형 - 함수형
명령형 - 객체지향, 절차지향
1. 선언형과 함수형 프로그래밍
“프로그램은 함수로 이루어진 것이다” 를 담은 패러다임
함수를 일급 객체로 다루어 순수 함수를 쌓아 로직을 구현하고, 고차함수를 통해 재사용성 높임
- 순수 함수: 출력이 입력에만 의존하는 함수. 매개 변수에만 영향을 받으며 전역 변수 등 영향X
- 고차 함수: 함수가 함수를 매개변수로 받아 로직 생성 가능.
- 일급 객체: 고차함수를 쓰기 위한 조건으로
- 변수나 메서드에 함수 할당
- 함수 안에 함수를 매개변수로 담을 수 있음
- 함수가 함수 반환 가능
2. 객체지향 프로그래밍
객체들의 집합으로 상호작용을 표현함.
데이터를 객체로 표현하며 객체 내부의 메서드를 활용하는 방법으로 설계 시간이 오래걸리고 속도가 비교적 느림.
특징
- 추상화: 복잡한 시스템에서 핵심적인 개념 또는 기능을 간추려냄
- 캡슐화: 객체의 속성과 메서드를 묶고 일부를 외부로부터 감추어 숨김(private)
- 상속성: 상위 클래스의 특징을 하위 클래스가 물려받음
- 다형성: 하나의 메서드나 클래스가 다양하게 동작(오버로딩, 오버라이딩 등)
설계 원칙 - SOLID
- S - Single Responsibility Principle: 각 객체 하나의 책임만
- O - Open Closed Principle: 확장성 고려해 설계하고 수정할 때는 닫혀 있음(기존 코드 적은 변경)
- L - Liskov Substitution Principle: 하위 타입의 인스턴스로 문제 없이 치환 가능 (부모 객체에 자식 객체 넣어도 문제 없음)
- I - Interface Segregation Principle: 하나의 일반적 인터페이스보다 구체적인 여러 인터페이스
- D - Dependency Inversion Principle: 변하기 쉬운 객체에 의존하는 것을 역전시켜 변하기 쉬운 것의 영향을 받지 않도록
3. 절차지향 프로그래밍
로직이 수행되어야 할 연속적인 계산 과정으로 이루어짐.
일이 진행 되는 방식으로 구현하므로 가독성 좋고 빠르나, 모듈화 및 유지보수 어려움 존재