객체 지향 프로그래밍 정의

의미

하나의 모델이 되는 청사진을 만들고, 그 청사진을 바탕으로 한 객체를 만드는 프로그래밍 패턴이다. 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, '객체'들의 모임으로 파악하고자 하는 것이다.

클래스와 인스턴스

객체 지향 프로그래밍에서 청사진을 클래스라 하고, 청사진을 바탕으로 만든 객체를 인스턴스라 한다. 쉽게 말하자면 어떤 물건의 설계도를 클래스라 하면 설계도를 바탕으로 만들어진 물건을 인스턴스라 할 수 있다.

클래스를 정의할 때는 class 키워드와 생성자 함수(constructor)를 활용한다

class Car {
constructor( 속성A , 속성B , ...) {
}
}

클래스는 대문자 , 일반 명사로 만들고 생성자 함수는 따로 return문을 쓰지 않는 규칙이 있다.

인스턴스를 만들 때에는 new 키워드를 활용한다.

let car = new Car()

이 때, 괄호 안에는 생성자 함수에서 활용한 매개변수에 대해 원하는 값을 넣어주면 된다. 각각의 인스턴스는 클래스의 고유한 속성과 메소드를 갖는다.

클래스의 속성과 메소드를 인스턴스에서 사용하는 방법은 다음의 사진을 보면 이해할 수 있다.

클래스의 속성 정의

클래스의 메소드 정의

인스턴스에서 클래스의 속성과 메소드를 사용하는 방법

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

  1. 캡슐화

데이터(속성)와 기능(메소드)을 하나의 객체 안에 넣어서 묶는 것을 의미한다.
느슨한 결합에 유리하게 작용한다.

  1. 추상화

내부구현은 복잡한 데 반해 실제로 노출되는 부분은 단순하게 만든다.

  1. 상속

부모클래스의 특징을 자식클래스가 물려 받는 것을 의미한다.

다음의 예를 살펴보자.

class Grub {
constructor(age = 0, color = 'pink' , food = 'jelly') {
this.age = age;
this.color = color;
this.food = food;
}
eat () {
return 'Mmmmmmmmm jelly'
}
}

Grub이라는 부모 클래스가 있다.

class Bee extends Grub{
constructor (age = 5 , color = 'yellow' , job = 'Keep on growing') {
super()
this.age = age
this.color = color
this.job = job
}
}

Bee라는 자식 클래스가 Grub의 속성과 메소드를 상속 받기 위해서 extends와 super 키워드를 활용한다. extends 뒤에는 부모 클래스를 달아주고 자식클래스의 생성자함수 뒤에 super()를 해준다.

  1. 다형성

같은 이름을 가진 메소드라도 조금씩 다르게 작동한다.

prototype

profile
성장하는 사람

0개의 댓글