📝 [Section2_Unit2] 객체 지향 프로그래밍 #2
OOP (객체 지향적 프로그래밍)는 데이터가 객체 내에 캡슐화되고 구성 요소 부분이 아닌 객체 자체가 운용되는 프로그래밍 방식이다.
데이터(속성)과 기능(메서드)을 하나의 객체 안에 묶어 넣음으로써 결합도를 느슨하게 한다. 느슨한 결합이란 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다.
캡슐화에는 정보의 은닉화, 즉 내부 데이터나 구현 코드를 밖으로 보이지 않게 한다는 특징을 포함하고 있다.
추상화란 뒷편 시스템의 기술적 복잡함을 단순한 API 뒤에 숨김으로써 복잡한 시스템을 효율적으로 설계하고 구현할 수 있는 방법이다. 캡슐화가 데이터의 은닉에 초점이 맞춰져있다면, 추상화는 클래스를 이용할 때 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 의의가 있다.
상속은 부모 클래스의 특징을 자식 클래스가 물려받는 것이다. 즉, 부모 클래스에서 정의된 속성과 메서드를 자식 클래스에서 사용할 수 있다.
📎 JavaScript에서의 상속은 프로토타입(prototype)을 기반으로 구현된다.
다형성은 많은(poly) 형태(morph)를 의미한다. 즉, 다양한 형태를 가질 수 있다는 특징이다.
특정 기능을 선언(설계)부분과 구현(동작)부분으로 분리한 후 구현부분을 다양한 방법으로 만들어 선택해서 사용할 수 있게 함으로써 같은 클래스의 같은 메서드를 사용하더라도 사용하는 인스턴스에 따라 다르게 동작할 수 있다.