객체 지향 프로그래밍

객체 지향 프로그래밍
절차지향 프로그래밍과는 달리 데이터와 기능을 한데 묶어서 처리

순차적 프로그래밍

정의한 기능의 흐름에 따라 순서대로 동작을 추가하며 프로그램을 완성하는 방식
매우 직관적인 방법이나, 프로그램의 규모가 조금이라도 커지게 되면 복잡해지게 되는데 순서를 돌아가야하는 경우가 생기면서 동작이 직관적이지 못하게 된다.

절차적 프로그래밍

반복되는 동작을 함수 및 프로시저(리턴값이 없는 함수) 형태로 모듈화하여 사용하는 방식
반복 동작을 모듈화하여 코드를 줄일 수 있으나 너무 추상적이라는 단점
→ 도서 관리 프로그램을 개발할 경우, 책과 책에 관한 함수는 따로 있기 때문에 둘의 연관 여부를 바로 파악하기 어렵다. 논리적으로 묶여있을 수 없는 구조이므로 동작이 추상적
절차적 언어
초기의 프로그래밍 언어로 순차적인 명령의 조합으로 이루어져 있는 언어
ex) C, 포트란

객체 지향 프로그래밍

사람이 세계를 보고 이해하는 방법을 흉내낸 방법론
데이터와 기능을 한번에 묶어서 처리
하나의 객체가 변경되더라도 외부에서는 알 수 없게 추상화 하므로, 변경이 전파되는 것을 제한하도록 돕는다.
⇒ 객체지향 설계를 통해서 의존을 다룰 수 있음.
속성과 메소드가 하나의 객체라는 개념에 포함 ⇒ 이를 클래스라고 부름
코드 가독성이 증가
객체 간의 독립성이 생김
중복되는 코드의 양 감소 → 코드의 재사용
유지보수 용이
대형 프로젝트
객체지향 언어
java, C++, C#
javascript는 엄밀히 따지면 객체 지향 언어가 아니지만 객체 지향 패턴으로 작성 가능
프로그램 설계 철학
모든 것은 객체로 그룹화되며 객체 내에는 데이터와 기능이 함께 있어야한다는 원칙

클래스 Class

속성이 들어가지 않은 청사진

인스턴스 Instance

클래스를 통해 만들어진 객체
생성자 constructor()
객체를 만드는 함수
코드를 추상화하여 직관적으로 생각할 수 있음

OOP Basic Concept

객체 지향의 주요 4가지 컨셉이 있음

Encapsulation 캡슐화

데이터(속성)와 기능(메소드)을 하나의 단위로 묶는 것.
데이터와 기능들이 느슨하게 결합. 언제든 구현을 수정할 수 있음
느슨한 결합: 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것. 코드만 보고도 인스턴스 객체의 기능을 상상할 수 있어야 함
은닉(hiding) : 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
→ 코드가 복잡하지 않게 만들고 재사용성을 높임

Inheritance 상속

부모 클래스의 특징을 자식 클래스가 물려받는 것
기본 클래스의 특징을 파생 클래스가 상속받는다
→ 불필요한 코드를 줄여 재사용성을 높임

Abstraction 추상화

객체들이 공통적으로 필요로하는 속성이나 동작을 하나로 추출해내는작업
인터페이스를 단순화
클래스를 사용하는 사람이 필요하지 않은 메소드 등을 노출시키지 않고 단순한 이름으로 정의
너무 많은 기능들을 노출시키지 않아 예기치 못한 사용상의 변화가 일어나지 않도록 막음
interface : 메소드와 속성만 정의한 것
→ 코드가 복잡하지 않게 만들고 단순화된 사용으로 인해 변화에 대한 영향을 최소화

Polymorphism 다형성

똑같은 메소드라 하더라도 다른 방식으로 구현
→ 동일한 메소드에 대해 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능

Prototype

자바스크립트는 프로토타입 기반 언어
프로토타입은 원형 객체르 ㄹ의미

extends

super