본문 바로가기
Study

[STUDY] 기본기 (Study) - 선언형(Declarative), 명령형(Imperative)

by 물코더 2021. 10. 2.

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)에서는 상속 받은 데이터(속성), 메소드 외에 새 데이터, 메소드를 추가 정의하여 코드 재사용 및 확장성을 보장 → 생산성과 유지보수 향상

 

반응형

댓글