Software Engineering

객체지향(OOP)의 특징 4가지

JO_turn 2020. 10. 31. 15:50

1. Encapsulation(캡슐화)

    1-1 절차지향의 언어를 객체지향으로 바꾸어준다.

    1-2 속성(prototype)과 기능(method)을 캡슐화 한다.

    //데이터와 기능을 하나의 단위로 묶음

    1-3 구현 숨기기 및 동작 노출

    //구현 방법은 숨기고 동작 방식만 노출시킨다.

    1-4 느슨한 결합 : 언제든지 구현 수정

    1-5 복잡도 감소, 재사용율 증가

ex)

let age = 0;
let food = 'jelly';
let color = 'pink';
//속성(property)

function eat() {
  return 'Mmmmmmmmm jelly'
}
//기능(method)
class Grub {
  constructor() {
    this.age = 0;
    this.food = 'jelly';
    this.color = 'pink';
  }
  //속성
  eat() {
    return 'Mmmmmmmmm jelly';
  }
  //기능
}

let aGrub = new Grub;
aGrub.eat();
//"Mmmmmmmmm jelly"

//객체 지향 언어로 바꿔준다.

//method를 constructor 안에 넣어줄 수 있지만,

//인스턴스로 사용할 때마다 기능을 불러와서 메모리 효율이 떨어질 수 있다.

 

Encapsulation(캡슐화) 그림예제

 

2. Inheritance(상속화)

    2-1 부모의 특징(속성 및 기능)을 물려받는다.

    //extands, super()키워드 사용

    2-2 부모의 특징을 부분적으로 변경 및 추가를 할 수 있다.

    2-3 똑같은 코드를 계속 사용하지 않게 함

ex)

class Bee extands Grub{
//extands 키워드를 통해 base가 되는 class선택

  constructor() {
    super();
    //Grub의 속성을 가져오는 코드
    
    this.age = 5;
    this.color = 'yellow';
    this.job = 'Keep on growing';
    //Grub의 속성을 수정, 및 추가
  }
}

ex2)

class HoneyMakerBee extends Bee {
  constructor() {
    super();
    this.age = 10;
    this.job = "make honey";
    this.honeyPot = 0;
  }
  makeHoney() {
    this.honeyPot++
  }
  giveHoney() {
    this.honeyPot++
  }
  //기능 추가
}

//base(부모)의 특징을 물려받고(자식), 자식의 특징을 물려받는 자식을 만들 수 있다.

//constructor()과 super()에 인자를 넣어 특정한 특징만 받아올 수 있다.

 

 Inheritance(상속화) 그림예제

 

***pseudoclassical로 클래스를 정의 할때는, Object.create()키워드를 이용한다.

ex)

Bee.prototype = Object.create(Grub.prototype)
//똑같은 속성을 가진 prototype를 복사해서 새로운 prototype을 생성한다.
//자식의 prototype의 수정은 부모의 prototype에 영향을 끼치지 않는다.
Bee.prototype.constructor = Bee
//끊어져있던 Bee의 prototype를 재정의해준다.

3. Abstraction(추상화)

    3-1 사용자가 이용하기 편리하다.

    3-2 인터페이스가 간단해 보인다(가독성이 좋다.)

    3-3 복잡도 감소, 변경의 영향을 받지않게 한다.

 

Abstraction(추상화) 그림예제

 

 

4. Polymorphism(다형성)

    4-1 여러가지의 형태가 있다.

    4-2 오버라이딩

    //자식class에서 super()를 사용하지 않고 사용할 수 있다.

    4-3 오버러딩

    //인자의 개수를 다르게해서 구현한다.

    4-4

    ***현재 자바스크립트에서는 불가능한 기능

 

Polymorphism(다형성) 그림예제