1. 함수형(선언형) 프로그래밍
- 선언형 : 무엇을 풀어내는가에 집중하고, 프로그램은 함수로 이루어져 있다는 패러다임
- 함수형 프로그래밍 : 순수함수들을 블록처럼 쌓아서 로직을 구현하고, '고차함수'를 통해 재사용성을 높인 패러다임
* 순수함수 : 출력이 입력에만 영향을 받는 함수
* 고차함수 : 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는것. 해당언어가 일급객체라는 특성을 가져야 함
* 일급객체 : 변수에 함수를 할당할 수 있고 함수안에 함수를 매개변수로 받고, 반환하는것이 가능한 언어
2. 객체지향형 프로그래밍
2.1 네가지특성
- 추상화 : 복잡한 시스템으로 부터 핵심적인 개념또는 기능만 간추리는 것
- 캡슐화 : 객체의 속성과 메소드를 하나로 묶고 일부를 감추어 은닉화
- 상속성 : 상위클래스의 특성을 하위클래스에서 재사용하거나 추가, 확장 하는것
- 다형성 : 오버로딩, 오버라이딩 등 매소드나 글캐스가 다양한 방법으로 동작하는 것
2.2 설계원칙(SOLID)
- Single responsibility principal(단일책임 원칙) : 모든 클래스는 각각 하나의 책임만을 가져야 하는 원칙. A라는 로직이 존재한다면 어떠한 클래스는 A에 관한 클래스 이여야 하며, 이 클래스를 수정하는 것은 A로직을 수정하는 것이여야 함
- Open close principal(개방폐쇄원칙) : 유지보수사항이 생긴다면 코드를 쉽게 확장할 수 있어야 하지만, 수정에는 닫혀있어야 함
- Liskov Substitution principle(리스코프 치환원칙) : 프로그램의 객체는 프로그램의 정확성을 꺠뜨리지 않으면서 하위타입의 인스턴스로 바꿀 수 있어야 함. 부모객체에 자식객체를 넣어도 정상 동작 해야함
- Interface Segregation Principle(인터페이스 분리원칙) : 하나의 일반적인 인터페이스보다 구체적인 여러개의 인터페이스를 만들어야 하는 것
- Dependency Inversion Principle(의존역전원칙) : 자신보다 변하기 쉬운것에 의존하던 것을 추상화된 인터페이스나 상위클래스를 두어 변하기 쉬운것에 영향받지 않게 하는 원칙
3. 절차형 프로그래밍
- 로직이 연속적으로 수행되는 것
- 코드의 가독성이 좋으며 구현속도가 빠름
- 모듈화가 어렵고 유지보수성이 떨어지는 단점