객체지향프로그래밍의 핵심개념 클래스

zin·2023년 8월 25일
1

클래스 (class)

클래스(class)는 객체지향프로그래밍에서 핵심적인 개념으로 기존 프로토타입 기반 상속을 바탕으로 주어진 이름의 새로운 타입을 만들어내는 도구이다.

필요한 구조와 기능을 미리 정의해놓은 템플릿 역할을 해서, 이 템플릿을 기반으로 객체를 생성하고, 관리하기위해 사용된다. (객체는 클래스의 인스턴스)

클래스 선언하기

class Person {
    // 클래스의 생성자 함수. 하나의 클래스는 하나의 생성자만 정의할 수 있음. 
	// 생성자 함수는 new 키워드가 호출될때 자동으로 실행
    constructor(name) {
      //프로퍼티 선언하고싶을때 constructor안에서 선언
        this.name = name; 
      // 'this'는 생성된 객체를 나타냄. 객체의 'name' 속성을 인자로 설정함.
    }

    // 메소드는 클래스가 생성한 인스턴스를 통해 사용할 수 있음
    sayYourName() {
        console.log(`삐리비리. 제 이름은 ${this.name}입니다.`);
    }
}

이 클래스를 기반으로 객체를 생성하면, 각각의 객체는 자신만의 name 속성과 sayYourName 메소드를 가지게 된다. 이를 통해 각 로봇 객체는 자신의 이름을 말할 수 있게 된다.

클래스 상속받기

기존 클래스에서 상속된 새로운 클래스를 만든다. 상속 받으려면 extends 키워드를 사용해야한다.

class BabyPerson extends Person { 
    constructor(name) {
        super(name); // 부모 클래스 생성자 호출
        this.ownName = 'loopy';
    }

    sayBabyName() {
				// 상속을 받게되면 부모 클래스의 메소드를 사용할 수 있음
        this.sayYourName();
        console.log('Hi');
    }
}

super() 는 부모 클래스의 메소드를 *오버라이딩 할 때 사용된다.
부모 클래스 Person으로 name을 상속받기 때문에 다시 선언,초기화할 필요가 없다.

*오버라이딩(Overriding)은 상속 관계에서 부모 클래스에 정의된 메소드를 자식 클래스에서 재정의하여 사용하는 개념.


메소드를 사용하지 않은 코드

class Zin
  constructor(name,age){ 
    this.info = `내 이름은 ${name}이고,나이는 ${age}야.` 
		
  }
}
console.log(new Zin('loopy',21).info)

//class 상속받기
class babyZin extends Zin{ 
  constructor(info){
    super(info) 
  }
}
console.log(new Zin('zin',25).info)

부모클래스에서 메소드를 정의하지않고, 생성자만 정의하였다.
메소드를 안쓰면 추가적으로 프로퍼티를 선언할수 없어서 추가정보를 담을 수 있는 방법이 제한된다.
새로운 기능을 추가하거나 정보를 확장하기 위해서는 부모 클래스에 있는 프로퍼티를 활용해야한다.


비공개 프로퍼티

#을 이용한 비공개필드라는 개념으로 클래스 내부에서만 접근가능한 비공개 프로퍼티를 만들 수 있다.
class를 통해 인스턴스를 만들었을 때 제약없이 인스턴스의 프로퍼티에 접근하는 것이 가능하다.

getter, setter로 값 제어하기

class Person {
    #password 

    constructor(id, pw) {
        this.id = id;
        this.#password = pw; //'password'비공개 필드 초기화
    }


    sayYourName() {
        console.log(`제 이름은 ${this.id}입니다.`);
    }

      get password(){ //비밀번호 반환
        return this.#password
      }

      set password(pw){ //비밀번호 설정
        this.#password = pw;
      }
   }

        const person = new Person('loopy', 123);
        console.log(person.password)
        person.password = 456 //'set'메소드로 값을 변경
        console.log(person.password) 

객체의 속성을 접근,설정하는 메소드

  • get 메소드는 객체의 속성을 가져올 때 호출되며, 값을 반환한다.
  • set 메소드는 객체의 속성을 설정할 때 호출되며, 값을 설정한다.

객체의 비밀번호 정보를 클래스 내부의 비공개 필드를 통해 관리하고, 클래스 외부에서 getset을 통해 비밀번호를 설정하거나 가져올 수 있다.


클래스를 사용하여 객체를 생성하고 관리하면 코드의 구조가 더 명확하고 간결해지고, 다양한 객체를 생성할 수 있다. 또 상속을 통해 재사용성이 좋고, 확장할 수 있다.
profile
프론트엔드 가보자고-!

0개의 댓글