티스토리 뷰

 

자바스크립트는 명령형(imperative)함수형(functional)프로토타입 기반(prototype-based) 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어다.

 

 

오늘은 객체지향 프로그래밍. 함수형 프로그래밍. 그리고 프로토타입에 대해서 다시 복습해볼것이다. 


객체지향 프로그래밍


객체지향 프로그래밍이란.

하나의 모델이되는 청사진을 만들고, 그 청사진을 바탕으로 한 객체!를 만드는 프로그래밍 패턴.

 

여기서 청사진은 class, 만들어진 객체는 Instance라고 불린다.

 

인스턴스를 만들때 어떻게 만드는가? ----------------> new라는 키워드를 통해서 만들게된다.

 

ES5에서는 function키워드를 썻으나. ES6에서는 class가 추가되어 class키워드를 사용하여 만든다.

!!! 생성자 함수인 constructor 는 return값을 만들지않는다. 

 

아래와 같은 방식으로 만들어지게된다. 

class Car {
constructor(brand,name,color)
//인스턴스가 만들어질때 실행되는 코드
}

new키워드를 통하여 class의 인스턴스를 만들어낼수있다.

인스턴스는 상속을 받는데. class의 속성과 메소드를  상속받을 수 있다.

 

속성과 메소드가 어떻게다르냐?

속성은, 브랜드, 차 이름, 색상, 현재 연료 상태, 최고 속력 등이 있을 수 있습니다. 메소드는 쉽게 말해 "객체에 딸린 함수"입니다. 연료 주입, 속력 설정, 운전 등이 메소드

 

 

속성을 살펴보자

class Car {
constructor(brand,name,color)
 	this.brand = brand
    this.name = name
    this.color = color
}

 

this는 인스턴스 객체!를 가르킨다. 여기서 this는 만들어진 인스턴스에 해당 브랜드, 이름, 색상을 부여하겠다는 의미

 

 

메소드를 살펴보자

 

class Car {
constructor(brand,name,color)
refuel(){}
}

 

 

그렇다면 상속받은 인스턴스가 이것을 어떻게 사용하는지 알아보자

 

let mini = new Car('bmw', 'mini','newCar');
mini.brand // 'bmw'
mini.refuel() // mini에 연료를 주입합니다.

 


아니 그래서! 객체지향 프로그래밍은 그렇다면

하나의 모델이되는 청사진 class를 만들고, 그 청사진을 바탕으로 한 객체! instance를 new를 통해 만드는 프로그래밍 패턴. 이라고만 말하면될까?

맞긴하지만..우리는 조금더 전문적으로 들여다볼 필요가 있다.

 

즉 객체지향 프로그래밍이 왜생겼냐. 데이터 접근과 처리과정에 대한 모형을 만들어내어 좀더 효율적으로 프로그래밍을 처리하기위해서다.

 

자바스크립트는 엄밀히 말해 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성할 수 있다. 

 

아무튼 객체지향으로 설계를 해야 좀더 좋은 코드가 될 수 있다.

그렇다면 객체지향적으로 설계를 하려면 어떻게 해야하는가?

 

1. 상속 : 클래스개념에서 상위 클래스(부모)로 부터 하위 클래스(자식)이 유산을 물려받는것과 같이, 부모의 메소드나 변수를 사용할 수 있는 것을 말함.
2. 다형성 : 같은 함수가 있다고 칠대 그 함수가 매개변수에 따라 다른 역할을 할 수 도 있다. 
3. 캡슐화 : 보통 데이터를 은닉시킨다고 표현하는데, 외부에서 쉽게 데이터를 접근할 수 없게 만들기도하고,  데이터(속성)와 기능(메소드)을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 것 -> 아래 예시처럼 

 

class Car {
constructor(brand,name,color)
 	this.brand = brand
    this.name = name
    this.color = color //속성
    refuel(){} //메소드. 기능
}


4. 추상화 : 공통적인 속성이나 기능을 묶어서 이름을 붙이는 것 ( a b d 이런게있다고 치면 이런건 알파벳이라고 묶을 수 있다) 또 내부는 복잡하게 설계되어있지만 밖에서 볼때는 간단하게 나타낸것을 추상화라고도 한다. 

 

 

 

자바객체지향 프로그래밍을 지원하는. 까지는 이제 알겠고. 다음 프로토타입으로 넘어가보자.

 

상속을 구현할 수 있는 문법을 프로토타입이라고 한다.

프로토타입은 원형객체이다. 좀 쉽게 생각하자면 유전자에 빗대어 볼 수 있다.

 

다른말로는 메소드와 속성을 상속받기위한 템플릿

 

prototype에 값을 추가하면 모든 자식들이 물려받기가 가능하다. 

 

__proto__를 통하여 prototype 객체를 볼 수 있다.

 


함수형 프로그래밍


초콜렛을 만드는 두 공장이 있다고 생각해보자.

 

하나는 비함수형으로작업을 하며 하나는 함수형으로 작업한다.

 

함수형은 각각마다 자신의 역할이 딱 정해져있다. 카카오 분쇄하는역할을 하는 아이는 그것만 하고 다른일에 대해서는 알지못한다.

자신의 역할을 다하고 넘겨주고

1. input output이 명확하다는 특징이있다. 

2. 외부환경으로부터 철저하게 독립적이다.

3. 같은 인풋에대해서 언제나 동일한 아웃풋을 생산함.

 

비 함수형의 경우

여러 함수들이 손을 대는 외부 변수에 오류가 생기면 공장 프로세스에 차질이 생길 수 밖에없다.

단순 담백한것에비해서? side effect가 생길 일이 많아진다

 

부작용 부수효과는 어떤 함수의 동작에 의해 프로그램 내 특정상태가 변경되는 상황을 의미한다.  변경된 상태는 다른 동작들에게 영향을 미친다.

 

꼬여버리는 이런일이...

고객계좌에 돈넣고 빼는 상황에 이런일들이 발생하면? 개망..

 

 

함수형 프로그래밍의 대표적 특징과 요소들을 알아보자!

 

1. 함수형 프로그래밍은 '선언형'이다. 

 

함수형 배우기이전에 우리가 알고있는것은 '명령형'이다.  너는 이걸해! 너는 이걸해! 명령을 통하여 결과를 산출하는 명령형

선언형은 이거는 = 이거다. 이렇게 사고하는 개념이다. 무조건 이결과라고 장담하는것

함수형 방식으로 짜인 함수 즉 ! 순수 함수 인풋만 똑같으면 다른것에 영향을 안받고 같은 값이 나온다.

 

 

2. 함수도 '값'이다.

언제나 숫자만 인자로 붙여주면 절대 예측가능한 숫자값을 뱉어내기에 '값'으로 함수를 바라본다.

 

함수를 값으로 보는이유가 무엇일까?

 

함수도 다른 함수에 인자로 넣어 줄 수 있다.

프로그래밍이 동작하는 중에 함수가만들어진다. 다른함수를 인자로받거나 결과로 반환하는 고계함수를 이용해서 다채로운 프로그래밍이 가능해진다.

 

자바스크립트는 함수형 특화 언어는 아니다.

 

  • 함수형 프로그래밍에 대해 설명해달라
     함수형 프로그래밍은 순수함수와 보조 함수의 조합을 통해 로직내에 존재하는 조건문과 반복문을 제거하여 복잡성을 해결하고 변수의 사용을 억제하여 상태 변경을 피하려는 프로그래밍 패러다임이다.
  • 함수형 프로그래밍에 개념에서 순수함수란 무엇인가
    순수함수는 같은 입력이 주어지면, 같은 출력을 반환해야하고, side effect(부작용) 이 없어야한다.
    결국, 함수형 프로그래밍은 순수함수를 통해 sideeffect를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이려는 노력의 한 방법
  • OOP와 함수형 프로그래밍의 가장 큰 차이점은 무엇인가
    객체지향 프로그래밍의 경우, 클래스 디자인과 객들의 관계를 중심으로 코드 작성이 이루어진다. 따러서 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있다. 특히 멤버변수가 어떤 상태를 가지고있는가에 따라 결과가 달라진다. 이에 반해 함수형 프로그래밍의 경우, 값의 연산 및 결과 도출 중심으로 코드작성이 이루어진다. 함수 내부에서 인자로 받은 값을 별도로 저장하거나 하지 않고간결한 과정으로 처리하고 매핑하는데에 주 목적을 둔다. (매핑(mapping)이란 하나의 값을 다른 값으로 대응시키는 것을 말한다)
    예를들면, 객체 지향은 상태를 저장하는 필드와 그 필드들을 이용해 기능을 제공하는 메소드를 만들고 클래스를 만듭니다. 반면 함수형은 몇몇 자료구조(list, map, set) 등을 이용해 최적화된 동작을 만들어낸다.

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함