<이전 업무 방식>
절차 지향 프로그래밍
top-down 방식 (전체를 기능에 따라 각 부분으로 나눈 뒤 각자 완성하여 합치는 방법)으로 업무를 구분하여 각자 기능을 완성시키고 합쳤다.
<단점>
1. 하나의 데이터가 여러 함수에서 사용되기도 하고, 어떤 데이터가 사용될 지 쉽게 예측할 수 없어, 코드 전체가 완성되지 않으면 동작을 제대로 확인해볼 수 없다
2. 하나의 기능이 미완성이거나 잘 못 됐을 경우, 연결된 다른 기능도 사용이 어렵다
3. 하나의 기능을 수정하려고 해도, 전체 코드를 점검해보아야 한다.
⥥
<객체 지향 프로그래밍>
Bottom-up 방식(작은 단위로 객체를 만들고 이를 이용해 큰 전체를 만듦)으로 바뀜
객체 : 기능(함수, 매서드)과 데이터(프로퍼티, 속성, 변수)를 함께 묶음
기능
뿐만아니라, 관련 있는 데이터
도 함께 묶어서 업무를 구분함
<SNS 만들기 프로젝트 업무를 객체 지향 프로그래밍으로 나눈다면?>
사용자 객체 = {
데이터 : 아이디 데이터, 비밀번호 데이터, 자기소개 데이터,
기능 : 로그인 기능, 친구추가기능, 게시글 작성 기능,
}
게시글 객체 = {
데이터 : 텍스트 내용 데이터, 업로드 시간 데이터, 좋아요 수 데이터,
기능 : 게시글 작성 기능
}
유지 보수
에 용이하다.가독성
이 높고, 재사용
하기 좋다.테스트에도 더 유리
하다.코드를 잘 나누고 설계하는 것이 어렵다
코드를 작성하기도 전에, 설계부터 많은 노력이 든다.
객체 지향은 사람이 이해하고 작성하기 편한 방식으로 코드를 나눠는 것이다 보니, 컴퓨터가 이해하는데 시간이 걸려 실행하는 속도가 느려지거나, 저장 공간을 많이 차지하기도 한다.
OOP : 객체 지향 프로그래밍(Object Oriented Programming)
자바스크립트는 엄밀히 말해 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성할 수 있다.
OOP는 객체로 그룹화되어 나뉜다.
객체 내에는 데이터(속성)
와 기능(함수, 매서드)
가 함께 있다.
캡슐화(Encapsulation)는 데이터(속성)
와 기능(매서드)
을 따로 정의하는 것이 아닌, 하나의 객체 안에 느슨하게 결합되어 있는 것을 말한다.
코드가 상징하는 실제 모습과
닮도록 코드를 모아 결합
하는 것을 의미한다.캡슐화에는 은닉화의 특징도 포함되어 있다.
은닉화
는 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것이다.코드가 복잡하지 않게 만들고, 재사용성을 높인다.
추상화(Encapsulation) 복잡함 속에서을 필요한 핵심만 추출하여 단순하게 보여지게 하는 것을 말한다
인터페이스
라고 부르는데, 이것이 추상화의 본질이다.코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향력을 최소화한다.
상속(Inheritance)은 부모 클래스(=기본 클래스, base class)의 특징을 자식 클래스(=파생 클래스, derived class)가 물려받는 것이다.
불필요한 코드를 줄여 재사용성을 높인다.
다형성(polymorphism)은 같은 매서드이더라도 각 객체에 따라 다른 방식으로 구현될 수 있는 특징을 가리킨다.
[참고하면 좋은 글] 객체의 다형성을 확인할 수 있는 클래스 확장
동일한 매서드에 대해 부모 클래스(객체)에서 if/else if와 같은 조건문을 사용하여 각 자식 클래스마다 매서드를 바꾸지 않아도 자식 클래스(객체)의 특성에 맞게 달리 작성하는 것이 가능해진다.