객체 지향 프로그래밍은 컴퓨터 과학에서 전통적인 패러다임이다. 우리가 알고 있는 OOP으 ㅣ개념 중 일부는 1950년대부터 있었지만, 시뮬러 67 (Simula 67)과 스몰토크 (Smalltalk)가 등장하면서 OOP의 형태가 갖춰지기 시작했다.
객체는 데이터와 기능을 논리적으로 묶어 놓은 겁니다. OOP는 우리가 사물을 이해하는 자연스러운 방식을 반영하도록 설계됐습니다. 만약 자동차가 객체라면 그 데이터에는 제조사, 모델, 도어 숫자, 차량번호 등이 있을 겁니다. 그리고 그 기능으로는 가속, 변속, 문 열기, 헤드라이트 켜기 등이 있을 겁니다. 또한, OOP는 사물에 관해 추상적으로 (어떤 자동차), 구체적으로 (특정 자동차) 생각할 수 있게 합니다.
OOP는 클래스를 계층적으로 분류하는 수단도 제공한다. 예를 들어 자동차보다 더 범용적인 운송 수단 클래스가 있다면, 운송 수단 클래스에는 자동차와 마찬가지로 급유나 충전 없이 이동할 수 있는 거리인 범위 프로퍼티가 있겠지만, 자동차와 달리 바퀴는 없을 수도 있다. 이때에 운송 수단을 자동차의 슈퍼클래스 라고 부르고 자동차를 서브클래스 라고 부른다.
-Ethan Brown, 『Learning JavaScript』, 한선용, 한빛미디어(2019), 226p.
클래스(Class) : 어떤 자동차
처럼 추상적
이고 범용적인 것.
인스턴스(Instance) : 특정 자동차
처럼 구체적
이고 한정적인 것.
메서드(Method) : 기능
클래스 메서드(Class Method) : 클래스에 속하지만 특정 인스턴스에 묶이지는 않는 기능. 예를 들어 시동을 거는
기능은 클래스 메서드.
생성자(Constructor) : 인스턴스를 새로 만들 때는 생성자
가 실행. 생성자
는 객체 인스턴스를 초기화
.
프로그래밍에서 필요한 데이터를 추상화시켜서 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법.
출처: https://jeong-pro.tistory.com/95 [기본기를 쌓는 정아마추어 코딩블로그]
장점 : 코드의 재사용이 용이, 유지보수가 쉽다, 대형 프로젝트에 적합
단점 : 처리속도가 상대적으로 느림, 객체가 많으면 용량이 커짐, 설계가 어려움
캡슐화
데이터의 번들링
. 번들링이란 프로그래밍 언어안의 Class
에 해당. 해당 Class
를 만들고 Class
를 통해서 인스턴스
를 생성 후, Class
에 포함된 변수
와 메소드
를 활용.
추상화(정보은닉)
프로그래밍의 세부적인 구현, 코드를 외부로 노출하지 않는 것. 실제로 구현에 필요한 코드는 Class
내부에 구현.
상속
자식 Class가
부모 Class의 특성과 기능을 그래도 물려받는 것. 우리가
Class를 정의 그
Class를 이용하여
인스턴스를 생성하였으면, 해당
인스턴스는
Class`의 특성과 기능을 그대로 물려받는 것이다.
다형성
하나의 변수, 또는 함수가 상화에 따라 다른 의미로 해석될 수 있는 것. 같은 부모 Class
로 선언되었지만, 하위 Class
가 모드 다른 것. 실생활에 예를 들면, 자동차 타이어는 휠의 사이즈 (부모 Class
)에 따라 모두 같지만, 회사나 모델 (객체 인스턴스, 하위 Class
)에 따라 성능이 다르게 나오는 것.