Post

[JavaScript] 클래스

[JavaScript] 클래스

데브자스

자바스크립트 클래스

클래스란?

  • class는 객체를 생성하기 위한 템플릿을 정의 가능
  • 코드의 재사용성, 유지보수성을 높임
  • 객체 지향 프로그래밍의 주요 개념을 활용 가능
    • 캡슐화, 상속, 다형성 등..


클래스 기본 문법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class 클래스명 {
	// 생성자 메서드
	constructor(매개변수) {
		// 초기화 코드
	}
	
	// 메서드 정의
	메서드명() {
		// 메서드 코드
	}
}

// 인스턴스 생성
const 인스턴스명 = new 클래스명("매개변수값...");
인스턴스명.메서드명();
  • constructor: 클래스가 인스턴스를 생성할때 호출되는 특별한 메서드
    • 주로 객체의 초기 상태 설정 (생성자)
  • 메서드: 클래스 내부에 정의된 함수
    • 해당 클래스의 인스턴스가 수행할 수 있는 동작을 정의


클래스 캡슐화

  • 데이터, 데이터를 처리하는 메서드를 하나의 단위로 묶고,
    외부에서 직접 접근할 수 있도록 보호하는 것
  • 데이터의 무결성 유지, 외부에서의 잘못된 접근 방지
  • ES2022~: #기호를 사용해서 private 필드 정의 가능.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
      // 캡슐화 (ES2022~)
      class 클래스명 {
        // 1. 비공개 필드 선언
        #필드이름 = 초기값;
        
        // 2. 생성자 (선택)
        constructor(초기값) {
          this.#필드이름 = 초기값;
        }
        
        // 3. Getter (읽기 접근 허용)
        get 필드이름() {
          return this.#필드이름;
        }
        
        // 4. Setter (쓰기 접근 허용 + 유효성 검사)
        set 필드이름(새값) {
          if (/* 유효성 조건 */) {
            throw new Error("유효하지 않은 값입니다.");
          }
          this.#필드이름 = 새값;
        }
      }
        
      const 인스턴스명 = new 클래스명("매개변수값...");
      console.log(인스턴스명.필드이름); // getter 호출
      인스턴스명.필드이름 = "새로운값"; // setter 호출
    

캡슐화 특징

  • 데이터 보호, 제어된 접근, 유지보수성


클래스 상속

  • 클래스는 다른 클래스를 상속 받는다.
  • 상속 → 기존의 클래스의 기능을 확장 or 재사용 가능

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
      // 부모 클래스 정의
      class 부모클래스 {
        constructor(매개변수들) {
          this.속성 = ;
        }
        
        부모메서드() {
          // 부모 클래스 코드
        }
      }
        
      // 자식 클래스 정의 (상속)
      class 자식클래스 extends 부모클래스 {
        constructor(매개변수들) {
          super(부모매개변수); // 부모 생성자 호출
          this.자식속성 = ;
        }
        
        자식메서드() {
          // 자식 클래스 코드
        }
      }
    
    • extends: 클래스 상속을 구현하기 위해 사용되는 키워드
    • super(): 부모 클래스의 생성자 호출,
      (반드시 자식 클래스의 생성자에서 호출!)


클래스 다형성

  • 하나의 인터페이스나 메서드가 다양한 형태로 동작할 수 있는 능력
  • 코드의 재사용성유연성을 높이기 위해
  • 클래스 Overriding

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      // 부모 클래스 정의
      class 부모클래스 {
        메서드이름() {
          // 부모의 기본 동작
        }
      }
        
      // 자식 클래스 정의 (상속 후 오버라이딩)
      class 자식클래스 extends 부모클래스 {
        메서드이름() {
          // 자식이 재정의한 동작
        }
      }
    
  • 다양한 객체가 동일한 인터페이스를 사용해서,
    각자의 고유한 동작을 수행할 수 있다!

This post is licensed under CC BY 4.0 by the author.