: 순차적 명령의 조합, 변수와 함수가 순차적으로 작동하도록 하는 방법
: 프로그램을 다수의 독립적인 객체로 만든 후 조립하여 서로 상호작용하도록 하는 방법
절차 지향 vs 객체 지향
절차 지향 객체 지향 특성 컴퓨터의 처리 구조와 유사 사람의 사고방식과 유사 메모리 사용 적음 많음 처리 속도 빠름 느림 재활용성 낮음 높음 코드 이해 어려움 쉬움 디버깅 어려움 쉬움
각 방법론의 장단점을 잘 알고, 상황에 맞는 방법론을 선택하면 된다.
JavaScript는 엄밀히 말해 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성할 수 있다.
class : 일종의 원형(original form)으로, 세부사항(속성)이 들어가지 않은 청사진
객체를 생성하기 위해 생성자 함수(constructor)를 포함한다.
instance : class의 사례로, class에 세부사항(속성)을 넣으면 객체가 된다. (= instance object)
constructor : 생성자 함수를 통해 함수에 인자를 넣듯 세부사항(속성)을 넣어줄 수 있다.
애플리케이션을 만들 때 좋은 설계를 하기 위해서는, 객체 지향을 이해하고 응용하는 것이 중요하다.
객체 지향에는 캡슐화, 추상화, 상속, 다형성이라는 4가지의 개념이 있다.
느슨한 결합 (Loose coupling)
: 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것
ex. 마우스 구동을 위한 코드를 작성한다고 할 때
- 속성 : 마우스의 색상, 크기, 무게...
- 메소드 : 클릭, 이동, 스크롤...
➡️ 정해진 코드만 보고도 instance 객체의 기능을 상상할 수 있게 작성하는 것!
은닉화 (Hiding)
: 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
- 디테일한 구현이나 데이터는 숨기고, 객체 외부에서 필요한 동작(메소드)만 노출시킨다.
- 엄격한 class는 직접적인 접근을 막고 설정하는 함수(
setter
)와 불러오는 함수(getter
)를 철저하기 나누기도 한다.
: 내부 구현은 복잡하지만, 실제로 노출되는 부분은 단순하게 만든다는 개념
포커스 | 사진 | |
---|---|---|
캡슐화 | 코드나 데이터를 은닉시키는 것 | |
추상화 | class를 사용하는 사람이 필요하지 않은 메소드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것 |
: 부모 class의 특징을 자식 class가 물려받는 것
기본 클래스(base class) - 파생 클래스(derived class)라고도 한다.
: 객체에서 똑같은 메서드라도 다른 방식으로 구현할 수 있다.
poly(많은) + morph(형태) = polymorphism(다양한 형태)
❔ 학습 후 궁금한 점
- 다형성과 overriding?
이 글은 아래 링크를 참고하여 작성한 글입니다.
https://learntocodetogether.com/what-the-heck-is-oop/
밍뭉이도 다녀감