객체 지향 프로그래밍( OOP: Object-oriented programming)
하나의 모델이 되는 청사진(class)를 만들고, 그 청사진을 바탕으로 한 객체(instance)를 만드는 프로그래밍 패턴
클로저 모듈 패턴
- 똑같은 기능을 하는 카운터가 여러 개 필요할 경우 재사용성을 높이기 위해 클로저 모듈 패턴을 이용한다.
생성자 함수
- 함수 만들듯이 만들며,
new
키워드를 사용
- 다른 함수와 구분하기 위해 대문자로 시작하며 명사(함수는 동사, 소문자 시작)
- ES6에서 달라진 점
- return 값을 만들지 않는다.
- 메서드는 생성자 함수와 함께 class 키워드 안쪽에 묶어서 정의한다.
function Car(brand, naem, color) {};
calss Car {
constructor(brand, name, color) {} };
function Car(brand, name, color) {}
Car.prototype.refuel = function (
) {
}
Car.prototype.drive = function (
) {
}
class Car {
constructor(brand, name, color) {}
refuel(
) {
drive(
) {
}
prototype
- 모델의 청사진을 만들 때 쓰는 원형 객체(original form)
constructor
- 인스턴스가 초기화 될 때 실행하는 생성자 함수
this
- 함수가 실행될 때, 해당 scope마다 생성되는 고유한 실행 context (execution context) new 키워드로 인스턴스를 생성했을 때에는, 해당 인스턴스가 바로 this의 값이 됨
객체 지향 프로그래밍 주요 개념
1. Encapsulation 캡슐화
- 데이터와 기능을 하나의 단위로 묶는 것
- 은닉(hiding): 구현은 숨기고, 동작은 노출시킴
- 느슨한 결합(Loose Coupling)에 유리: 언제든 구현을 수정할 수 있음
- 엄격한 클래스는 속성의 직접적인 접근을 막고 설정하는 함수(setter), 불러오는 함수(getter)를 철저하게 나누기도 한다.
- 장점: 코드가 복잡하지 않게 만들고, 재사용성을 높인다.
2. Inheritance 상속
- 내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념
- 캡슐화: 코드나 데이터의 은닉에 포커스
- 추상화: 클래스 사용자가 필요치 않은 메서드를 노출하지 않고, - 단순한 이름으로 정의하는 것에 포커스
- 클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라 부른다. 이것이 추상화의 본질
- 장점: 코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화
3. Abstraction 추상화
- 부모 클래스의 특징을 자식 클래스가 물려 받는 것
- => 기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는다.
- 장점: 불필요한 코드를 줄여 자사용성을 높인다.
4. Polymorphism 다형성
- 같은 이름을 가진 메서드라도 조금씩 다르게 작동한다.
- 장점: 객체의 특성에 맞게 달리 작성하는 것이 가능해짐.
🩺 개선하자
- 욕심이 많아져서 책이 쌓여가고 있다. 계획을 잡고 차근차근 읽어나가자.