객체 지향 프로그래밍

hzn·2022년 9월 22일
0

JavaScript

목록 보기
13/17
post-thumbnail

객체 지향 프로그래밍(OOP)

  • Object Oriented Programming(OOP)
  • 프로그램 설계 철학
  • OOP의 모든 것은 '객체'로 그룹화된다. (한 번 만들고 나면 메모리 상에서 반환되기 전까지 객체 내의 모든 것이 유지)

객체 지향 언어

  • 데이터(Property, 속성)기능(Method, 메서드)이 별개로 취급되지 않고 한 번에 묶여서 처리.
  • '클래스'라고 부르는 데이터 모델의 청사진을 사용해 코드 작성
  • 자바스크립트는 엄밀히 말하면 객체 지향 언어는 아니지만, 객체 지향 패턴으로(클래스로) 작성할 수 있음.
  • cf) 절차적 언어: 순차적인 명령의 조합

클래스와 인스턴스

클래스

  • 일종의 원형(original form).
  • 객체(인스턴스)를 생성하기 위한 청사진.
  • 세부사항(속성값)이 들어가지 않은 청사진.

인스턴스

  • 클래스의 사례(instance object)
  • 클래스에 세부사항을 넣어 만들어진 것인스턴스 객체.
  • '생성자'를 통해 인스턴스에 세부사항을 넣어준다.

OOP의 기본 컨셉

캡슐화(Encapsulation)

코드가 복잡하지 않게 만들고, 재사용성을 높인다.

  • 데이터와 기능을 하나의 단위로 묶는 것
  • 은닉화(hiding) : 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것. 객체 외부에서 필요한 동작(메서드)만 노출시킴.
    ( 자바스크립트에서는 은닉 대신 주로 클로저 패턴 모듈을 쓴다. #도 있지만 잘 안 씀..)
  • 느슨한 결합에 유리 : 언제든 구현을 수정할 수 있음.(객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 할 수 있음)

추상화(Abstraction)

코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화한다.

  • 내부 구현은 복잡한데 실제로 노출되는 부분은 단순하게 만든다는 개념.
  • 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스. (cf 캡슐화: 보안을 위한 코드 은닉..)
  • 클래스 정의 시, 메서드와 속성만 정의한 것 ➡️ 인터페이스

상속(Inheritance)

불필요한 코드를 줄여 재사용성을 높인다.

  • 부모 클래스의 특징을 자식 클래스가 물려받는 것.

다형성(Polymorphism)

동일한 메서드에 대해 객체의 특성에 맞게 달리 작성하는 것이 가능해진다.

  • 똑같은 메서드라 하더라도 다른 방식(다양한 형태)으로 구현될 수 있다.

0개의 댓글