1. 선언형 프로그래밍 (Declarative Programming)
・ 논리형 (logic), 함수형 (function)
・ 과정(flow)을 추상화하고 결과(What)에 기반하여 설명
function double(arr) {
return arr.map( item => item*2 );
}
1) 논리형 프로그래밍 (Logic Programming)
・ 비절차적 언어(non-procedual language) ( 실행 순서에 관계없이 원하는 결과를 정의 및 요청 (데이터베이스 SQL 문 등 )
・ 수학적논리와 일반적 논리(AND, OR ...)를 통해 프로그램을 표현하고 결과를 도출하는 프로그래밍 기법
2) 함수형 프로그래밍 (Functional Programming)
・ "순수함수(pure function)"를 조합하여 하나의 결과를 도출하는 프로그래밍 기법
・ 함수형 프로그래밍 특성
① 순수함수 (pure function)
a. 동일한 매개변수에는 동일한 결과를 반환 (same input, same output)
b. 부작용이 없음 (no-side effect)
- 매개변수는 변하지 않음 (매개변수, 원본 데이터 불변성)
- 예외(오류) 발생하지 않음
- 콘솔(console), 파일 등 출력 없음
② 불변성 (immutability)
a. 변하지 않는 값 (불변 값) → 데이터 영역 메모리
- 기본형 데이터(원시 값)는 불변 값이고, 참조형 데이터(객체(object), 배열(array))는 기본적으로 가변 값
※ 객체(object)는 freeze 등 기능을 통해 일부 불변 값으로 사용이 가능
var a = "abc"; // 데이터 영역에 "abc" 가 할당되고 'a'는 "abc" 주소 값을 저장
a = a + "def"; // 데이터 영역에 "abcdef" 가 할당되고 'a'는 "abcdef" 주소 값을 저장
var b = "abc"; // 'b'는 "abc" 주소 값을 저장
2. 명령형 프로그래밍 (Imperative Programming)
· 절차적 언어(procedual language), 객체지향형 (object oriented)
· 과정(flow)에 기반하여(How) 결과를 반환
function double (arr) {
var result = [];
// HOW
for( var i = 0; i < arr.length; i ++) {
result.push(arr[i]*2);
}
return result;
}
1) 절차지향 프로그래밍 (Procedual Programming)
· (프로그램) 흐름(flow)이 위→아래 방향으로 순차적 실행되는 프로그래밍 기법
· 프로그램 코드 전체는 서로 유기적으로 연결 (C 언어)
※ 컴퓨터의 처리구조와 흡사하기 때문에 처리 속도가 빠르지만 고정적인 실행 순서로 인해 코드 순서가 바뀌면 결과 또한 바뀌기 때문에 유지보수에 어려움이 있음
2) 객체지향 프로그래밍 (Object Oriented Programming, OOP)
· 객체(object)의 조합으로 구성되는 프로그래밍 기법
· 각 객체는 서로 메소드(method)를 통해 값을 처리
① OOP 구성
a. 클래스(Class)
- 메소드와 데이터(속성)가 정의된 독립된 객체
b. 객체(Object)
- 클래스의 인스턴스
c. 메소드(Method)
- 객체 안에 정의된 데이터에 접근하기 위한 인터페이스
② OOP 특성
a. 캡슐화 (encapsulation)
- 데이터(속성)와 메소드를 하나로 묶고(클래스) 구현 내용 일부를 외부에 감춤 (정보은닉)
- 객체 안에 정의된 데이터를 외부에서 직접 접근하는 것을 막고 메소드를 통해서만(인터페이스) 접근하도록 제한
b. 추상화 (abstraction)
- 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 및 기능을 간추려 내는 것
- 공통의 데이터(속성), 메소드를 모아 코드의 중복 제거 및 최소화하여 인터페이스로 정의
c. 다형성 (polymorphism)
- 동일한 이름의 메소드지만 (상황에 따라) 다른 결과를 반환
- 오버로딩(overloading) : 메소드 매개변수의 자료형 또는 개수를 다르게 하여 추가 정의
- 오버라이딩(overriding) : 메소드를 재정의 (매개변수 자료형 및 개수를 모두 동일)
d. 상속
- 클래스의 재사용 → 코드 재사용 및 확장
- 상속 관계에서 하위 클래스(Child)에서는 상속 받은 데이터(속성), 메소드 외에 새 데이터, 메소드를 추가 정의하여 코드 재사용 및 확장성을 보장 → 생산성과 유지보수 향상
'Study' 카테고리의 다른 글
[STUDY] 메모리 (RAM, Random Access Memory) (0) | 2021.11.03 |
---|---|
[STUDY] 자료구조(Data Structure) - 비선형 자료구조(Non-Linear Data Structure) (0) | 2021.11.02 |
[STUDY] 자료구조(Data Structure) - 선형 자료구조(Linear Data Structure) (0) | 2021.10.27 |
[STUDY] 기본기 (Study) - OSI 7 계층, TCP/IP 4 계층 (0) | 2021.10.02 |
[STUDY] 기본기 (Study) - 관점지향 프로그래밍(AOP, Aspect Oriented Programming) (0) | 2021.10.02 |
댓글