데이터를 객체로 묶어 관련 기능을 함께 관리하는 프로그래밍 패러다임이다.
JS는 객제 기반 언어이다.
예전에는 위에서 아래로 코드가 실행되는 구조적 프로그래밍 방식이었다
이 방식은 중간에 설계나 사용자 요구사항이 변경되어도 프로그래밍을 수정하지 못하는 단점이 있었고 그래서 객체 지향 프로그래밍이 등장하였다.
은닉하다 , 숨긴다는 의미로 변수와 함수를 하나의 단위로 묶는 것이다.
외부에서 접근 및 통제를 못하게 하여 무결성을 보장한다!!
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Test {
public static void main(String[] args) {
Person person = new Person("Alice");
System.out.println(person.getName()); //'Alice'
person.setName("Bob");
System.out.println(person.getName()); // "Bob"
}
}
위의 코드에서 getName()과 setName()에 외부에서 접근하기 위해
Person person = new Person("Alice"); <- 객체를 생성한 후
접근하는 모습이다.
이렇게 직접 접근하지 못하게 하여 데이터의 무결성을 보장하는 것이
캡슐화이다!!
현실에서 재산을 상속 받는 것처럼
이미 완성된 클래스를 다른 클래스에 상속할 수 있다.
class dog {
constructor(name, age) {
this.name = name; //멤버변수 (힙 메모리)
this.age = age; //멤버변수 (힙 메모리)
}
speak() {
console.log(`${this.name}이 짖습니다.`);
}
}
class cat extends dog {
constructor(name, age) {
super(name, dog);
}
speak() {
console.log(`${this.name}이 양옹합니다.`);
}
}
// dog의 생성자를 상속받아 사용
const myCat = new Cat('whiskers', 3);
myCat.speak(); // whiskers이 야옹합니다.
자식 클래스인 cat가 부모 클래스인 dog로 부터 상속받아
멤버변수인 name과 , age를 사용하는 모습이다.
참고로 위의 코드는 오버라이딩의 예시이다.
하나의 객체에 여러가지 타입을 대입할 수 있는 것이다.
핸드폰의 기능을 생각했을 때 전화 , 문자 , 게임 등등 여러가지 요소들을 생각할 수 있는 것과 동일하다.
여기서 등장하는 이론이 오버로드(오버로딩)과 오버라이딩이다!!
📌오버로드 : 이름이 같은 함수일지라도 전달인자 타입이나 개수가 다른 경우
int plus(int a, int b){
return a + b;
}
char plus(char a, char b){
return a + b;
}
double plus(double a, double b){
return a + b;
}
plus로 모두 이름이 같은 함수이지만 자료형이 달라 오버로드가 발생했다.
📌 오버라이딩 : 상속관계에서 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 다시 정의하는 것
int plus(int a, int b){
return a + b;
}
char plus(char a, char b){
return a + b;
}
double plus(double a, double b){
return a + b;
}