저장을 습관화

객체 지향 프로그래밍 - 클래스 본문

공부/TypeScript

객체 지향 프로그래밍 - 클래스

ctrs 2023. 8. 1. 01:32

https://ctrs.tistory.com/120

 

메모 - 객체지향의 가장 기본적인 예시

class 붕어빵 { 내용물; 가격 = 500; constructor(내용물, 가격) { this.내용물 = 내용물; if (가격) this.가격 = 가격; } 할인() { this.가격 = this.가격 * 0.8; } } const 붕어빵1 = new 붕어빵("팥"); console.log(붕어빵1); //

ctrs.tistory.com

 

가장 흔하게 쓰이는 예시인 붕어빵을 이야기 하자.

 

1. 클래스

붕어빵 틀이 클래스라면, 이 틀로 찍어 만들어낸 붕어빵은 객체라고 할 수 있다.

클래스는 객체를 만들기 위한 틀(template)이다.

 

- 클래스의 구성 요소

클래스에서는 같은 종류의 객체들이 공통으로 가지는 속성(attribute)과 메서드(method)를 정의한다.

 

1) 속성

속성은 객체의 성질을 결정한다.

ex) 붕어빵은 '팥'이란 속성이 있는 '팥 붕어빵'과 '슈크림'이란 속성이 있는 '슈크림 붕어빵'이 있다.

 

2) 메서드

메서드는 객체의 성질을 변화시키거나 객체에서 제공하는 기능들을 사용하는 창구이다.

ex) 붕어빵 주인은 붕어빵을 팥 붕어빵에서 슈크림 붕어빵으로 전환할 수 있다.

붕어빵을 사는 고객들은 팥 붕어빵, 슈크림 붕어빵의 가격을 알 수 있다.

 

 

2. 객체

객체는 클래스(틀, template)를 기반으로 생성되며 클래스의 인스턴스(instance)라고도 한다.

 

 

3. 클래스 및 객체 정의 방법

TypeScript에서 클래스를 정의할땐 class 키워드를 사용한다.

클래스의 속성과 메서드를 정의하고, new 키워드를 사용하여 객체를 생성할 수 있다.

 

- 예시

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
  
  sayHello() {
    console.log(
      `안녕하세요! 제 이름은 ${this.name}이고, 나이는 ${this.age}살입니다.`
    );
  }
}

const person = new Person("ctrs", 29);
person.sayHello();

- constructor (생성자)
클래스에 인스턴스를 생성하고, 초기화할 때 최초로 불리는 메서드
객체를 만드는 시점에만 딱 한 번 불리고 이후에는 불리지 않는다.

 

생성자는 클래스 내에 오직 하나만 존재할 수 있으며
속성들의 값을 초기값으로 설정하는 코드들이 들어간다.

 

 

4. 클래스 접근 제한자

접근 제한자를 사용하여 클래스의 속성과 메서드에 대한 접근을 제한할 수 있다.

TypeScript에서는 public, pivate, protected 3가지 접근 제한자를 제공하고 있다.

 

1) public

클래스 외부에서도 접근이 가능한 접근 제한자

default 접근 제한자이기 때문에 별다른 선언이 없다면 public으로 접근 제한한다.

 

클래스의 함수 중 민감하지 않는 객체 정보를 열람하거나 

누구든지 클래스의 기능을 사용해야할 때 쓰인다.

 

 

2) private

클래스 내부에서만 접근이 가능한 접근 제한자

보통 클래스의 속성은 private 접근 제한자를 설정하는 것이 일반적이다.

 

외부에서 직접적으로 객체의 속성을 변경할 수 없게 제한한다.

클래스의 속성을 보거나 편집하기 위해서 별도의 getter/setter 메서드를 준비하는 것이 좋다.

 

getter에서는 값을 출력하도록 하고,

setter에서는 전달받은 값의 유효성 검사 등을 거친 후 업데이트한다.

 

 

3) protected

클래스 내부와 해당 클래스를 상속받은 자식 클래스에서도 접근이 가능한 접근 제한자

상속은 다음 게시글에서 설명하도록 한다.

 

- 예시

class Person {
  private name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public sayHello() { // 여기에서 public은 생략이 가능하다.
    console.log(`안녕하세요! 제 이름은 ${this.name}이고, 나이는 ${this.age}살입니다.`);
  }
}