OOP(Object-Oriented Programming, 객체 지향 프로그래밍)
클래스는 객체지향 프로그래밍에서 특정 객체(인스턴스)를 생성하기 위한 변수와 메소드(함수)를 정의하는 일종의 틀이다.
클래스(Class)와 객체(Object): 클래스는 객체의 특성과 행동을 정의하는 틀 또는 설계도이며, 객체는 클래스에 정의된 속성(데이터 필드)과 행동(메소드)을 가진 인스턴스입니다.
상속(Inheritance): 한 클래스가 다른 클래스의 속성과 메소드를 상속 받아 사용할 수 있게 해줍니다. 코드의 재사용을 높여주고, 계층적인 클래스 구조를 만드는 데 도움을 줍니다.
캡슐화(Encapsulation): 객체의 상세한 구현 내용을 숨기고, 필요한 부분만 외부에 공개하여 객체 간의 상호작용을 단순화합니다. 데이터 구조와 데이터를 다루는 방법을 하나로 묶어 관리합니다.
다형성(Polymorphism): 같은 이름의 메소드가 다른 클래스에서 다른 동작을 할 수 있도록 하며, 이를 통해 인터페이스의 통일성을 높이고 코드의 유연성을 제공합니다.
추상화(Abstraction): 복잡한 실세계의 문제를 단순화하여 모델링하는 과정으로, 필수적인 특성을 강조하고, 불필요한 세부 사항은 생략하여 시스템의 복잡성을 관리합니다.
==
정보를 일반화해서 정리하는 방법
class Model{
name = '이원영';
year = 1997;
}
const wonYoung = new Model();
console.log(wonYoung);
// 결과
Model{name : '이원영', year: 1997}
클래스로 인스턴스를 생성하면 클래스에 해당되는 객체가 생성된다.
class Model{
name;
year;
constructor(name,year){
this.name = name; // this: 현재 인스턴스
this.year = year;
}
}
const wonYoung = new Model('이원영',1997);
console.log(wonYoung);
// 결과
Model{name : '이원영', year: 1997}
constructor로 인스턴스 무한생성가능
클래스로 생성된 인스턴스는 객체처럼 사용할 수 있다.
class Model{
constructor(name,year){
this.name = name; // this: 현재 인스턴스
this.year = year;
}
}
프로퍼티(property) 정의는 안해도된다.(옵셔널)
class Model{
constructor(name,year){
this.name = name; // this: 현재 인스턴스
this.year = year;
}
sayName(){
console.log(`안녕하세요 저는 $(this.name)입니다.`)
}
}
const wonYoung = new Model('이원영',1997);
console.log(wonYoung.sayName())
console.log(typeof Model); // function
console.log(typeof wonYoung); // object