728x90
반응형
객체지향은 프로그램 설계 방법중의 하나로 객체의 관점에서 프로그래밍하는 것을 말한다.
OOP는 객체들의 유기적인 관계를 통해서 프로세스가 진행된다 (ex. java)
코드의 재사용성이 가능하고 생산성이 향상된다는 장점이 있다
JavaScript도 객체지향언어는 아니지만 객체지향으로 작성이 가능하고, TypeScript는 보다 개체지향적으로 디자인 되었다
반대 개념으로 *절차 지향 프로그래밍이 있다
객체지향의 4가지 속성
- 캡슐화(Encapsulation)
데이터와 기능을 하나의 단위로 묶는 것으로 어떠한 클래스를 사용할 때 내부 동작이 어떻게 돌아가는지 모르더라도 사용법만 알면 쓸 수 있도록 클래스 내부를 감추는 기법
- 은닉화의 특징도 가지고 있음
은닉화는 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
구현은 숨기고, 동작은 노출시킨다 => 은닉화의 특징을 살려서 코드를 작성하면 객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있다
- 추상화(Abstraction)
목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념
캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져 있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드들을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있다 - 다형성(Polymorphism)
같은 형태지만 다른 기능을 하는 것을 말한다
대표적인 예시로 JAVA의 Overload또는 Overriding이 있다
Overloading : 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것
Overriding : 상속 받은 하위클래스가 메서드의 내용만 변경(정의)하는 것 - 상속(Inheritance)
부모 클래스의 특징을 자식 클래스가 물려받는 것
class Person{
construcor(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
}
//이렇게 정의된 객체에 학생이라는 자식객체를 추가하고자 한다
class Student extends Person {
constructor(name, age, gender, grade) {
super(name, age, gender, interests);
this.name = name;
this.age = age;
this.gender = gender;
this.grade = grade;
}
}
이렇게 extends를 사용해서 자식 클래스에 추가해 줄 수 있고 자식클래스만의 속성, 메소드를 정의해 줄 수 있다.
super을 이용해 부모객체의 함수를 호출하는데 사용 될 수 있다
생성자에서는 super 키워드 하나만 사용되거나, this 키워드가 사용되기 전에 호출되어야 한다.
그렇지 않으면 참조오류가 발생한다.
* 절차 지향 프로그래밍 (ex. C언어)
컴퓨터의 작업 처리 방식과 유사하게 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
추가 공부를 참고 자료
https://evan-moon.github.io/2019/08/24/what-is-object-oriented-programming/
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/super
728x90
반응형
'junior developer :) > JS_JavaScript' 카테고리의 다른 글
for in & for of 문은 어떤 것이고, 둘의 차이는 무엇일까? (0) | 2022.10.22 |
---|---|
프로토타입과 클래스, 프로토타입 체인 (0) | 2022.09.22 |
객체지향 프로그래밍 1. 클래스와 인스턴스 (0) | 2022.09.21 |
css Link를 <head>에 선언하고 js script를 <body>에 선언하는 이유(JS) (0) | 2022.09.20 |
함수 선언식 vs 함수 표현식 vs 화살표 함수 (JS) (0) | 2022.09.15 |