JS 객체지향

이건우·2021년 6월 14일
0
post-thumbnail
post-custom-banner

오늘은 자바스크립트 객체지향에 대해 배웠습니다

객체지향 프로그래밍(Object Oriented Programming)은 문제를 여러 개의 객체 단위로 나눠 작업하는 방식을 말합니다.

이 방식은 오늘날 가장 많이 사용하는 대표적인 프로그래밍 방식이고 JAVA, C# 등이 대표적인 객체지향 프로그래밍 언어입니다.

객체지향 프로그래밍 특징 및 장점

_객체지향 프로그래밍의 가장 큰 특징은 클래스를 이용해 연관 있는 처리부분(함수)과 데이터 부분(변수)를 하나로 묶어 객체(인스턴스)를 생성해 사용한다는 점입니다.

그리고 객체지향 프로그래밍에서는 프로젝트를 독립적인 객체 단위로 분리해서 작업할 수 있기 때문에 여러 개발자와 협업해 규모가 큰 프로젝트를 진행할 수 있으며 유지보수측면도 뛰어나다는 장점이 있습니다

객체 지향 프로그래밍(Object Oriented Programming)은, 절차 지향 프로그래밍과는 다르게 데이터와 기능을 한데 묶어서 처리

속성과 메소드가 하나의 객체라는 개념에 포함되며, 이는 자바스크립트 내장 타입인 object와는 다르게, 클래스(Class)를 사용

하나의 모델이 되는 청사진(Class)을 만들고, 그 청사진을 바탕으로 한 객체(Instace)를 만드는 프로그래밍 패턴_

출처: https://webclub.tistory.com/155 [Web Club]

class와 instence를 사용해서 객체지향적 프로그래밍을 해보았습니다 .

Class란?

클래스(class)
자바에서 클래스(class)란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다.

자바에서는 이러한 설계도인 클래스를 가지고, 여러 객체를 생성하여 사용하게 됩니다.

클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성됩니다.

즉, 필드(field)란 클래스에 포함된 변수(variable)를 의미합니다.

또한, 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.

Instence란 ?

인스턴스(instance)
자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야 합니다.

이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스 화라고 합니다.

또한, 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스(instance)라고 합니다.

즉, 인스턴스란 메모리에 할당된 객체를 의미합니다.

자바에서는 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있습니다.

이렇게 생성된 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있습니다.

하지만 해당 클래스의 모든 메소드(method)는 해당 클래스에서 생성된 모든 인스턴스가 공유하게 됩니다.

Class 와 Instenced의 예

클래스의 예
클래스(class)

  • 차(Car) : 설계도
    필드(field)

  • car.modelName = "람보르기니"

  • car.modelYear = 2016

  • car.color = "주황색"

  • car.maxSpeed = 350

메소드(method)

  • car.accelerate()

  • car.brake()

인스턴스(instance)

  • 내 차(myCar) : 설계도에 의해 생산된 차량

  • 친구 차(friendCar) : 설계도에 의해 생산된 또 다른 차량

즉, 자동차 인스턴스는 모두 위와 같은 필드와 메소드를 가지게 될 것입니다.

하지만 각 인스턴스마다 가지고 있는 프로퍼티의 값은 전부 다를 것입니다.

메소드(method)
자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메소드(method)를 가집니다.

그중에서 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.

Class를 만드는법

class Car {
  // 속성
  constructor(brand, name, color) {
    this.brand = brand;	
    this.name = name;
    this.color = color;
  }
  // 메소드
  refuel() {
  }
  
  drive() {
  }
}   

클래스를 만드는 암묵적인 규칙으로, 보통 클래스는 대문자, 그리고 일반명사로 만듭니다

객체 지향 프로그래밍에서 생성자(constructor) 함수라고 부르고 인스턴스가 만들어질 때 실행되는 코드 생성자 함수는 return값을 만들지 않는다.

this는 인스턴스 객체를 의미

Instance

let avante = new Car('hyundai', 'avante', 'white');

let sonata = new Car('hyundai', 'sonata', 'gray');

let grandeur = new Car('hyundai', 'grandeur', 'black');

인스턴스를 만들 때에는 new 키워드를 사용하고 즉시 생성자 함수가 실행되며, 변수에 클래스의 설계를 꼭 닮은 새로운 객체, 즉 인스턴스가 할당됨

각각의 인스턴스는 클래스의 고유한 속성과 메소드를 갖게됨

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

1. 캡슐화
하나의 객체 안에 넣어서 묶는 것이고 속성과 기능들이 느슨하게 결합되는 것

느슨한 결합은 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미

캡슐화에 은닉화라는 특징도 있는데 이것은 내부 데이터나 내부 동작이 외부로 노출되지 않도록 만드는 것
=> 디테일한 구현이나 데이터는 숨기고, 동작만 노출

엄격한 클래스는 속성의 직접적인 접근을 막고, 설정하는 함수(setter), 불러오는 함수(getter)를 철저하게 나누는 방법도 있다.

2. 추상화
추상화는 내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념
=> 클래스 정의 시 메소드와 속성만 정의한 것인 인터페이스(interface)를 단순화

너무 많은 기능들이 노출되지 않은 덕분에 예기치 못한 사용상의 변화가 일어나지 않도록 만들 수 있다.

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

3. 상속
상속은 부모 클래스의 특징을 자식 클래스가 물려받는 것

=> 기본 클래스(base class)의 특징을 파생 클래스(derive class)가 상속받는다

자바스크립트에서는 extends 키워드 및 super 키워드를 이용해서 상속을 구현

4. 다형성
똑같은 메소드라도 다른 방식으로 구현될 수 있음

OOP의 특징과 관련된 장점
캡슐화는 코드가 복잡하지 않게 만들고, 재사용성을 높임

추상화는 마찬가지로 코드가 복잡하지 않게 만들고, 단순화된 사용으로 인해 변화에 대한 영향을 최소화

상속 역시 불필요한 코드를 줄여 재사용성을 높임

다형성으로 인해 동일한 메소드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능

profile
주니어 개발자 이건우 입니다 .
post-custom-banner

0개의 댓글