1. 캡슐화 Encapsulation
데이터와 기능을 하나의 단위로 묶는 것.
은닉화의 특징 : 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것.
=> 디테일한 구현이나 데이터는 숨기고, 객체 외부에서 필요한 동작(메서드)만 노출한다.
코드를 복잡하지 않게 만들고, 재사용성을 높인다.
2. 추상화 Abstraction
내부 구현은 복잡하지만, 실제로 노출되는 부분은 단순하게 만든다.
=> 클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라고 한다. 이것이 추상화의 본질.
코드를 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화한다.
3. 상속 Inheritance
부모 클래스의 특징을 자식 클래스가 물려받는 것.
=> 기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는다.
불필요한 코드를 줄여 재사용성을 높인다.
4. 다형성 Polymorphism
객체 역시 똑같은 메서드라 하더라도, 다른 방식으로 구현될 수 있다.
동일한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능하다.
// TypeScript 문법
class Animal {
private name: string;
constructor(theName: string) {
this.name = theName;
}
}
new Animal("Cat").name; // 사용 불가
// Property 'name' is private and only accessible within class 'Animal'.