각자 다른 프로그래밍 방식을 가지고 있지만, 하나만 선택해서 프로그래밍하는 개념이 아니라 상황에 맞게 선택해서 사용이 필요하다고 함
1. 절차지향 프로그래밍 (Procedural Programming)
- 컴퓨터가 해야 할 일을 시간의 흐름에 따라 순차적으로 프로그래밍하는 방식
- 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리하지만, 유지보수 및 디버깅이 어려움
- 예) 메모를 할 때, 하나의 메모장에 생각나는대로 순차적으로 작성. 대표적인 예로는 C언어.
2. 객체지향 프로그래밍 (Object-Oriented Programming)
- 역할별로 클래스를 나누어 프로그래밍 하는 방식
- 하나의 사물 (객체) 에 하나의 의미를 부여하는 것처럼 프로그래밍
- 핵심 기능을 모듈화하여 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용 하기 때문에 하드웨어의 처리양을 획기적으로 줄여줌.
- 그러나 처리속도가 절차지향보다 느리고 설계에 많은 시간소요
- 예)
- 뭔가 자를 것이 필요하면 '✂️' 를 떠올림 (class Sciccors)
- 종이에 적을 게 필요하면 '✏️' 을 떠올림 (class Pen)
- 클래스 -> TV, 객체 -> 프로그램
3. 관점지향 프로그래밍 (Aspect-Oriented Programming)
- 객체지향을 더욱 발전 시키기 위한 개념의 하나. 하나의 소프트웨어가 하나의 거대한 OOP로써 설계, 프로그래밍 되었다면 이것을 각 기능별로 모듈화 해서 분리 시키는 개념.
- 관점지향의 핵심은 공통 모듈을 분리시켜 해당 소스 코드가 외부의 다른 클래스에서 존재하는 것.
-CORE CONCERN(핵심관심): 각 서비스의 핵심 비즈니스 로직
예: 계좌이체, 입출금, 이자계산
-Crosscut Concern(횡단관심): 공통 모듈
예: 보안, 예외처리, 로깅 등