JS_#12_객체 지향 프로그래밍

Jinwoo Choi·2022년 9월 21일
0

부트캠프

목록 보기
18/29

객체 지향 프로그래밍( OOP: Object-oriented programming)
하나의 모델이 되는 청사진(class)를 만들고, 그 청사진을 바탕으로 한 객체(instance)를 만드는 프로그래밍 패턴

클로저 모듈 패턴

  • 똑같은 기능을 하는 카운터가 여러 개 필요할 경우 재사용성을 높이기 위해 클로저 모듈 패턴을 이용한다.

생성자 함수

  • 함수 만들듯이 만들며, new 키워드를 사용
  • 다른 함수와 구분하기 위해 대문자로 시작하며 명사(함수는 동사, 소문자 시작)
  • ES6에서 달라진 점
    • return 값을 만들지 않는다.
    • 메서드는 생성자 함수와 함께 class 키워드 안쪽에 묶어서 정의한다.
function Car(brand, naem, color) {/*코드*/}; /* ES5 */
calss Car { 
	constructor(brand, name, color) {/*코드*/} }; /* ES6 */
//ES5
function Car(brand, name, color) {/*코드*/}
Car.prototype.refuel = function (
) {
 // 연료 공급 구현 코드
}
Car.prototype.drive = function (
) {
 // 운전 구현 코드
}

//ES6
class Car {
 constructor(brand, name, color) {/*코드*/}
 refuel(
) {// 연료 공급 구현 코드}
 drive(
) {// 운전 구현 코드}
}

prototype

  • 모델의 청사진을 만들 때 쓰는 원형 객체(original form)

constructor

  • 인스턴스가 초기화 될 때 실행하는 생성자 함수

this

  • 함수가 실행될 때, 해당 scope마다 생성되는 고유한 실행 context (execution context) new 키워드로 인스턴스를 생성했을 때에는, 해당 인스턴스가 바로 this의 값이 됨

객체 지향 프로그래밍 주요 개념

1. Encapsulation 캡슐화

  • 데이터와 기능을 하나의 단위로 묶는 것
  • 은닉(hiding): 구현은 숨기고, 동작은 노출시킴
  • 느슨한 결합(Loose Coupling)에 유리: 언제든 구현을 수정할 수 있음
  • 엄격한 클래스는 속성의 직접적인 접근을 막고 설정하는 함수(setter), 불러오는 함수(getter)를 철저하게 나누기도 한다.
  • 장점: 코드가 복잡하지 않게 만들고, 재사용성을 높인다.

2. Inheritance 상속

  • 내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념
    • 캡슐화: 코드나 데이터의 은닉에 포커스
    • 추상화: 클래스 사용자가 필요치 않은 메서드를 노출하지 않고, - 단순한 이름으로 정의하는 것에 포커스
  • 클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라 부른다. 이것이 추상화의 본질
  • 장점: 코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화

3. Abstraction 추상화

  • 부모 클래스의 특징을 자식 클래스가 물려 받는 것
  • => 기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는다.
  • 장점: 불필요한 코드를 줄여 자사용성을 높인다.

4. Polymorphism 다형성

  • 같은 이름을 가진 메서드라도 조금씩 다르게 작동한다.
  • 장점: 객체의 특성에 맞게 달리 작성하는 것이 가능해짐.

🩺 개선하자

  • 욕심이 많아져서 책이 쌓여가고 있다. 계획을 잡고 차근차근 읽어나가자.
profile
Let your code speak for you.

0개의 댓글