TIL(36) OOP

codedot·2021년 8월 23일
0
post-thumbnail

객체 지향 프로그래밍 (OOP, Object-oriented programming) ✍🏻

객체 지향 프로그래밍📍

  • 코드를 추상화 하여 직관적으로 생각할 수 있기 때문에, 프로그래밍 방법론으로 적용됨
    • 예를 들어 Java, c#은 객체 지향 프로그래밍이 철저하게 적용된 반면, 자바스크립트에서 객체 지향 프로그래밍(OOP)를 구현하는 방법은 조금 다르다.
    • 하나의 모델이 되는 청사진(blueprint)을 만들고, 청사진을 바탕으로 한 객체(object)를 만드는 프로그래밍 패턴 (객체로 그룹화 됨)

클래스(class)📌

  • 하나의 모델이 되는 청사진을 만든다. 또한, 세부 사항(속성)이 들어가지 않는 것, 세부사항만 넣는 다면 이는 객체가 된다.
  • 클래스를 만들때는 대문자 그리고 일반명사로 만든다.
	//ES6에서 class라는 키워드를 이용해서 정의
	class Car { // 대문자와 일반명사 사용
      	  constructor(brand, name, color) {
      // 인스턴스가 만들어질 때 실행되는 코드
      }
    }   

인스턴스(Instance)📌

  • 청사진을 바탕으로 한 객체를 만드는 프로그래밍 패턴, 클래스를 통해 만들어진 객체를 인스턴스라 부른다.
  • new 키워드를 이용하여 새로운 인스턴스를 만든다.
	// new 키워드를 통해 클래스의 인스턴스를 만들어낼 수 있다.
	let avante = new Car('hyundai', 'avante', 'black');
	let mini = new Car('bmw', 'mini', 'white');
	let beetles = new Car('volkswagen', 'beetles', 'red');
	// 각 인스턴스는 car라는 클래스의 고유한 속성과 메소드를 갖는다.

속성과 메서드 📌

  • 클래스에 속성과 메소드를 정의하고, 인스턴스에 이용한다.
  • 속성 : 브랜드, 차이름, 색상, 현재 연료 상태, 최고속력 등
  • 메소드 : 연료 주입, 속력 설정, 운전 등 객체에 딸린 함수라고 생각하면 된다.
	class Car {
      	  constructor(brand, name, color) {
          refule() {
        
         }
          drive() {
        
         }
      }
    }  
        

this📌

  • 인스턴스 객체이다.
  • parameter로 넘어온 브랜드, 이름, 색상 등은 인스턴스 생성시 지정한 값이다.
  • this에 할당한다는 것은 만들어진 인스턴스에 해당 브랜드, 이름, 색상을 부여하겠다는 의미이다.
  • 함수가 실행될 때, 해당 scope마다 생성되는 고유한 실행 context(execution, context) new 키워드로 인스턴스를 생성했을 때에는 해당 인스턴스가 바로 this의 값이 된다.

	class Car {
          constructor(brand, name, color) {
            this.brand = brand;
            this.name = name;
            this.color = color;
      }
    }   


객체지향 프로그래밍 특징📍

캡슐화(Encapsulation)📎

  • 데이터와 기능을 하나의 단위로 묶는 것
  • 은닉(hiding) : 구현은 숨기고, 동작은 노출시킨다. 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
  • 느슨한 결합(Loose coupling)에 유리 : 언제든 구현을 수정할 수 있음, 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미
  • 코드가 복잡하지 않게 만들고, 재사용성을 높인다.

상속(Inheritance)📎

  • 부모 클래스의 특징을 자식 클래스가 물려 받는다.
  • 불필요한 코드를 줄여 재사용성을 높인다.

추상화(Abstraction)📎

  • 내부 구현은 복잡하지만, 실제 노출되는 부분은 단순하게 만든 개념 interface(단순화)
  • 코드를 복잡하지 않게 만들고, 단순화된 사용으로 인해 변화에 대한 영향을 최소화 한다.

다양성(Polymorphism)📎

  • 같은 이름을 가진 메소드라도 조금씩 동작이 다르게 나타나는 것을 의미
  • 동일한 메소드에 대해 if/else if와 같은 조건문 대신 객체으 특성에 맞게 달리 작성하는 것이 가능해 진다.

추상화와 캡슐화는 어떻게 다른가?

  • 캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메소드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있다.

상속의 개념

  • 클래스 상속의 원리
    링크텍스트

  • Prototype chain(__proto__) : __proto__를 이용하면 부모 클래스의 프로토타입, 혹은 '부모의 부모 클래스'의 프로토타입을 탐색할 수 있다.

profile
Loding...

0개의 댓글

관련 채용 정보