사람이 세계를 보고 이해하는 방법과 흡사하다
GUI의 등장과 함께 널리 확산된 프로그램 설계 철학
현대의 프로그래밍 언어 대부분이 해당한다. (Java, C++, C# 등)
자바스크립트는 객체 지향 언어가 아니지만 객체 지향으로 작성이 가능하다.
데이터 모델의 청사진인 class
를 사용해 코드를 작성한다.
데이터(객체 속성)와 기능(객체 메서드)이 한 번에 취급된다.
모든 것이 객체로 그룹화 된다.
OOP의 4가지 주요 개념
💡 데이터(속성)와 기능(메서드)를 하나의 단위로 묶는다
각각을 하나의 객체 안에 넣어서 느슨하게 결합 시킨다.
전체 코드를 복잡하지 않게 하여 재사용성을 높인다.
💡내부 구현은 복잡하지만 노출은 단순하게 만든다.
단순화된 사용으로 변화에 대한 영향을 최소화한다.
핵심만 노출시켜 interface를 이해하기 쉽고 간결하게 한다.
interface란? class 정의시 메서드와 속성만 정의한 것
💡기본클래스(base class)의 특징을 파생클래스(derived class)가 상속받는다.
부모 클래스에서 -> 자식클래스로의 상속
중복되는 속성과 메서드가 있을 때, 상속을 통해 코드 재사용성을 높여 코드 작성의 효율성을 높인다.
💡 하나의 메서드가 다른 동작을 하게끔 구현할 수 있다.
절차적 언어
초기의 프로그래밍 언어 (C, 포트란 등)
별개의 변수와 함수가 순차적으로 작동하는, 순차적 명령의 조합을 뜻한다.
'어떤 기능을 어떤 순서로 쓰는가'
//클래스 생성
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