실세계에 존재하고 인지하고 있는 객체(Object)를 소프트웨어의 세계에서 표현하기 위해 객체
의 핵심적인 개념 또는 기능만을 추출하는 추상화(abstraction)를 통해 모델링하려는 프로그래밍
패러다임을 말한다.
단순히 별개의 변수와 함수로 순차적으로 작동하는 것을 넘어, 데이터의 접근과 데이터의 처리 과정에 대한 모형을 만들어 내는 방식, 따라서 데이터와 기능이 별개로 취급되지 않고 한 번에 묶여서 처리 가능
프로그램 설계 철학이며 모든 것은 ‘객체’로 그룹화 되며 OPP의 4가지 주요 개념을 통해 재사용성을 얻을 수 있다.
이 객체는 한번 만들고 나면 메모리상에서 반환되기 전까지 객체 내의 모든 것이 유지된다.
객체 내에는 "데이터와 기능이 함께 있다"라는 원칙에 따라 메서드와 속성이 존재
외부에서 데이터(속성)와 기능(메서드)을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 것. 데이터와 기능들이 느슨하게 결합되는 것.
코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다.
ex) 느슨한 결합을 추구하는 코드 작성법이란, 마우스 구동을 위한 코드작성을 하면 스위치가 눌리고 전기 신호가 생겨 전선을 타고 흐르는 등의 과정을 나누어서 작성하는 것이 아니라, 마우스의 상태를 속성(property)으로 정하고 클릭, 이동을 메서드(method)로 정해서 코드만 보고도 인스턴스 객체의 기능을 상상할 수 있게 작성하는 것.
‘은닉화’의 특징도 포함하고 있는데, 은닉화는 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것. 따라서 디테일한 구현이나 데이터는 숨기고 객체 외부에서 필요한 동작(메서드)만 노출시켜야 한다. 은닉화의 특징을 살려 코드를 작성하면 객체 내 메서드의 구현만 수정하고 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 하여 유지보수에 도움을 준다.
내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순한게 만드는 개념. 이러한 추상화를 통해 인터페이스가 단순해지고 예기치 못한 사용상의 변화가 일어나지 않게 할 수 있다.
추상화와 캡슐화는 종종 헷갈리는 개념일 수 있는데 캡슐화는 코드, 데이터의 은닉에 포커스가 맞춰져 있다면 추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고 단순한 이름으로 정의하는것에 포커스가 맞춰져 있다.
부모 클래스의 특징을 자식 클래스가 물려받는 것. ‘기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속 받는다 가 적합한 표현
ex) 사람(Human)이라는 클래스가 있으면 사람은 기본적으로 이름, 성별, 나이와 같은 속성과 먹다, 자다 등의 같은 메서드가 있다. 추가적으로 학생(Student)라는 클래스를 작성하면 학생의 본질은 사람이므로 상속을 이용하여 학생 클래스는 사람 클래스를 상속받을 수 있다. 또한 학생은 학습내용, 공부하다 등의 같은 속성/메서드를 추가할 수 있다.
다양한 형태를 가질 수 있는 것, 객체는 똑같은 메서드라 하더라도 다른 방식으로 구현될 수 있다
ex) 각기 다른 동물들이 ‘말할 때’ 제 각각의 소리를 내는 것
HEMLElement
TextBox render() / Select render() / CheckBox render()
위의 모든 엘리먼트들은 모두 객체이므로 내부적으로 모양을 그리고 화면에 뿌리는 메서드가 존재한다. 이 메서드를 render로 가정할때, 공통의 부모인 HEML Element라는 클래스에 render라는 메서드를 만들고 상속을 받게 만들 수 있다. 다형성의 핵심은 이 같은 이름의 render라는 메서드가 조금씩 다르게 작동한다는 것에 있다.