OOP는 객체 지향 프로그래밍입니다. 네가지 특징으로 캡슐화, 상속, 다형성, 추상화가 있습니다.

OOP란 무엇인가?

 

OOP란 무엇인가

 

0. 여는글

1. 캡슐화

2. 상속

3. 다형성

4. 추상화

 

여는글

 OOP(Object Oriented Programming)을 의미한다. 네가지 특징으로 캡슐화, 상속, 다형성, 추상화가 있다.

1. 캡슐화

 데이터와 메서드를 하나의 객체로 담아 관리하므로, 데이터로의 직접적 접근을 막는다. 이를 통해 데이터가 의도치 않게 변경됨을 방지한다.
class Person {
  constructor(name) {
    this.name = name;
  }

  introduce() {
    return `내 이름은 ${this.name} 입니다.`;
  }
}

const student = new Person("홍길동");

console.log(student.introduce()); // 내 이름은 홍길동 입니다.
// 객체를 한번 생성하면 객체 안의 데이터에 접근하지 않는다.

2. 상속

 클래스를 통해 객체 생성틀을 만들고, 이를 통해 동일한 형태의 객체를 만들거나, 기존 클래스에 임의의 데이터, 메서드를 추가한 새로운 클래스를 만들어 낼수 있다. 이를 통해 코드를 재사용하고 다루려는 데이터를 계층적으로 구분할 수 있다.
class Dog {
  constructor(name) {
    this.name = name;
    this.type = "포유류";
  }

  bark() {
    return "멍멍!";
  }
}

class Poodle extends Dog {
  constructor(name) {
    super(name);
    this.color = "갈색";
  }

  introduce() {
    return "저는 푸들입니다";
  }
}

const poodle = new Poodle("푸들이");

console.log(poodle.type); // 포유류
console.log(poodle.bark()); // 멍멍!
console.log(poodle.introduce()); // 저는 푸들입니다

3. 다형성

 각기 다른 클래스라면 동일한 이름의 메서드를 만들 수 있다. 이를 통해 각 객체의 데이터에 알맞은 작접을 각 메서드에서 실행할 수 있다.
class Dog {
  walk() {
    return "산책 좋아요!";
  }
}

class Cat {
  walk() {
    return "산책 싫어요!";
  }
}

const dog = new Dog();
const cat = new Cat();

console.log(dog.walk()); // 산책 좋아요!
console.log(cat.walk()); // 산책 싫어요!

4. 추상화

 인터페이스를 통해 각 객체들의 공통된 특성을 파악하고 어떠한 데이터, 메서드가 있어야 하는 지 명시적으로 표현할 수 있다. 이를 통해, 객체, 클래스의 작성의도를 명확히 할 수 있다.
class Animal {
  constructor(name) {
    this.name = name;
  }

  bark() {
    throw new Error(
      "추상 메서드는 오버라이딩(메서드 덮어쓰기) 하여 사용해야 합니다."
    );
  }
}

class Cat extends Animal {}

class Dog extends Animal {
  bark() {
    return "멍멍!";
  }
}

const cat = new Cat("야옹이");
const dog = new Dog("멍멍이");

console.log(cat.bark()); // Error: 추상 메서드는 오버라이딩(메서드 덮어쓰기) 하여 사용해야 합니다.
console.log(dog.bark()); // 멍멍!

+ Recent posts