TIL - JavaScript 객체 지향 (OOP, Object-oriented programming)

sunn·2022년 1월 17일
0

클래스와 인스턴스

class - 하나의 모델이 되는 청사진 (클래스를 차(car)로 정했을 때에는)
instances - 그 청사진을 바탕으로 한 객체 (해당 차의 대한 모델명, 색상, 브랜드 등이 해당)

객체지향 프로그래밍의 특징

  • 캡슐화 - 데이터(속성)와 기능(메소드)을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 것

코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합한다. (느슨한 결합)

데이터나 내부 구현이 외부로 노출되지 않도록 만든다. 디테일한 구현이나 데이터는 숨기고, 객체 외부에서 필요한 동작(메소드)만 노출시켜야 합니다. (은닉화)

코드가 복잡하지 않게 만들고, 재사용성을 높입니다.

  • 상속 - 부모 클래스의 특징을 자식 클래스가 물려받는다.

불필요한 코드를 줄여 재사용성을 높입니다

  • 추상화 - 내부 구현은 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념

인터페이스가 단순해집니다. 너무 많은 기능들이 노출되지 않은 덕분에 예기치 못한 사용상의 변화가 일어나지 않도록 만들 수 있습니다.

캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메소드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있습니다.

코드가 복잡하지 않게 만들고, 단순화된 사용으로 인해 변화에 대한 영향을 최소화합니다

  • 다형성 - 다양한 형태를 가질 수 있다. (Polymorphism)

동일한 메소드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해집니다

ES6와 ES5에서의 클래스 문법 사용

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

refuel() {
 console.log(`${this.name} is refuel`)
}
drive() {
 console.log(`${this.name} is driving now`)
}
} // in ES6
class Car (brand, name, color) {
	this.brand = brand
	this.name = name
	this.color = color
}

Car.prototype.refuel = function() {
 console.log(`${this.name} is refuel`)
}
Car.prototype.drive = function() {
 console.log(`${this.name} is driving now`)
}
} // in ES5

보통 ES6 형태의 문법이 사용되고 있지만 이전에 사용되던 ES5의 형태도 알아두자.


새로 등장한 용어 이해하기

prototype - 모델의 청사진을 만들 때 쓰는 원형 객체 (original form)
constructor - 인스턴트가 초기화 될 때 실행하는 생성자 함수
this - 함수가 실행 될 때 마다 생성되는 고유한 실행 context
new 키워드로 인스턴스를 생성했을 때에는 해당 인스턴스가 바로 this 값이 됨
(this라는 말 그대로 함수 실행 후 '지금'의 값!)


// class로 만든 카운터
class Counter {
  constructor() {
    this.value = 0; // 생성자 호출을 할 경우, this는 new 키워드로 생성한 Counter의 인스턴스입니다
  }
  increase() {
    this.value++
  }
  decrease() {
    this.value--
  }
  getValue() {
    return this.value
  }
}

let counter1 = new Counter() // 생성자 호출
counter1.increase()
counter1.getValue() // 1

결국 객체지향 프로그래밍이란 -

코드의 복잡도를 낮추는 방식을 뜻하고 그 과정은 서로 연관되어있는 함수와 변수들객체라는 이름으로 그룹화(grouping)하고 동작내용과 연관된 이름을 붙여 다른 함수들과 구분되게 분류하는 것이 될 수 있다.

profile
:-)

0개의 댓글