본문 바로가기

웹언어/자바스크립트 - ES6

[ES6강좌] 4강 Class 문법추가 - 오쌤의 니가스터디

728x90
반응형

 

 

 

 

 

 

1. class 선언하기


- java에서는 클래스를 객체를 만들기 위한 설계도라고 부릅니다.

- 객체를 생성하기 위한 필드와 메소드가 정의되어 있는 설계도입니다.

- 인스턴스라고 하는 것은 클래스로부터 만들어진 객체입니다. 하나의 클래스는 여러개 인스턴스 생성할수있습니다.

- 예시로 동일한 설계도로 여러 대의 자동차를 생산하는 것과 같은 의미입니다.

- 클래스는 일종의 함수지만 function키워드 대신 class키워드를 사용한다.

- 속성은 constructor()메서드 내부에 할당됩니다.

- class는 사실 함수이기 때문에 함수선언식과 변수선언식으로 둘다 선언할 수 있다.

 

 

 

 

1) 함수선언식의 class문법

## 선언 문법

class 클래스명{
	constructor(){
          this.속성명 = 값;
      }

      메서드명(){

      }
}

 

 

 

## 선언 예시 코드

class Car {
  constructor(name){
  	this.brand = name;
  }
}

- 클래스명은 보통 첫글자를 대문자로 쓰는 것이 관례입니다.

 

 

 

## 클래스 호출문법

var 인스턴스명 = new 클래스명();

 

 

 

## 클래스 호출 예시 코드

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>ES6 - class문법</title>
    </head>
    <body>
        <script>
            class Bungeoppang{
                constructor(filling){
                    this.name = filling + ' 붕어빵';
                }
            }

            let bungeoppang01 = new Bungeoppang('팥');
            let bungeoppang02 = new Bungeoppang('슈크림');
            let bungeoppang03 = new Bungeoppang('완두앙금');

            console.log(bungeoppang01.name);
            console.log(bungeoppang02.name);
            console.log(bungeoppang03.name);
        </script>
    </body>
</html>

- 붕어빵으로 예시를 들게요. 붕어빵을 일일이 모양까지 만들면 시간이 오래 걸리죠?

- 하지만 붕어빵 틀기계를 사서 찍어내면 어떨 까요?  그럼 금방 많이 만들겠죠?

- 그리고 다양한 종류의 붕어빵은 속재료만 바꾸면 됩니다. 

- 그걸 코드로 쓴 예제입니다. 

 

 

 

## 결과 보기

- 새로운 인스턴스로 객체로 생성해서 호출해서 사용할 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

2) 변수 선언식의 class 문법

- 많이 사용하지는 않지만 가능한 문법입니다. 

 

## 예시 코드

var Car = class {
  constructor(name){
  	this.brand = name;
  }
}

- 위의 함수선언식 코드를 변수 선언식으로 변경한 예제입니다. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

2. class의 속성과 메서드


## 속성 선언 - 속성은 constructor() 메서드 내부에 작성됩니다.

class 클래스명{
  constructor(){
  	this.속성명 = 값;
  }
}

 

 

 

## 메서드 선언 - 메서드는 class 코드 블록 내부에 바로 작성됩니다.

class 클래스명{
  메서드명(){

  }
}

 

 

 

 

## 속성과 메서드 선언과 호출

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>ES6 - class문법</title>
    </head>
    <body>
        <script>
            //설계도 생성
            class Bungeoppang{
                constructor(filling){
                    this.name = filling + ' 붕어빵';
                }
                //메서드 추가
                purchase(){
                    return '저는 ' + this.name + '으로 주세요!';
                }
            }

            //인스턴스 생성
            let myBungeoppang = new Bungeoppang('팥');
            console.log(myBungeoppang.purchase());
        </script>
    </body>
</html>

- 속성 호출 : 인스턴스명.속성명;

- 메서드 호출 : 인스턴스명.메서드명();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 부모클래스를 상속 받는 자손클래스


- 상속 : 부모 클래스의 멤버(필드, 메소드등)를 자식 클래스에게 물려주는 것입니다.

- 부모클래스는 보통 상위클래스, 슈퍼클래스라고도 부릅니다.

- 자손클래스는 보통 하위클래스, 파생클래스라고도 부릅니다. 

- 이렇게 나눠서 쓰는 이유는 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여줍니다. 부모 클래스의 수정으로 모든 자식 클래스들도 수정되는 효과를 가져와서 유지보수 시간을 최소화시켜줍니다.

 

 

## 자손클래스 문법

class 자식클래스 extends 부모클래스 { }

 

 

 

## 자손클래스 예시 코드

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>ES6 - class문법</title>
    </head>
    <body>
        <script>
            //설계도 생성
            class Ppang{
                constructor(filling){
                    //속성
                    this.filling = filling;
                }
            }

            //자손처리
            class Bungeoppang extends Ppang{
                //메서드
                purchase(){
                    return '저는 ' + this.filling + ' 붕어빵으로 주세요!';
                }
            }

            //자손처리
            class Ingeoppang extends Ppang{
                //메서드
                purchase(){
                    return '저는 ' + this.filling + ' 잉어빵으로 주세요!';
                }
            }

            //인스턴스 생성
            let myBungeoppang = new Bungeoppang('팥');
            console.log(myBungeoppang.purchase());

            let myIngeoppang = new Ingeoppang('슈크림');
            console.log(myIngeoppang.purchase());
        </script>
    </body>
</html>

- 빵이라는 큰 설계를 하고 자손으로 붕어빵과 잉어빵 기계틀을 따로 제작해줍니다.

- 그럼 각각의 결곽 잘 나오는 것이 확인됩니다. 

- super()메서드를 사용함으로써, 부모의 생성자 메서드를 호출하고 부모의 메서드와 속성을 받아서 사용 가능해집니다.

 

 

## 결과 보기

 

 

 

 

## 부모 클래스 변경

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>ES6 - class문법</title>
    </head>
    <body>
        <script>
            //설계도 생성
            class Ppang{
                constructor(filling, size){
                    //속성
                    this.filling = filling;
                    this.size = size;
                }
            }

            //자손처리
            class Bungeoppang extends Ppang{
                //메서드
                purchase(){
                    return '저는 ' + this.size + '사이즈인 ' + this.filling + ' 붕어빵으로 주세요!';
                }
            }

            //자손처리
            class Ingeoppang extends Ppang{
                //메서드
                purchase(){
                    return '저는 ' + this.size + '사이즈인 ' + this.filling + ' 잉어빵으로 주세요!';
                }
            }

            //인스턴스 생성
            let myBungeoppang = new Bungeoppang('팥', 'small');
            console.log(myBungeoppang.purchase());

            let myIngeoppang = new Ingeoppang('슈크림','medium');
            console.log(myIngeoppang.purchase());
        </script>
    </body>
</html>

- size를 추가해봤습니다. 

 

 

## 결과 보기

 

 

 

## super() 추가

- 이번에는 사이즈는 붕어빵만 추가된다고 보겠습니다.

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>ES6 - class문법</title>
    </head>
    <body>
        <script>
            //설계도 생성
            class Ppang{
                constructor(filling){
                    //속성
                    this.filling = filling;
                }
            }

            //자손처리
            class Bungeoppang extends Ppang{
                //속성추가
                constructor(filling, size){
                    super(filling); //부모 클래스 속성 상속
                    this.size = size;
                }

                //메서드
                purchase(){
                    return '저는 ' + this.size + '사이즈인 ' + this.filling + ' 붕어빵으로 주세요!';
                }
            }

            //자손처리
            class Ingeoppang extends Ppang{
                //메서드
                purchase(){
                    return '저는 ' + this.filling + ' 잉어빵으로 주세요!';
                }
            }

            //인스턴스 생성
            let myBungeoppang = new Bungeoppang('팥', 'small');
            console.log(myBungeoppang.purchase());

            let myIngeoppang = new Ingeoppang('슈크림');
            console.log(myIngeoppang.purchase());
        </script>
    </body>
</html>

- 결과는 같습니다. 

 

 

 

 

728x90
반응형