Udemy - 자료구조
자료구조란?
나는 이전까지 데이터를 담는 도구로써 배열, 오브젝트만을 사용해 왔었다.
하지만 배열과 오브젝트는 특정 상황에서 최고의 효율을 보이지 못하기에 다른 자료구조(Data Structure)가 필요하다.
다양한 자료구조의 종류
자료구조를 왜 배워야 하는가?
지도 어플리케이션을 만든다고 가정을 했을 때는 그래프 자료구조가, 양 끝의 데이터를 계속 추가 및 삭제해야하는 경우에는 연결 리스트 등이 가장 효율적이다. 따라서 우리는 앞으로 다양한 알고리즘들을 효율적으로 풀기 위해 여러 대표적인 자료구조들을 배워야 한다.
그렇다면 최고의 자료구조는 무엇일까?
최고의 자료구조란 없다. 따라서 우리는 다양한 대표적 자료구조들을 익히고, 상황에 알맞게 가장 효율적인 자료구조를 골라 사용해야 한다.
Javascript에서의 객체지향 프로그래밍 (OOP)
앞으로 배울 자료구조들을 효율적으로 활용하기 위해선 ES6 문법도 잘 알아야 한다.
그리고 이를 기반으로 자바스크립트에서 클래스를 통해 인스턴스를 뽑아내는 객체지향 프로그래밍 방식을 반드시 알아야 한다.
OOP를 위한 기본지식
클래스
클래스란, 미리 정의한 프로퍼티와 메소드를 기반으로 객체를 만들기 위한 설계도라고 생각하면 된다.
객체
클래스의 인스턴스라고도 불리며, 클래스에 선언된 그대로 생성된 실체다.
인스턴스
클래스로부터 객체를 만드는 과정을 인스턴스화 라고 칭한다.
그리고 특정 클래스로부터 생성된 객체를 해당 클래스의 인스턴스라고 한다.조금 더 자세히 얘기하면, 클래스라는 설계도를 기반으로 구현된 구체적인 실체다. 이렇게 실체화 된 인스턴스는 메모리에 할당된다.
클래스 키워드
클래스의 선언과 기본
1
2
3
4
5
6
7
8
9
10
11
12class Me {
constructor(name, gender, address) {
this.name = name;
this.gender = gender;
this.location = address;
}
}
let aboutMe = new Me('hoonjoo', 'male', 'seoul');
console.log(aboutMe);
// Me {name: "hoonjoo", gender: "male", location: "seoul", constructor: Object}위와 같이
Me
라는class
를 통해aboutMe
라는 인스턴스를 반환 받을 수 있다.class
는 하나의 공장 또는 설계도와 같아서new OOO
을 하면 해당 클래스 내에 존재하는constructor
에 의해 그에 알맞은 인스턴스가 반환된다.인스턴스 메소드
위에서
constructor
를 통해 특정 인스턴스의 구조를 만들었다면
이제는 해당 구조를 컨트롤 할 수 있는method
에 대해 알아봐야 한다.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22class Me {
constructor(name, gender, address) {
this.name = name;
this.gender = gender;
this.location = address;
this.eat = 0;
}
// introduce라는 메소드
introduce() {
return `my name is ${this.name} and I live in ${this.location}`;
}
// 내가 먹은 끼니를 더해주고, 총 몇 끼를 먹었는지 반환해주는 메소드
food() {
this.eat++;
return `저는 오늘 ${this.eat}끼를 먹었습니다.`;
}
}
let aboutMe = new Me('hoonjoo', 'male', 'seoul');
console.log(aboutMe.introduce()); // my name is hoonjoo and I live in seoul
console.log(aboutMe.food()); // 저는 오늘 1끼를 먹었습니다.클래스 메소드 (정적 메소드)
클래스 메소드는 클래스 전체에 대한 메소드를 정의할 수 있게 해준다.
쉽게 설명하면 인스턴스가 직접 참조할 수는 없고 클래스 본체를 통해서만 호출할 수 있는 메소드다.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20class Me {
constructor(name, gender, address) {
this.name = name;
this.gender = gender;
this.location = address;
this.eat = 0;
}
// introduce라는 메소드
introduce() {
return `my name is ${this.name} and I live in ${this.location}`;
}
static sayHi() {
return '안녕하세요!';
}
}
let aboutMe = new Me('hoonjoo', 'male', 'seoul');
console.log(aboutMe.sayHi()); // 오류가 난다.
console.log(Me.sayHi()); // 잘 호출된다.