객체 지향 프로그래밍(OOP)
- Object Oriented Programming(OOP)
- 프로그램 설계 철학
- OOP의 모든 것은 '객체'로 그룹화된다. (한 번 만들고 나면 메모리 상에서 반환되기 전까지 객체 내의 모든 것이 유지)
객체 지향 언어
- 데이터(Property, 속성)와 기능(Method, 메서드)이 별개로 취급되지 않고 한 번에 묶여서 처리.
- '클래스'라고 부르는 데이터 모델의 청사진을 사용해 코드 작성
- 자바스크립트는 엄밀히 말하면 객체 지향 언어는 아니지만, 객체 지향 패턴으로(클래스로) 작성할 수 있음.
- cf) 절차적 언어: 순차적인 명령의 조합
클래스와 인스턴스
클래스
- 일종의 원형(original form).
- 객체(인스턴스)를 생성하기 위한 청사진.
- 세부사항(속성값)이 들어가지 않은 청사진.
인스턴스
- 클래스의 사례(instance object)
- 클래스에 세부사항을 넣어 만들어진 것이 인스턴스 객체.
- '생성자'를 통해 인스턴스에 세부사항을 넣어준다.
OOP의 기본 컨셉
캡슐화(Encapsulation)
코드가 복잡하지 않게 만들고, 재사용성을 높인다.
- 데이터와 기능을 하나의 단위로 묶는 것
은닉화(hiding)
: 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것. 객체 외부에서 필요한 동작(메서드)만 노출시킴.
( 자바스크립트에서는 은닉 대신 주로 클로저 패턴 모듈
을 쓴다. #
도 있지만 잘 안 씀..)
- 느슨한 결합에 유리 : 언제든 구현을 수정할 수 있음.(객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 할 수 있음)
추상화(Abstraction)
코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화한다.
- 내부 구현은 복잡한데 실제로 노출되는 부분은 단순하게 만든다는 개념.
- 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스. (cf 캡슐화: 보안을 위한 코드 은닉..)
- 클래스 정의 시, 메서드와 속성만 정의한 것 ➡️ 인터페이스
상속(Inheritance)
불필요한 코드를 줄여 재사용성을 높인다.
- 부모 클래스의 특징을 자식 클래스가 물려받는 것.
다형성(Polymorphism)
동일한 메서드에 대해 객체의 특성에 맞게 달리 작성하는 것이 가능해진다.
- 똑같은 메서드라 하더라도 다른 방식(다양한 형태)으로 구현될 수 있다.