2019년 11월 15일 금요일

OOP(Object Oriented Programming - 객체 지향 프로그래밍)란

Object Oriented Programming(OOP)

캡슐화(Encapsulation)

  • 캡슐화란 하나의 객체가 특정한 목적을 달성하기 위해 변수, 함수를 하나로 묶는 것
  • 클래스를 만들 때 목적을 명확하게 정하고 그에 따른 기능들을 관련성 있게 변수나 함수를 만들 것
  • 데이터에 접근할 때 외부에서 직접적으로 접근하면 안되고 함수를 통해서만 접근할 것
    캡슐화를 통해 쪼개져 있는 여러가지 기능을 한데 묶어서 사용한다면 복잡하고 커다란 코드들도 이해하기가 쉬워진다.
    그리고 내부를 숨김으로써 정보들을 은닉하여 사용을 할 수 있다.
    자바스크립트에서는 private 한 변수 혹은 메소드가 없기 때문에
    위의 캡슐화의 특징인 은닉화를 이용하여 private 한 변수나 메소드를 만들 수 있다.

상속(Inheritance)

  • 상위의 부모 객체(개념)의 속성을 하위 객체(개념)가 물려 받는 것
  • 상속은 객체 지향의 가장 큰 특징
    부모 클래스가 가지고 있는 속성(프로퍼티, 메소드) 등을 그대로 자식 클래스가 물려 받아 재사용이 가능하다.
    물론 물려 받은 기능을 자식 클래스에서 기능을 재정의 할 수 있다.

추상화(Abstraction)

  • 추상화란 현실 세계를 빗대어 공통의 속성이나 기능을 묶어 이름을 붙이는 것이다.
  • 기린, 코뿔소, 사자, 소 라는 것들이 각각의 객체라고 한다면 이 객체를 하나로 묶으려 할 때 동물이라는
    추상적인 객체로 정의할 수 있다.
  • 객체지향에서는 객체에서 공통된 속성과 행위를 추출하는 것을 추상화라고 한다.

다형성(Polymorphism)

  • 다형성은 상속을 받은 기능을 변경하거나 확장하는 것
  • 코드의 재사용성이 높아져 코드의 길이가 감소하고 유지보수가 용이해짐

다형성을 구현하는 방법 두 가지

  1. 오버 라이딩(OverRiding)
    • 부모 클래스를 상속받은 자식 클래스에서 부모 클래스의 메소드의 이름, arguments를 받아서 새롭게 정의 하는 것을 말한다.
    • 하나의 부모 클래스에서 상속 받는 여러 자식 클래스에서 같은 이름을 가지고 있지만 다른 기능을 하는 메소드를 정의할 수 있다.
    • 부모의 기능을 그대로 사용하면서 동시에 기능을 추가할 수도 있다.
    • 정리하면 상위 클래스가 가지고 있는 메소드를 하위 클래스에서 재정의해서 사용하는 것이다.
  2. 오버 로딩(OverLoding)
    • 같은 클래스에서 같은 이름을 가진 메소드가 여러개가 존재하고 있는 상태이다.
    • 메소드의 이름은 같아도 되지만 매개변수(arguments)가 같으면 안된다.
    • 자바스크립트는 문법적으로 오버로딩을 사용할 수 없다.
    • 다만 arguments를 이용해 오버로딩을 흉내낼 수 있다.

개인 의견 : 한마디로 귀찮은 행동, 불필요한 행동들을 없애기 위해서이다.