[TIL] OOP(Object Oriented Programming)
OOP(Object Oriented Programming), 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 프로그램을 명령어의 목록으로 보는 시각이 아닌 여러개의 독립된 객체들의 집합으로 파악하고자 한다. 이러한 OOP는 프로그램의 수정이 용이해 대규모 소프트웨어 개발에 많이 사용된다.
특징
기본적으로 class를 가지고 instance를 만든다.
- 자료 추상화
- 객체들의 공통적인 특징(속성, 기능)을 추출한다(클래스를 정의하는 과정)
- 내부는 복잡하지만 보이는 것은 간단하게 보일 수 있다
- 상속
- 상위 클래스의 특징을 하위 클래스에서 물려 받을 수 있다(부모와 자식관계와 비슷)
-
다중 상속
-
다형성 개념
- 상위 클래스로부터 같은 상속을 받더라도 하위 클래스의 기능은 다를 수 있다
- 동적 바인딩(캡슐화)
- 데이터의 구조와 데이터를 다루는 방법을 결합시킨다
기본 구성 요소
- Class 클래스
- Object 객체
- Method, Message 메소드, 메시지
클래스 만들어보기
function Person(name, level, value){
this.name = name;
this.level = level;
this.attValue = 0;
this.defValue = value + 3;
this.sumValue = function(){
return 'your power : ' + (this.attValue + this.defValue);
}
}
let warriorA = new Person('A', 1, 4);
let warriorB = new Person('B', 1, 3);
warriorA // Person {name: "A", level: 1, attValue: 0, defValue: 7, sumValue: ƒ}
warriorB // Person {name: "B", level: 1, attValue: 0, defValue: 6, sumValue: ƒ}
warriorA.sumValue(); // "your power : 7"
warriorB.sumValue(); // "your power : 6"
-
함수를 사용하여
Person
이라는 클래스를 만들고new
생성자 키를 통해 warriorA, warriorB 라는 인스턴스를 생성했다. 각 각의 인스턴스는 클래스라는 청사진을 통해 기본 정보를 입력받아 만들어진다. 다만 위 코드에서는sumValue
라는 메소드가 객체를 새로 생성할때마다 각각 할당된다. -
JavaScript의 모든 객체는
__proto__
라는 숨겨진 프로퍼티를 가지고 있다. 이는 자신의 부모인 프로토타입 객체를 가리키며 이러한 링크를prototype Link
라고 부른다. 또한 JavaScript의 모든 함수는prototype
라는 숨겨진 프로퍼티를 가지고 있는데 이는 자신에new
키워드를 붙여 생성한 객체의 부모를 가리킨다. 말이 너무 어려우니 위 코드를 가지고 풀어보는게 좋겠다.
function Person(name, level, value){
this.name = name;
this.level = level;
this.attValue = 0;
this.defValue = value + 3;
}
Person.prototype.sumValue = function(){
return 'your power : ' + (this.attValue + this.defValue);
}
let warriorA = new Person('A', 1, 4);
let warriorB = new Person('B', 1, 3);
warriorA // Person {name: "A", level: 1, attValue: 0, defValue: 7}
warriorB // Person {name: "B", level: 1, attValue: 0, defValue: 6}
warriorA.sumValue(); // "your power : 7"
warriorB.sumValue(); // "your power : 6"
-
위 코드에서는 메소드를 따로 빼내어 메모리 절약이 가능해졌다. 새로 생성된 warriorA, warriorB는 이제 더이상
sumValue
메소드를 가지고 있지 않다. 하지만 각각에 존재하는 숨겨진 프로퍼티__proto__
를 통해 접근할 수 있으며 이를 프로토타입 체이닝이라고 한다. -
위와 같이 코드를 작성한다고 했을때 우리는 계속해서 name.prototype.methodname 을 통해 메소드를 만들어 줄 수 있으나 더글라스 크락포드가 제안한 패턴을 이용하면 좀 더 간단하게 메소드를 prototype에 프로퍼티로 추가할 수 있다
작성중
Author And Source
이 문제에 관하여([TIL] OOP(Object Oriented Programming)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@constate/TIL-OOPObject-Oriented-Programming저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)