🧐 객체 지향 프로그래밍이란
객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임입니다.
객체 지향 프로그래밍에서는 데이터와 해당 데이터를 처리하는 메서드를 하나의 객체로 묶어서 관리합니다.
이러한 객체들은 서로 상호작용을 하고, 이 객체들이 모여서 시스템을 구성합니다.
또한 객체들은 다형성, 캡슐화, 상속 등의 개념을 활용해서 유연하고 확장성 있는 프로그래밍을 가능하게 합니다.
👍 장점
- 반복적인 코드를 최소화하여 재사용성이 좋습니다.
- 코드의 변경을 최소화하고, 유지보수를 하기 좋습니다.
- 직관적인 코드를 작성하기 좋습니다.
👾 객체 지향 프로그래밍의 4가지 특징
추상화
추상화는 내부 구현은 복잡하게 되어 있는데, 겉으로 볼 때는 간단해 보이게 한다는 것입니다.
우리가 많이 사용하는 스마트폰을 예로 들면, 스마트폰을 사용하여 인터넷 서핑을 할 때, 여러 가지 신호가 왔다 갔다 하고, 데이터를 불러오고 보내고 하는 등의 복잡한 과정이 있을 것입니다. 하지만 우리는 이러한 과정을 생각하지 않고 그냥 터치해서 사용합니다.
이러한 추상화 덕분에 인터페이스가 단순해집니다.
추상화는 많은 기능들을 노출시키지 않음으로써 사용할 때의 문제를 줄일 수 있습니다.
👍 장점
- 코드를 복잡하지 않게 하고, 변화에 대한 문제를 최소화합니다.
캡슐화
캡슐화는 속성과 메서드를 하나의 객체 안에 넣어서 결합하여 객체의 상태를 보호하고 외부에서 직접적으로 접근하지 못하도록 하는 것을 의미합니다.
자바스크립트에서는 이를 구현하기위해서 클로저라는 개념을 활용할 수 있습니다.
function counter() {
let count = 0;
return {
increase() {
count++;
console.log(count);
},
decrease() {
count--;
console.log(count);
}
}
}
const count = counter();
count.increase(); // 1
count.decrease(); // 0
👍 장점
- 코드가 복잡하지 않게 하고, 재사용성을 높입니다.
- 안전성과 유지보수성을 높입니다.
상속
상속은 부모(기본) 클래스의 속성과 메서드 등을 자식(파생) 클래스가 물려받는 것입니다.
class Human {
constructor(name, sex, age) {
this.name = name;
this.sex = sex;
this.age = age;
}
eat() { console.log(`${this.name} eat`); }
sleep() { console.log(`${this.name} sleep`); }
goToToilet() { console.log(`${this.name} goToToilet`); }
}
class Student extends Human {
constructor(name, sex, age, school, grade) {
super(name, sex, age);
this.school = school;
this.grade = grade;
}
learn() { console.log(`${this.name} learn`); }
}
const jack = new Human('jack', 'male', 20);
const tom = new Student('Tom', 'male', 20, 3);
console.log(jack.name); // jack
jack.eat(); // jack eat
console.log(tom.name); // Tom
console.log(tom.grade); // 3
tom.eat(); // Tom eat
tom.learn(); // Tom learn
먼저 사람 클래스를 정의합니다. 이름과 성별, 나이가 속성으로 있고, 먹기, 자기, 화장실가기 를 메서드로 정의했습니다.
그 다음 학생 클래스를 정의했습니다. 학생도 사람이므로 사람 클래스에 있는 속성과 메서드를 모두 가져야합니다. 그런데 사람 속성과 메서드를 일일히 다시 구현하면 비효율적이고 귀찮습니다.
그래서 상속을 이용하여 사람의 속성과 메서드를 상속 받고, 학생만 가질 수 있는 속성과 메서드를 추가로 정의하여 구현할 수 있게 됩니다.
👍 장점
- 불필요한 코드를 줄여서 재사용성을 높입니다.
다형성
다형성은 특정 기능을 선언과 구현으로 분리한 후, 구현부분을 여러 가지 방법으로 만들어서 사용할 수 있게 합니다.
class Dog {
constructor() {
this.name = '개';
}
howling() {
console.log("월월");
}
}
class Wolf extends Dog {
constructor() {
super();
this.name = '늑대';
}
howling() {
console.log("아우우우");
}
}
const dog = new Dog();
const wolf = new Wolf();
dog.howling(); // 월월
wolf.howling(); // 아우우우
늑대가 개과에 속하지만 개처럼 짖지 않는 것 처럼, 부모 클래스에게 상속 받은 howling 메서드를 늑대의 울음소리에 맞게 다시 작성할 수 있습니다.
다형성이 없다면 부모 클래스에서 조건문을 활용하여 하나 하나 다르게 작성해야 합니다. 이러면 코드도 많아지고 직관적이지 않게 됩니다.
👍 장점
- 동일한 메서드에 대해서 조건문을 사용하지 않고, 객체의 특성에 맞게 작성할 수 있습니다.
'프로그래밍 기초' 카테고리의 다른 글
브라우저 렌더링 과정 간단 정리 (0) | 2023.10.10 |
---|