객체 지향 프로그래밍(Object-Oriented Programming, OOP)
객체
"자바스크립트의 객체는 키(key)과 값(value)으로 구성된 프로퍼티(Property)들의 집합이다."
인터넷을 찾아보면 흔히 나오는 정의임. 즉, JS에서 객체란 거의 모든 것들이 객체라 볼 수 있음.
( JS가 객체 지향적 언어이기 때문)
객체 지향 프로그래밍
프로그래밍에서 필요한 데이터를 추상화시켜, 상태와 행위(변수, 함수(메서드)) 를 가진 객체를 만들고,
그 객체들 간의 상호작용(상속,캡슐화) 을 통해 로직을 구성하는 프로그래밍 방법.
1. 추상화 - 프로그래밍을 할 때 공통 되는 속성, 행위를 묶어 타입을 정의하고, 간단하게 만드는 것.
클래스 - 필요한 데이터를 "추상화" 시킨 "틀"
"추상화" 를 통한 최상단 ( 부모 ) Player 클래스
class Player {
construtor(name,age) {
this.name : name,
this.age : age
}
}
2. 상속 - 부모클래스의 속성,기능을 재사용
class Player {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
return `나의 이름은 ${this.name}이고, 나이는 ${this.age}살입니다. `;
}
}
class FirstUser extends Player {}
const test = new firstUser("배병일", 23);
console.log(test.sayHello()); // 나의 이름은 배병일이고, 나이는 23살입니다.
부모 클래스 Player 를 상속받은 FirstUser 클래스.
firstUser 클래스 를 test로 인스턴스화.
test.sayHello 로 부모 클래스 sayHello 메서드에 접근 가능한 걸 확인함.
인스턴스 - 클래스에 들어 있는 (정의한) 것을 토대로 실제 메모리에 할당시켜 사용되는 데이터.
( 인스턴스화를 하지 않으면 클래스안에 들어 있는 메서드들을 사용하지 못함.
즉, 클래스 내부에 접근 하기 위한 방법이라고 생각하면 편함. )
class Player {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
return `나의 이름은 ${this.name}이고, 나이는 ${this.age}살입니다. `;
}
}
class FirstUser extends Player {
sayHello() {
return "hello";
}
}
const test = new firstUser("배병일", 23);
console.log(test.sayHello()); // hello
자식 클래스 FirstUser 에서 부모 클래스에 있는 메서드를 똑같이 만들고
결과 값을 수정 하면 다르게 출력되는 것도 확인.
캡슐화, 다형성 이 있는데 이 부분은 조금 이해하기가 어려워 따로 작성 할 예정.
'Javascript' 카테고리의 다른 글
Execution Context (실행 컨텍스트) (1) | 2024.02.15 |
---|---|
JavaScript 동작 원리 (0) | 2024.02.15 |
객체 지향 생성자 ( Constructor ) (0) | 2023.08.04 |
enum에 쉽게 value 지정하기 (0) | 2023.07.26 |
javascript 에서 enum 사용 (0) | 2023.07.25 |