728x90
🔑프로그래밍 패러다임
프로그래머에게 프로그래밍의 관점을 갖게 하는 역할을 하는 개발 방법론
🔑선언형과 함수형 프로그래밍
- 선언형 프로그래밍
- "무엇을" 풀어내는가에 집중
- "프로그램은 함수로 이루어진 것이다"라는 명제가 담겨 있음
- 함수형 프로그래밍
- 선언형 패러다임의 하위 카테고리
- 순수함수를 쌓아 로직을 구현하고 고차 함수를 통해 재사용성을 높임
- 순수함수 : 출력이 입력에만 의존함
- 고차함수
함수를 값채점 매개변수로 받아 로직을 생성할 수 있는 것
고차함수를 사용하기 위해서 해당 언어는 '일급 객체'라는 특징을 가져야 함- 일급 객체
- 변수나 메소드에 함수가 할당되어야 함
- 함수 안에 함수를 매개변수로 담을 수 있어야 함
- 함수가 함수를 반환할 수 있어야 함
- 일급 객체
- 자바 스크립트에서 선호하는 방식 : 단순하고 유명한 언어이면서 함수가 일급 객체임
🔑객체지향 프로그래밍(Object-Oriented Programming, OOP)
- 객체들의 집합으로 프로그램의 상호작용을 표현하고 데이터를 객체로 취급해 객체 내부에 선언된 메소드를 활용하는 방식
- 설계에 많은 시간이 소요되고 처리 속도가 상대적으로 느림
- 특징
- 추상화(abstraction)
복잡한 시스템으로부터 핵심적인 개념이나 기능을 간추려 냄 - 캡슐화(encapsulation)
객체의 속성과 메소드를 하나로 묶고 일부를 외부에 감춰 은닉하는 것 - 상속성(inheritance)
상위 클래스의 특성을 하위 클래서가 이어받아 재사용하거나 추가, 확장하는 것
코드의 재사용, 계층적 관계 생성, 유지 보수 측면에서 중요 - 다형성(polymorphism)
하나의 메소드나 클래스가 다양한 방법으로 동작하는 것. 오버라이딩, 오버로딩 등으로 구현- 오버로딩(overloading) : 같은 이름을 가진 메소드를 여러개 두는 것. 컴파일 중 발생하는 정적 다형성
- 오버라이딩(overwriting)
상위 클래스로부터 상속받은 메소드를 하위 클래스에서 재정의. 런타임 중 발생하는 동적 다형성
- 추상화(abstraction)
- 설계원칙 : SOLID원칙
- 단일책임원칙(Single Responsibility Principle)
모든 클래스는 각각 하나의 책임만 가져야 한다. - 개방-폐쇄 원칙(Open Closed Principle)
기존 코드는 잘 변형하지 않으면서 확장은 쉽게 할 수 있어야 한다. - 리스코프 치환원칙(Liskov Substitution Principle)
프로그램의 객체는 프로그램의 정확서을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. - 인터페이스 분리원칙(Interface Secregation Principle)
하나의 일반적 인터페이스보다 구체적인 여러 개의 인터페이스를 만들어야 한다. - 의존 역전 원칙(Dependenty Inversion Principle)
상위 계층은 하위 계층의 변화에 대한 구현으로부터 독립해야 한다.
- 단일책임원칙(Single Responsibility Principle)
🔑절차형 프로그래밍
- 로직이 수행되어야 할 연속적인 계산 과정으로 이루어져 있음
- 코드 가독성이 좋고 실행속도가 빠라 계산이 많은 작업 등에 사용됨
- 모듈화하기 어렵고 유지 보수성이 떨어짐
🔑패러다임의 혼합
- 비즈니스 로직이나 서비스의 특징을 고려해 패러다임을 결정
- 여러 패러다임을 조합해 상황과 맥락에 따라 패러다임의 장점만 취해 개발하는 것이 좋음
내 생각에 프로그래밍 패러다임은 결론적으로 "어떻게 하면 가장 효율적으로 코드를 짤 수 있을까?"에 대한 대답인 것 같다.
어떤 언어는 객체 지향을 지원하고 어떤 언어는 절차형을 지원하고, 또 어떤 언어는 여러 패러다임을 혼합해 지원한다.
그러니까 결국 어떤 프로그래밍 패러다임이 가장 베스트인가? 에 대한 답은 없고 언어와 개발할 서비스에 맞춰 결정되는 것 이라는 생각이 든다.
때문에 프로그래밍 패러다임이 프로그래머들에게 프로그래밍의 관점을 갖게 해주는 것 이지 않을까?
728x90
'CS' 카테고리의 다른 글
[면접을 위한 CS 전공지식 노트] 2.3. 네트워크 기기 (2) | 2024.02.15 |
---|---|
[면접을 위한 cs 전공지식 노트] 2.2. TCP/IP 4계층 모델 (1) | 2024.02.11 |
[면접을 위한 CS 전공지식 노트] 2.1 네트워크 기초(2) (1) | 2024.02.06 |
[면접을 위한 CS 전공지식 노트] 2.1. 네트워크 기초(1) (1) | 2024.02.06 |
[면접을 위한 CS 전공지식 노트] MVC패턴, MVP 패턴, MVVP패턴 (0) | 2024.02.03 |