클래스
객체 지향 패러다임
•
C를 제외한 모든 프로그래밍 언어는 객체 지향 (Object Oriented)라는 패러다임을 기반으로 만들어진 프로그래밍 언어
•
객체 지향 패러다임
◦
객체 지향 프로그래밍 객체를 만들고, 객체들의 상호작용을 중심으로 개발하는 방법론
•
객체 지향 프로그래밍 언어들은 클래스(Class)라는 문법으로 객체를 효율적이고 안전하게 만들어 객체 지향 패러다임을 쉽게 프로그래밍에 적용할 수 있도록 도와줌
추상화 (abstraction)
•
복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념과 기능을 간추려내는 것,
•
즉, 프로그램에 필요한 요소만 사용해서 객체를 표현하는 것
클래스 선언하기
class 클래스 이름 {
}
JavaScript
복사
•
인스턴스 : 클래스를 기반으로 만든 객체
new 클래스 이름()
JavaScript
복사
•
클래스 선언하고 인스턴스 생성
<script>
class Student {
}
const student = new Student()
const students = [
...
]
</script>
JavaScript
복사
생성자 (constructor)
•
생성자는 클래스를 기반으로 인스턴스를 생성할 때 처음 호출되는 메소드
•
따라서 생성자에서는 속성을 추가하는 등 객체의 초기화 처리
메소드 (method)
<script>
class Student {
constructor (이름, 국어, 영어, 수학, 과학) {
this.이름 = 이름
this.국어 = 국어
...
this.과학 = 과학
}
getSum() {
return this.국어 + ~ + this.과학
}
getAverage() {
return this.getSum() / 4
}
toString() {
return `${this.이름}\t{this.getSum()}점\t${this.getAverage()}점\n`
}
}
</script>
JavaScript
복사
const sutdents = []
students.push(new Student('구름', 87, 98, 88, 90))
...
JavaScript
복사
요약
•
객체 지향 패러다임은 객체를 우선적으로 생각해서 프로그램을 만든다는 방법론
•
추상화는 프로그램에서 필요한 요소만을 사용해서 객체를 표현하는 것
•
클래스는 객체를 안전하고 효율적으로 만들 수 있게 해주는 문법
•
인스턴스는 클래스를 기반으로 생성한 객체를 의미
•
생성자는 클래스를 기반으로 인스턴스를 생성할 때, 처음 호출되는 메소드
상속 (inheritance)
•
상속은 클래스의 선언 코드를 중복해서 작성하지 않도록 함으로써 코드의 생산 효율을 올리는 문법
class 클래스 이름 extends 부모클래스 이름 {
}
JavaScript
복사
private 속성과 메소드
•
클래스 사용자가 클래스 속성(또는 메소드)을 의도하지 않은 방향으로 사용하는 것을 막아, 클래스의 안정성을 확보하기 위해 나온 문법
class 클래스 이름 {
# 속성 이름
# 메소드 이름 () {
}
}
JavaScript
복사
게터(getter)와 세터(setter)
<script>
class Square {
#length
constructor(length) {
this.setLength(lenght)
}
setLength(value) {
if (value <= 0) {
throw '길이는 0보다 커야한다'
}
this.#length = value
}
getLength(value) {
return this.#length
}
getPerimeter() {return 4 * this.#length}
getArea() {return this.#length * this.#length}
}
// 클래스 사용하기
const square = new Square(10)
console.log(`한변의 길이는 ${square.getLength()}입니다`)
// 예외 발생시키기
square.setLength(-10)
</script>
JavaScript
복사
get area() {
}
set length(length) {
}
console.log(`${squareA.length}`)
console.log(`${squareA.area}`)
// 속성을 사용하는 형태로 사용하면,
// 자동으로 게터와 세터가 호출됨
JavaScript
복사
static 속성과 메소드
class Square {
#length
static #counter = 0
static get counter() {
return Square.#counter
}
}
JavaScript
복사
오버라이드
•
자식 클래스가 부모 클래스의 메소드를 다시 덮어써서 재정의 하는 것
toString() 메소드
•
자바스크립트는 내부적으로 어떤 객체를 문자열로 만들 때, toString() 메소드를 호출
•
toString() 메소드를 오버라이드하면, 내부적으로 문자열로 변환되는 형태를 바꿀 수 있음