[ 객체 지향 프로그래밍 ]
- 관계성있는 객체들의 집합이라는 관점으로 접근하는 소프트웨어 디자인으로 볼 수 있다.
- 객체 지향 프로그래밍은 기본 모델을 만들고, 기본 모델을 바탕으로 한 객체를 만들어내는 패턴.
function Person(name, age) {
this.name = name;
this.age = age;
}
let person1 = new Person('Jae', 20)
let person2 = new Person("Gwon","24");
let person3 = new Person("Hyuk","23");
// 생성자 함수로 이름과 나이 정보를 담은 새로운 객체를 생성
// 인스턴스 : 생성자를 통해 만들어진 객체 (person1)
// 하나의 생성자로 여러 인스턴스를 생성할 수 있다.
용어
- class : 객체의 특성을 정의, 객체를 생성하기 위한 아이디어나 청사진.
- instance : class의 사례 (class를 통해 만들어진 객체)
- object : class의 인스턴스
- property : 객체의 속성 (예 : 이름, 성별, 나이 ...)
- method : 객체의 기능 (예 : walk, move, say something ...)
- construnctor : 인스턴스화 될 때 실행되는 메서드
[ OOP basic concept ]
- Encapsulation (캡슐화)
- 데이터(property)와 기능(method)을 한 데 묶는 것
- 은닉 (hiding) : 클래스 내부의 값들을 외부에서 참조하지 못하도록 은닉하되 동작은 노출시킴.
- 코드를 간결하게 만들어주며 재사용성을 높인다.
- Inheritance (상속)
- 부모 클래스의 인스턴스를 자식 클래스에 할당함으로써 상속이 이루어진다.
- 같은 특징을 가진 클래스를 상속받아 재사용하여 효율성을 높인다.
- Abstraction (추상화)
- 복잡한 내부구현에 반해 실제 노출되는 부분은 목적에 맞게 단순화 하는 것
- 클래스 정의 시, 메소드와 속성만 정의한 것을 인터페이스라고 부르며 추상화의 본질이다.
- 불필요한 것은 숨기고 핵심만 드러내는 것
- Polymorphism (다형성)
- 같은 메서드라도 서로 다른 동작방법을 가질 수 있다.
- 만약 다형성이 없다면 if/else if 로 케이스를 나누어 실행해야 하지만
다형성이 있기 때문에 같은 메서드를 실행해도 다른 작업을 할 수 있게 구현 가능하다.