[JS] 객체 지향 프로그래밍 (OOP)

윤태영 | Taeyoung Yoon·2022년 3월 1일
0

TIL (Today I Learned)

목록 보기
20/53
post-thumbnail

알아두고 가기
객체의 속성(property)은 키-값 쌍을 의미한다.
프로그래밍 패러다임이란 그 시대에 (인정된) 개발 방식이다.

절차지향 언어 (Procedural Programming)

(ex. C언어)

  • 개체를 순차적으로 처리한다
  • 프로그램 전체가 유기적으로 연결되어야 한다.
  • 컴퓨터의 처리구조와 유사하며 실행 속도가 빠르다.
  • 엄격하게 순사가 정해져 비효율적이다.
  • 유지보수가 어렵다

    메모리사용: 적음
    처리속도: 빠름
    재활용성: 낮음
    코드 이해: 어려움
    디버깅 : 어려움

객체지향 언어(Object-oriented Language)

(ex. C++,Java...)

  • 사람이 세상을 보고 이해하는 방법을 흉내낸 방법론이다.
  • 추상적인 개념(사람,사물 행동 등)인 객체를 만들어 상호작용하게 한다.

    메모리사용: 많음
    처리속도: 느림
    재활용성: 높음
    코드 이해: 쉬움
    디버깅 : 쉬움

구조

ECMAScript 6 방식

클래스 클래스명 { 
  속성
  메소드
}
class ClassName { 
  constructor(parameters){
    properties; attributes;
  }
  methods();
  behaviours();
}

ECMAScript 5 방식

function ClassName (parameters){ 
  properties; attributes;
}
ClassName.prototype.methods = function()
ClassName.prototype.behaviours = function()
  • 객체지향언어의 특징은 크게 4가지로 나눌 수 있다.
  • class도 선언이고 함수처럼 호이스팅이 된다.

캡슐화 (Encapulation)

  • 데이터(속성)와 기능(메소드)을 하나로 묶는다.
  • 외부에서 데이터와 코드의 형태를 알 수 없다. 구현은 숨기고 동작은 노출시킴(은닉화)
  • 느슨한 결합(Loose Coupling)에 유리하다. 언제든지 구현을 수정할 수 있다.

은닉화 방식

클로저로 변수를 은닉화
#을 이용해 필드 은닉화

추상화 (Abstraction)

내부 구현은 복잡하지만 실제로 노출되는 부분은 단순하다.
실생활에 예로 들면 부품설계는 절차적으로 진행됐지만 겉모습은 단순하며 버튼으로 간단하게 사용할 수 있는 제품이 있다.
라면끓이기 같은 행동(메소드)도 추상화 시킬 수 있겠다.

class는 철수
라면끓이기(){
  1. 냄비를 꺼낸다.
  2. 냄비에 물을 넣는다.
  3. 냄비를 가스레인지에 올린다.
            .
            .
            .
  }

다형성 (Polymorphism)

  • 똑같은 메소드라 하더라도 다른 방식으로 구현될 수 있다.
class는 철수
라면끓이기(){
  계란 넣을까?      -> 계란라면
  떡을 넣을까?      -> 떡라면
  푹 익힐까?
  파를 넣을까?
    .
    .
    .
  }

상속 (Inheritance)

  • 부모 클래스(기본 클래스(base class))의 특징을
    자식 클래스(파생 클래스(derive class))가 물려받는다.
  • 자식이 부모의 메소드를 다양하게 사용할수있다.

프로토타입 체인 (prototype chain)

문제풀이

부모클래스 (기본클래스)

class Grub {
  constructor(age, color, food){
    this.age = 0;
    this.color = 'pink';
    this.food = 'jelly';
  }
  eat () {
    return 'Mmmmmmmmm ' + this.food
  }
}

module.exports = Grub;

자식클래스 (파생클래스)

const Grub = require('./Grub');

class Bee extends Grub {
  constructor (age, color, food, eat, job){
    super(food, eat);

    this.age = 5;
    this.color = 'yellow';
    this.job = 'Keep on growing'
  }
}

module.exports = Bee;

그밖에

instance 이해

  • ex)클래스 Animal의 인스턴스는 dog, dog는 객체

syntactic sugar 이해

  • 프로그래밍 언어 차원에서 제공되는 논리적으로 간결하게 표현하는 것
  • 중복되는 로직을 간결하게 표현하기 위해 나타나게 되었다.
  • 언어차원에서 제공되는 syntactic sugar로 삼항연산자가 있다.

arguments 이해

  • arguments는 모든 함수 내에서 이용 가능한 지역 변수이다.
  • 함수에는 arguments라는 변수에 담긴 유사 배열이 있다. 이 배열에는 함수를 호출할때 입력한 인자가 담겨있다.

0개의 댓글