[JavaScript 객체 지향 프로그래밍] 캡슐화, 추상화, 상속, 다형성

young·2022년 5월 25일
0

5/25~6/22 Section 2 TIL

목록 보기
3/27

✅ 객체 지향 프로그래밍 (Object Oriented Programming)

객체 지향 언어

사람이 세계를 보고 이해하는 방법과 흡사하다
GUI의 등장과 함께 널리 확산된 프로그램 설계 철학
현대의 프로그래밍 언어 대부분이 해당한다. (Java, C++, C# 등)
자바스크립트는 객체 지향 언어가 아니지만 객체 지향으로 작성이 가능하다.

데이터 모델의 청사진인 class를 사용해 코드를 작성한다.
데이터(객체 속성)와 기능(객체 메서드)이 한 번에 취급된다.
모든 것이 객체로 그룹화 된다.

OOP Basic Concepts

OOP의 4가지 주요 개념

✔️ 캡슐화 Encapsulation

💡 데이터(속성)와 기능(메서드)를 하나의 단위로 묶는다
각각을 하나의 객체 안에 넣어서 느슨하게 결합 시킨다.
전체 코드를 복잡하지 않게 하여 재사용성을 높인다.

  • 은닉(Hiding) : 구현은 숨기고, 동작만 노출시킴
  • 느슨한 결합(Loose Coupling)에 유리 : 구현 수정 가능

✔️ 추상화 Abstraction

💡내부 구현은 복잡하지만 노출은 단순하게 만든다.
단순화된 사용으로 변화에 대한 영향을 최소화한다.
핵심만 노출시켜 interface를 이해하기 쉽고 간결하게 한다.

interface란? class 정의시 메서드와 속성만 정의한 것


✔️ 상속 Inheritance

💡기본클래스(base class)의 특징을 파생클래스(derived class)가 상속받는다.
부모 클래스에서 -> 자식클래스로의 상속
중복되는 속성과 메서드가 있을 때, 상속을 통해 코드 재사용성을 높여 코드 작성의 효율성을 높인다.


✔️ 다형성 Polymorphism

💡 하나의 메서드가 다른 동작을 하게끔 구현할 수 있다.


Learn more...

절차적 프로그래밍 (Procedural Programming)

절차적 언어
초기의 프로그래밍 언어 (C, 포트란 등)
별개의 변수와 함수가 순차적으로 작동하는, 순차적 명령의 조합을 뜻한다.
'어떤 기능을 어떤 순서로 쓰는가'

클래스 상속 키워드 extends

//클래스 생성
class Animal {
  constructor(name, size) {
    //속성 정의
    this.name = name;
    this.size = size;
  }
  //메서드 정의
  color(str) {
    console.log(str + this.name)
  }
}
    

위와 같은 Animal 클래스를 만들고,
동일한 속성과 메서드가 존재하는 다른 클래스를 만들 때 extends 키워드를 사용한다.

//부모 클래스 Animal을 자식 클래스 Bird로 상속
class Bird extends Animal {
  wing() {
    console.log('날개가 있다.')
  };
}

//자식 클래스의 인스턴스 생성
let owl = new Bird ('owl', 'big');

owl.color('brown');
>brown owl
owl.wing();
>날개가 있다.

부모 클래스 인스턴스에서 자식 클래스 메서드에 접근 가능할까?

//부모 클래스의 인스턴스 생성
let dino = new Animal ('dino', 'giant');

//자식 클래스의 메서드 호출
dino.wing();
>TypeError 발생

당연히(?) 안 된다.


참고자료
https://www.youtube.com/watch?v=cg1xvFy1JQQ
https://ko.javascript.info/class-inheritance

profile
즐겁게 공부하고 꾸준히 기록하는 나의 프론트엔드 공부일지

0개의 댓글