Section 1 HA 통과 후 Section 2의 시작은 JS 객체지향에 대해 학습을 시작했다. 객체지향이라고 하면 클래스를 떠올릴 수 있는데 나는 java를 배워왔던 터라 java와 비슷하게 생각을 했었다. 비슷한 부분도 많았지만 익숙하지 않은 부분도 존재했다. 이제 배운 것을 정리하고 느낀 점을 풀어보겠다.
객체 지향 프로그래밍(Object-Oriented Programming(OOP)) 은 절차 지향 프로그래밍과는 다르게 데이터와 기능을 묶어서 처리한다. 속성과 메소드는 하나의 객체라는 개념에 포함되며, 이를 클래스라고 한다.
OOP : 하나의 모델이 되는 청사진(class) 을 만들고, 그 청사진을 바탕으로 한 객체(instance) 를 만드는 프로그래밍 패턴
클래스는 표지 사진과 같이 함수로 정의될 수 있으나, ES6에서는 class
키워드를 이용해 정의한다.
constructor
는 생성자이며 인스턴스가 만들어질 때 실행되는 코드다. 생성자 함수는 return
값을 만들지 않는다.
클래스는 new
키워드를 사용해 인스턴스를 생성한다.
let pizza = new Meal('pizza');
클래스에 속성과 메소드를 정의하고, 인스턴스에서 이용한다. java처럼 이해를 한다면 속성은 필드가 될 것이고, 메소드는 java에서 그 메소드일 것이다.
this
키워드는 인스턴스 객체를 의미한다. 자기 자신 인스턴스를 가리키는 것이다.
표지 사진에서와 같이 ES5에서는 prototype
키워드를 사용해서 메소드를 정의해야 하지만 ES6에서는 그럴 필요가 없다.
객체 지향 언어
강의 자료에서는 객체 지향 언어를 이와 같이 표현했다.
사람이 '세계를 보고 이해하는 방법'을 흉내낸 방법론
클래스라고 부르는 데이터 모델의 청사진을 사용해 코드작성을 한다. 데이터와 기능이 묶여서 처리될 수 있게 됐다.
현대의 언어는 대부분 객체지향의 특징을 갖는다. ex) java
, C++
, C#
등
javascript
는 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성할 수 있다.
MDN 참조를 통해서 프로토타입 체인에 대해서 알 수 있다.
상속을 JS에서 구현할 때에는 프로토타입 체인을 사용한다.
extends
와 super
를 이용해서 상속을 구현할 수 있다.
class Person { constructor() { this.name = 'jogi'; this.age = 3; } } class Student extends Person { constructor() { super(); // name은 'jogi'가 되며, age는 3이 된다. this.grade = 'A'; } }
실습은 페어프로그래밍으로 진행이 됐으며, 클래스의 상속을 주로 다루어 문제를 해결하는 것이었다. java를 하면서도 super를 잘 이용하지 않아서인지 금방 해결하긴 했지만, 상속을 제대로 사용하는 것에 애를 먹었던 것 같다. 그리고 JS에서는 java와 달랐던 것이 생성자를 constructor
라는 키워드를 이용해서 만들어줬다는 것이다. 그리고 메소드를 만드는 방법에도 차이가 있었다. 그래도 틀은 비슷했던지라 잘 해결할 수 있었다. 그리고 알 수 있었던 것은 부모에게 상속받은 속성이나 메소드를 사용하고 싶다면 extends
를 이용해 상속을 받고, 클래스 내부에서는 super
키워드를 사용해서 접근해야 함을 알 수가 있었다. 무조건 super
를 사용해야 상속받은 것을 사용할 수 있다는 것을 기억하자. 어렵지는 않은 개념이었으나 제대로 알고, 객체 지향 프로그래밍의 장점을 더욱 살릴 수 있는 프로그래밍을 해야할 것 같다. 이번 Section도 힘내보자!!