객체 지향 프로그래밍(OOP)

Purple·2021년 10월 5일
0

TIL

목록 보기
24/73

1.객체 지향 프로그래밍(OOP)

  • 객체 지향 프로그래밍(OOP, Object-oriented Programming)의 반대말은 절차 지향 프로그래밍이다.
  • OOP는 프로그램 설계 철학이고, OOP의 모든 것은 ‘객체’로 그룹화 된다.
  • 절차적 언어는 초기의 프로그래밍 언어를 부르는 말로 예를 들어 C,포트란 등이 있다. 이 절차적 언어는 순차적인 명령의 조합으로 이루어진다.
  • 객체 지향 프로그램밍은 데이터와 기능을 한곳에 묶어서 처리한다. 속성과 메소드가 하나의 ‘객체'라는 개념에 포함되어, 자바스크립트 내장 타입인 object와는 다르게 클래스(Class)라는 이름으로 부른다.
  • 클래스는 일종의 원형(original form)으로, 객체를 생성하기 위한 아이디어나 청사진이다. 이 클래스에 세부사항을 넣으면 인스턴스가 된다. 즉, 인스턴스는 클래스의 사례(instance object)라고 할 수 있다.
  • 클래스는 객체를 만들기 위한 생성자(constuctor)함수를 포함한다. 클래스를 만들때 일반적인 함수처럼 정의 하는 데, 다른점이 있다면, 암묵적인 규칙으로 보통 클래스는 대문자, 일반명사로 만든다. 그리고 그냥 함수처럼 실행하는 것이 아니라, new 키워드를 써서 새로운 인스턴스(instances)를 만든다. 그리고 함수는 호이스팅이 되지만, 클래스는 호이스팅이 되지 않는다.
  • Javasciprt는 객체지향 언어가 아니라 '프로토타입 기반 언어'이다. 클래스는 프로토타입을 이용해서 구현하는 것이다!!

2. 클래스 속성, 메소드 정의하기

@ ES5 

function Car(brand, name, color) {
	this.brand=brand;
	this.name=name;
	this.color=color;
}
Car.prototype.refuel = function(){
		//연료 공급을 구현하는 코드
	}

@ ES6 

class Car {
	constructor(brand, name, color){
		this.brand = brand;
		this.name = name;
		this.color = color;
	}
	refuel(){
	console.log(this.name + ‘가 연료를 공급합니다.);
	}
}

3. 인스턴스로 사용하기

let avante = new Car (‘hyundai’, ‘avante’, ‘black’);
avante.color; // ‘black’
avante.refuel(); // ‘avante가 연료를 공급합니다.’

4. 객체 지향 프로그래밍의 특징 4가지

1. 캡슐화

  • 데이터와 기능을 하나의 단위로 묶는다.
  • 은닉(hiding): 구현을 숨기고, 동작은 노출시킨다.
  • 캡슐화는 추상화와 다르게 코드나 데이터를 은닉하는데 포커스를 맞춘다.
  • 느슨한 결합(loose coupling)에 유리하다: 언제든 구현을 수정할 수 있다.

2. 상속

  • 부모 클래스의 특징을 자식 클래스가 물려받는 것이다. 다른 표현으로, ‘기본 클래스(base class)의 특징을 파생 클래스(derive class)가 상속받는다’ 라고 할 수 있다.

3. 추상화

  • 내부구현은 복잡하지만, 실제 노출되는 부분은 단순하게 만든다는 개념이다.
  • 추상화는 캡슐화와 다르게 클래스를 사용하는 사람이 필요하지 않는 메소드 등을 노출시키지 않고, 단순한 이름으로 정의하는데 포커스를 맞춘다.
  • 클래스 정의 시, 메소드와 속성만 정의한 것을 추상화의 본질인, 인터페이스라고 부른다.

4. 다형성

  • 다양한 형태를 가질 수 있다.

OOP의 4가지 주요 개념을 통해 재사용성을 얻을 수 있다.

1) 캡슐화는 코드가 복잡하지 않게 만들고, 재사용성을 높인다.
2) 상속은 불필요한 코드를 줄려서, 재사용성을 높인다.
3) 추상화도 코드를 단순하게 하고, 변화에 대한 영향을 최소화 한다.
4) 다형성은, 동일한 메소드를 작성할때 if/else if와 같은 조건문을 쓰지않고, 객체의 특성에 맞게 작성할 수 있게 한다.

5. 클래스 상속하기 & Prototype chain

  • 객체 지향 프로그래밍의 특성 중 ‘상속’을 JavaScript에서 구현할 때에는 프로토타입 체인을 사용한다. 속성과 메소드를 물려주는 클래스를 부모 클래스, 속성과 메소드를 물려받는 클래스를 자식 클래스, 그리고 이 과정을 상속이라고 한다. JavaScript에서 extends와 super 키워드를 이용해서 상속을 구현할 수 있다
profile
다시 보면, 더 많은 것들이 보인다.

0개의 댓글