객체 지향 프로그래밍(Object Oriented Programming)은 프로그래밍에 필요한 데이터를 속성과 행위를 가진 객체(Object)로 만들어 상호작용 시키는 프로그래밍 방법이다. 객체 지향 프로그래밍에서 모든 것은 자급자족 가능한 객체로 분류된다.
예시)
동물들끼리 달리기 시합을 한다고 하자.
동물 중에는 강아지, 사슴, 치타가 있다.
결승선에 들어오면 각 동물들의 속도를 알 수 있다.
Object를 만들기 위한 형태(원형)라고 할 수 있다. Object를 생성하기 위해서는 속성과 행위를 정의해야 한다. 예시에서 동물의 특징(속성)과 행위를 정의한 객체가 바로 클래스이다.
Class의 인스턴스이다. Object는 위에서 정의해준 클래스의 속성과 행위를 가진 것을 토대로, 자기자신만의 속성과 행위를 가진다. 예시에서 Object는 '강아지', '사슴', '치타'가 된다.
Class로부터 만들어진 객체를 사용하는 방법이다. 예시에서 각 동물들이 결승선에 들어오면 속도를 알 수 있는 행위가 메서드라고 볼 수 있다.
관련된 속성과 기능의 모음을 한 캡슐(클래스)에 모은다. 코드를 수정하지 않고 재활용하는 것이 수월하다는 점이 캡슐화의 목적이다.
부모 클래스의 specification(속성&기능)을 그대로 물려받아 사용할 수 있다. 또한 기능의 어떠한 부분을 수정하고 싶을 경우, 상속 받은 자식 클래스에서 해당 기능만 수정하여 사용할 수 있다.
사용자로부터 불필요한(복잡한) 정보는 숨기고 중요한 정보만을 표시한다. 추상화를 통해서는 복잡성을 최소화 시킬 수 있다. 공통되는 속성과 기능을 객체 지향에서는 클래스를 정의하는 것과 비슷하다고 볼 수 있다.
이름 그대로 다양한 형태를 가지는 특성이다. 다형성에서는 행동을 공유하고, 공유된 행동을 특정한 것으로 대체할 수 있도록 객체를 설계한다. 이를 가능하게 하기 위해 Inheritance(상속)을 사용한다.
클래스가 나오기 전 자바스크립트에서는 Instantiation Patterns을 이용하여 인스턴스(객체)를 만들었다고 한다. Instantiation Patterns은 크게 네 가지 방식으로 분류할 수 있다.
코드 설명
코드 설명
Object.create()
메서드를 사용하여 지정된 prototype 객체 및 속성을 가지는 새로운 객체를 생성하게 된다.코드 설명
마찬가지로 prototype chain을 사용한다. 새 객체를 찍어낼 때 new
키워드를 사용하며, Prototypal Instantiation 방식을 통해 생성되는 대부분의 기능을 제공한다. Pseudoclassical Instantiation은 새 변수를 선언 후 Object.create()
를 할당하는 대신 this
를 사용한다. Pseudoclassical은 네 방식 중 가장 많이 쓰는 방식이기 때문에 꼭 기억해야 한다.
코드 설명
prototype은 객체의 형태(원형)이라고 볼 수 있다. 객체는 속성을 가지는데 prototype에 담겨있는 속성들은 생성자를 통해서 새로운 객체가 만들어질 때 해당 객체에 연결된다. 자바스크립트에서는 함수와 new
키워드를 통해 클래스 흉내를 낼 수 있다.
function animals() {
this.ears = 2;
this.legs = 4;
}
const dog = new animals();
const cheetah = new animals();
console.log(dog.ears); // 2
console.log(dog.legs); // 4
console.log(cheetah.ears); // 2
console.log(cheetah.legs); // 4
dog
와 cheetah
는 공통된 속성을 가지고 있지만, 출력 시 ears와 legs가 두 개씩 총 네 번 할당된다. 이런 경우 객체를 생성하는 횟수가 많아질수록 그만큼의 많은 데이터가 할당이 된다.function animals() {}
animals.prototype.ears = 2;
animals.prototype.legs = 4;
const dog = new animals();
const cheetah = new animals();
console.log(dog.ears); // 2
console.log(cheetah.legs); // 4
animals.prototype
이라는 빈 객체가 존재하고, 여기에 속성들을 넣어둔다. new
키워드와 함수 animals
를 이용하여 생성된 객체 dog
와 cheetah
는 저 빈 객체에 들어있는 속성들을 가져다가 사용할 수 있다.도움된 글