[javascript] 객체지향 - 객체 지향 프로그래밍

Yuni·2022년 7월 22일
0

코드스테이츠

목록 보기
17/39

절차적 언어 vs 객체 지향 언어

절차적 언어

절차적 언어는 순차적인 명령의 조합이다 ex) C, 포트란 등

객체 지향 언어

데이터 모델의 청사진(class)을 사용해 코드를 작성한다. ex) Java, C++, C# 등
자바스크립트는 객체 지향 언어는 아니지만 객체 지향 패턴으로 작성할 수 있다.

OOP(Object Oriented Programming)

OOP는 프로그램 설계 철학 중에 하나이다. OOP는 객체로 그룹화 되기 때문에 객체를 한번 만들고나면 메모리상에서 반환이 될 때까지 객체 안의 모든 것이 유지된다.

객체 내에는 메서드속성이 있다. 예를 들면 모든 자동차는 공통적인 기능과 고유한 속성이 있다. 공통적인 기능으로는 시동을 거는 것, 속도를 내는 것 등이 있고 고유한 속성으로는 브랜드, 색상 등이 있다. 만약 새로운 자동차를 만들고 싶다면 클래스에 속성과 기능을 넣어 인스턴스로 만들면 된다.

클래스와 인스턴스

클래스는 인스턴스를 생성하기 위한 설계도이다.
클래스를 통해 만들어진 객체를 인스턴트 객체(=인스턴스)라고 부른다.

캡슐화(Encapsulation)

캡슐화는 데이터와 기능을 하나의 객체 안에 넣어 묶는 것으로 은닉화느슨한 결합이 특징이다. 캡슐화는 코드가 복잡하지 않게 만들고 재사용성을 높인다는 장점이 있다.

은닉화

  • 은닉화란 내부 데이터나 구현이 외부로 노출되지 않도록 만드는 것이다.
    👉 디테일한 구현이나 데이터는 숨기고 외부에서 필요한 메서드만 노출시킴
  • 은닉화가 잘된 코드는 객체 내 메서드만 수정하고 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 할 수 있다. 반면, 절차적 언어는 데이터 형태가 바뀌면 코드의 흐름에 큰 영향을 끼쳐 유지보수가 어렵다.

느슨한 결합

  • 느슨한 결합은 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 말한다.
  • 마우스 클릭을 예로 들면 마우스의 상태를 속성으로 설정하고 클릭을 메서드로 설정해서 코드만 보고도 인스턴스의 기능을 알 수 있게 작성하는 것이다.

추상화(Abstraction)

추상화는 내부 구현은 복잡하지만 실세 노출되는 부분은 단순하게 만드는 개념이다. 캡슐화와 마찬가지로 코드가 복잡하지 않게 만들고 단순화된 사용으로 변화에 대한 영향을 최소화한다는 장점이 있다.
ex) 전화에는 스피커, 마이크 등이 있지만 실제로 사용할 때는 수화기를 들고 번호만 누르는 것

추상화를 통해 인터페이스가 단순해지고 많은 기능들이 노출되지 않으므로 예기치 못한 사용상의 변화를 방지할 수 있다.

🤔 추상화 vs 캡슐화
캡슐화가 데이터의 은닉에 중점을 뒀다면 추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고 단순한 이름으로 정의하는 것에 중점을 둔다.

클래스 정의 시 메서드와 속성을 정의한 것을 인터페이스라 부르고 이것이 추상화의 본질이다.

상속(Inheritance)

상속은 부모 클래스의 속성, 메서드를 자식 클래스가 물려받는 것이다(=기본 클래스의 특징을 파생 클래스가 상속받는다.) 상속은 불필요한 코드를 줄여 재사용성을 높인다.

다형성(Polymorphism)

다형성은 특정 기능을 선언(설계) 부분과 구현(동작) 부분으로 분리한 후 구현 부분을 다양한 방법으로 만들어 선택해 사용할 수 있게 하는 기능이다. 동일한 메서드에 객체의 특성에 맞게 다르게 작성하는 것이 가능하다.

HTML의 요소들을 구현한다면 모든 요소는 전부 객체이므로 모양을 그리고 화면에 뿌리는 메소드가 존재할 것이다. 요소들의 공통 부모인 HTML Element라는 클래스에 이 메소드를 만들고 상속받게 할 수 있다. 요소마다 다른 형태이므로 같은 메서드라도 다른 형태로 그려야할 것이고 이것이 바로 다형성이다.

profile
배운 것을 기억하기 위해 기록합니다 😎

0개의 댓글