객체지향 프로그래밍(OOP)은 현실에서 존재하고 있는 객체(Object)를 SW 세계에서 표현하기 위해 객체의 핵심적인 속성(Attribute) 과 기능(Method)만을 추출하여 추상화(Abstraction)를 통해 모델링하려는 프로그래밍 패러다임을 뜻한다.
다시 말해 우리 주변의 실생활에서 사물을 인지하여 사용하는 방법을 프로그래밍에 접목하는것이다.
OOP는 하나의 사물이 되는 class를 만들고, 만들어진 class를 바탕으로 객체를 만드는 프로그래밍 패턴이다.
이미 JS 에서는 Object의 개념이 있지만 OOP 와는 무관하게 존재하는데, 이제부터 class를 바탕으로 한 객체는 인스턴스 객체라고 하겠다.
클래스란 같은 종류의 집단에 속하는 속성과 기능을 정의한 것으로 OOP 의 기본적인 사용자 정의 데이터 형(user define data type) 이다.
결국 클래스는 객체 생성에 사용되는 패턴 혹은 데이터형일 뿐이며, new 연산자를 통한 인스턴스 객체화 과정이 필요하다.
클래스 선언은 ES6 이전에는 일반적인 함수를 정의하듯 만들었고
function Person(first, last , age , interests){
//속성과 메소드를 정의해 준다.
this.name = name
this.age = age
this.interests = interests
...
}
ES6 이후로는 JAVA에서 클래스 정의하듯이 만든다.
class Person {
constructor(name , age , interests){
//생성자 함수
//인스턴스 객체가 만들어질 때 실해되는 코드
this.name = name
this.age = age
this.gender = gender
this.interests = interests
}
}
인스턴스 객체화
let lee = new Person(lee , 26 , work out) //생성자를 통해 속성을 설정한다.
let son = new Person(son , 24.5 , LoL)
클래스의 메소드 정의
ES5 문법
function Person(first, last , age , interests){...}
Person.prototype.play = function(){
return `${this.interests}을(를) 합니다.`
}
ES6 문법
class Person {
constructor(name , age , interests){...}
play(){
return `${this.interests}을(를) 합니다.`
} //function 이나 화살표 함수를 따로 사용하지 않는다.
}
(this , prototype 는 따로 정리 하겠습니다.)
메소드 사용
let lee = new Person(lee , 26 , work out)
let son = new Person(son , ? , LoL)
lee.play() // work out을(를) 합니다.
son.play() //LoL을(를) 합니다.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 나이 모르는 게 웃기네요