Udemy - 자료구조

자료구조란?

나는 이전까지 데이터를 담는 도구로써 배열, 오브젝트만을 사용해 왔었다.
하지만 배열과 오브젝트는 특정 상황에서 최고의 효율을 보이지 못하기에 다른 자료구조(Data Structure)가 필요하다.

다양한 자료구조의 종류

다양한 자료구조의 종류

  1. 자료구조를 왜 배워야 하는가?

    지도 어플리케이션을 만든다고 가정을 했을 때는 그래프 자료구조가, 양 끝의 데이터를 계속 추가 및 삭제해야하는 경우에는 연결 리스트 등이 가장 효율적이다. 따라서 우리는 앞으로 다양한 알고리즘들을 효율적으로 풀기 위해 여러 대표적인 자료구조들을 배워야 한다.

  2. 그렇다면 최고의 자료구조는 무엇일까?

    최고의 자료구조란 없다. 따라서 우리는 다양한 대표적 자료구조들을 익히고, 상황에 알맞게 가장 효율적인 자료구조를 골라 사용해야 한다.


Javascript에서의 객체지향 프로그래밍 (OOP)

앞으로 배울 자료구조들을 효율적으로 활용하기 위해선 ES6 문법도 잘 알아야 한다.
그리고 이를 기반으로 자바스크립트에서 클래스를 통해 인스턴스를 뽑아내는 객체지향 프로그래밍 방식을 반드시 알아야 한다.

OOP를 위한 기본지식

  1. 클래스

    클래스란, 미리 정의한 프로퍼티와 메소드를 기반으로 객체를 만들기 위한 설계도라고 생각하면 된다.

  2. 객체

    클래스의 인스턴스라고도 불리며, 클래스에 선언된 그대로 생성된 실체다.

  3. 인스턴스

    클래스로부터 객체를 만드는 과정을 인스턴스화 라고 칭한다.
    그리고 특정 클래스로부터 생성된 객체를 해당 클래스의 인스턴스라고 한다.

    조금 더 자세히 얘기하면, 클래스라는 설계도를 기반으로 구현된 구체적인 실체다. 이렇게 실체화 된 인스턴스는 메모리에 할당된다.


클래스 키워드

  1. 클래스의 선언과 기본

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class 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에 의해 그에 알맞은 인스턴스가 반환된다.

  2. 인스턴스 메소드

    위에서 constructor를 통해 특정 인스턴스의 구조를 만들었다면
    이제는 해당 구조를 컨트롤 할 수 있는 method에 대해 알아봐야 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class 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끼를 먹었습니다.
  3. 클래스 메소드 (정적 메소드)

    클래스 메소드는 클래스 전체에 대한 메소드를 정의할 수 있게 해준다.
    쉽게 설명하면 인스턴스가 직접 참조할 수는 없고 클래스 본체를 통해서만 호출할 수 있는 메소드다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    class 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()); // 잘 호출된다.

Author

Hoonjoo

Posted on

2022-01-15

Updated on

2022-03-08

Licensed under

Comments