📍 절차적 언어와 객체 지향 언어
절차적 언어
- 초기의 프로그래밍 언어는 일반적으로 절차적 언어라고 부름(C, 포트란 등)
- 절차적 언어는 순차적인 명령의 조합
객체 지향 언어
클래스
라고 부르는 데이터 모델의 청사진을 사용해 코드 작성
- 현대의 언어들은 대부분 객체 지향의 특징을 갖고 있음(Java, C++, C# 등)
- JavaScript는 객체 지향으로 작성 가능
📍 클래스와 인스턴스
클래스
- 일종의 원형(original form)으로, 객체를 생성하기 위한 아이디어나 청사진이다.
- 클래스는 객체를 만들기 위한
생성자(constructor)
함수를 포함한다.
class Car {
constructor(color, price, speed){
this.color = color;
this.price = price;
this.speed = speed;
}
start() {};
backward() {};
forward() {};
stop() {};
}
인스턴스
- 클래스의 사례(instance object)이다.
📍 객체 지향 프로그래밍의 4가지 개념
캡슐화(Encapsulation)
- 데이터와 기능을 하나의 단위로 묶는 것
- 은닉(hiding) : 구현은 숨기고, 동작은 노출시킴
- 느슨한 결합(Loose Coupling)에 유리 : 언제든지 구현을 수정할 수 있음
- 장점 : 코드가 복잡하지 않게 만들고, 재사용성을 높임
상속(Inheritance)
- 부모 클래스의 특징을 자식 클래스가 물려받는 것
- 기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는 것
- 장점 : 불필요한 코드를 줄여 재사용성을 높임
추상화(Abstraction)
- 내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만듦
- 캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져 있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스
- 장점 : 코드를 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화
다형성(Polymorphism)
- 같은 이름을 가진 메서드라도 조금씩 다르게 작동함
- 장점 동일한 메서드에 대해 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능