
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다.
1.Class
같은 종류 집단에 속하는 속성, 행위를 정의한것
2.Object
클래스의 인스턴스로 실제 메모리에 할당 된 것이다. 객체는 자신 고유의 속성을 가지며 클래스에서 정의한 행위를 수행할 수 있다.
3.Method
클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을 내리는 메세지라고 할 수 있다.
groupping을 한다고 생각하면 이해하기가 쉽다. 예시를 한번 들어보자.
let baseSalary = 30_000;
let overtime = 10;
let rate = 20;
function getWage(baseSalary, overtime, rate){
return baseSalary + (overtime * rate)
}
이것은 Procedural langauge의 예시이다. 보다싶이 3개의 매개변수가 들어가 있는 것을 알 수 있다. 만약에 각각 다른 salary를 받는 100명의 사원의 정보를 사용하여 아래에 있는 함수를 실행시켜 보고 싶다고 가정하자.
이러한 비효율적인 상황을 해결하기 위해서 객체 지향 프로그래밍을 하는 것이다. 만약에 위에 방식으로 코드를 짠다면 사원의 수만큼 변수를 다시 선언 해줘야 하는 일이 발생하게 된다. 효율을 위해서 encapsulation을 사용하는 것이다.
let employees = {
baseSalary:30_000,
overtime :10,
rate: 20,
getWage: function(){
return this.baseSalary +(this.overtime* this.rate)
}
}
employees의 변수안에 객체를 사용해서 사원의 임금 정보를 넣어주었다. 여기서 우리가 볼 수 있는 것은 매개변수에 들어간 값이다. 객체 지향 프로그래밍에서는 매개변수가 적을수록 좋은 함수라고 여겨진다. 매개변수가 적을 수록 함수를 유지하고 사용하기가 편하기 때문이다.
let Car = function() {
let someInstance = {};
someInstance.position = 0;
someInstance.move = function() {
this.position += 1; // this === someInstance
}
return someInstance; // 인스턴스 반환
};
var extend = function(to, from) {
for(var key in from) {
to[key] = from[key];
}
};
let someMethods = {}; // 함수 Car 외부에 인스턴스에게 공유할 메서드 정의 및 할당
someMethod.move = function() {
this.position += 1; // 함수 extend 통해 this === someInstance
};
let Car = function() {
let someInstance = {};
someInstance.position = 0;
someInstance.move = function() {
this.position += 1; // this === someInstance
}
return someInstance; // 인스턴스 반환
};
let car1 = Car(5);
Colored by Col
var obj1 = Object.create(Object.prototype);
let Car = function(position) {
this.position = position;
};
Car.prototype.move = function() {
this.position += 1;
};
let car1 = new Car(5);
- 자바스크립트는 class라는 개념이 없다
- class가 없는 대신에 prototype이라는 것이 존재하는데 이것을 이용해서 클래스가 하는 일인 상속을 흉내내서 사용함
- 자바스크립트에서는 함수와 new 생성자를 사용해서 클래스와 비슷하게 구현이 가능하다
사진 출처: https://medium.com/@simba3310/learn-the-four-pillars-of-object-oriented-programming-oop-f2358e1aa623