프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라 객체(object)라는 기본 단위로 나누고 상호작용하는 방식이고
그 객체를 class라고 부르는데 하나의 청사진을 만들고 그 청사진을 바탕으로 하나의 객체를 만드는 프로그래밍 패턴이다.
(하나의 청사진:class 하나의 객체:instance)
초기 프로그래밍 방식은 절차적 프로그래밍 방식이였다. 입력을 받아 명시된 순서대로 처리 다음 그 결과를 내는 방식이였다.
그래서 어떠한 논리 어떤 순서대로 써내려가는 방법 이였다. 그래서 조금만 복잡해지면 순서도로 나타내는 것이 불가능 할 정도로 꼬여버린다.
유지보수도 어려울 뿐더러 명령어 양이 많아지고 흐름 파악 등이 어렵다. 그래서 대안으로 나온 것이 구조적 프로그래밍이였다.
구조적 프로그래밍은 goto문에 의존하는 프로그래밍 기법으로 대신할 수 있다. 하지만 데이터 처리방법을 구조화 했을뿐
데이터 자체를 구조화 하지 못했다. 이를 극복하기위해 대안으로 나온 것이 객체 지향 프로그래밍이다 .
-객체
class 변수명 {
속성(attribute)
메소드(method)
}
-인스턴스
let instance = new class명();
this: 인스턴스 객체를 의미 ,인스턴스 생성시 지정되는 값
constructor:instatance를 초기화할때 실행하는 함수
class:일종의 원형으로 객체를 생성하기 위한 함수
instance:class의 사례
-변수와 함수를 하나의 단위로 묶는 것
-은닉(hiding):구현은 숨기고,동작은 노출시킴
:세부구현은 외부로 드러나지 않도록 특정 모듈 내부로 감춤. 구현은 감추고 모듈 내에서 응집도를 높임
-public: 클래스의 외부에서 사용 가능하도록 노출시키는 것이다.
-protected: 다른 클래스에게는 노출되지 않지만, 상속받은 자식 클래스에게는 노출되는 것이다.
-private: 클래스의 내부에서만 사용되며 외부로 노출되지 않는다.
-느슨한 결합(Loose Coupling)에 유리:언제든 구현을 수정할 수 있음
:코드 실행 순선에 따라 절차적으로 코드를 작성하는 것이 아니라. 코드가 상징하는 실제 모습과 닮게 코드를 모아 겹합하는 것
부모 클레스의 특징을 자식 클레스가 물려받는 것. 클래스 사이에서도 포함관계있을 수 있다.
예를 들어 사람과 학생 과같다. 그 두 클래스는 속성과이 비슷할 것이다. 하지만 따로 메소드를 재구현하면 비효율 적이기 떄문에
상속을 이용하여 학생 클래스는 사람이라는 클래스를 상속받아 속석 메소드를 추가하여 사용하여 효율을 올릴 수 있음.
내부 구현은 복잡하나 노출되는 부분은 단순하게 만든다는 개념 ->인터페이스를 단순화함
클래스를 사용하는 사람이 필요하지 않은 메소드등을 노출시키지 않고.단순한 이름으로 정의하는 것에 포커스
하나의 변수또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것.
-overriding : 부모클래스의 메서드와 같은 이름,매개변수를 재정의하는것
-overloading : 같은 이름의 함수를 여러개 정의하고 매개 변수의 타입고 ㅏ개수에 다르게 하여 매개변수에 따라 다르게 호출 시기는 것
-코드가 복잡하지 않게 만들고 재사용성 높임
-단순화된 사용으로 인해 변화에 대한 영향을 최소화
-객체의 특성에 맞게 작성 가능
-유지보수가 쉬움
-대형 프로젝트에 적합:분담업무가 쉬움