[JavaScript] OOP

·2021년 2월 26일
1

OOP(Object Oriented Programming)

  • 객체를 이용해 프로그래밍하는 것
  • 자바스크립트는 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성 가능

클래스와 인스턴스

  • 클래스 : 특정 객체를 생성하기 위한 템플릿
    • 생성자(constructor) 함수 : 속성을 초기화 시켜줄 수 있다
  • 인스턴스 : 클래스의 속성과 메서드를 담고 있는 객체

OOP 주요 특징 4가지

  • Encapsulation(캡슐화)
    • 데이터와 메서드를 하나의 단위로 묶고, 구현 내용은 외부로부터 은닉한다.
  • Inheritance(상속)
    • 속성과 메서드를 물려받고, 객체들 간의 관계(부모/자식,슈퍼/서브 등)가 형성된다.
  • Abstraction(추상화)
    • 사용자에게 불필요한 복잡한 내부 구현을 숨기고, 노출되는 부분은 단순하게 만든다.
  • Polymorphism(다형성)
    • 요소들이 각자 특성에 맞는 여러 다른 형태로 가질 수 있다.

Prototype

  • 다른 객체를 참조하는 경우 참조 대상
  • 자바스크립트는 프로토타입 기반의 언어로 모든 객체는 자신의 부모 객체와 연결되어 있다.
  • 상속 개념과 같이 부모 객체의 속성과 메서드를 상속받아 사용할 수 있다.
const user = {
	name: 'Kim',
	age: 20
}
user.__proto__ === Object.prototype //true
function User(name){
    this.name = name;
}
const kim = new User('kim');
kim.__proto__ === User.prototype // true
kim.__proto__.__proto__ === Object.prototype // true (Object는 가장 상위 객체)

Prototype Chain

  • 객체의 속성이나 메서드에 접근할 때 해당 객체에 존재하지 않는다면 자신의 부모의 프로토타입 객체를 검색하는 것
  • class 키워드를 쓰면 간단하게 작성할 수 있다.
    • extends : 상속하겠다
    • super : 부모 클래스에 전달
class User{
	constructor(name){
		this.name = name;
	}
	eat(){ console.log('냠냠') }
}
class Student extends User{
	constructor(name){
		super(name)
	}
	learn(){ console.log('공부중..')}
}
const stu1 = new Student('kim')
stu1.learn() // 공부중..
stu1.eat() // 냠냠
profile
my life is free

2개의 댓글

comment-user-thumbnail
2021년 2월 26일

님양아치?

답글 달기
comment-user-thumbnail
2021년 3월 10일

다음편 없나요??

답글 달기