Typescript_스터디 12일차 (23/02/17)

yhwa·2023년 2월 17일
0
post-thumbnail

📝 Typescript로 블록체인 만들기 : From #4.0 to #4.1

typescript의 객체지향 프로그래밍

⛳️ 객체지향 프로그래밍 (Object-Oriented Programming, OOP)

- 프로그래밍에 필요한 데이터를 추상화시켜서 상태와 행위를 가진 객체로 만듭니다.
- 그 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법을 말합니다.
- C++, C#, Java, Python, Javascript, Ruby, Swift 등이 있습니다.
- 추상화, 캡슐화, 상속, 다형성의 4가지의 특성을 가집니다.

클래스 (Class)

- 클래스

인스턴스 (Instance)

- 클래스에서 생성한 빈 객체를 클래스 밖에서 지칭할때, 인스턴스라고 합니다.

메소드 (Method)

- 클래스 내부에 있는 함수를 의미합니다.

⛳️ JS에서 Class를 통해 Object 생성하기

Class안에 Constructor 함수 안에, 사용할 프로퍼티 작성

- JS에서는 Constructor 함수로 그 안에 생성할 파라미터를 작성하여, 
- 원하는 프로퍼티를 가진 빈 객체를 만들 수 있습니다.
- constructor가 포함된 클래스가 작성되면,
- 특정 변수를 할당하여 해당 클래스로 인스턴스(instance)를 만듭니다.
- 인스턴스를 생성하여 원하는 키-값을 가진 오브젝트를 생성할 수 있습니다.
- Student 클래스를 가지고 인스턴스화하여, Student라는 이름의 object를 생성할 수 있습니다.
class Student {
	constructor(firstName, lastName){
    	this.firstName = firstName;
      	this.lastName = lastName;
    }
}

const harry = new Student("harry", "potter");

console.log(harry);

/* Student: {
  "firstName": "harry",
  "lastName": "potter"
} */

⛳️ TS에서 Class를 통해 Object 생성하기

Class안에 Constructor 함수 안에, 사용할 프로퍼티의 Keyword와 Type을 작성

- TS에서는 constructor함수의 프로퍼티 타입만 선언합니다.
- 프로퍼티 필드가 어떠한 보호등급인지(=어떤 접근제어자), 프로퍼티 이름, 타입만 작성합니다.
- 컴파일될 때, 원래 JS에서 표현되는것과 똑같이 구현됩니다.
- private/public 키워드는 JS로 컴파일되면 사라집니다.
- private/public 키워드는 TS가 데이터를 보호하기위해 사용합니다.
- JS에서는 사용되지 않습니다.

* Private

- public 키워드를 가진 프로퍼티는 class밖에서 사용할 수 없습니다.
- 추상 클래스에게 상속받은 프로퍼티라도 해당 class밖이라면 사용 불가합니다.

* Public

-  public 키워드를 가진 프로퍼티는 class밖에서 사용할 수 있습니다.
class Student {
	constructor(
  		private firstName:string,
    	private lastName:string,
        public nickName:string
  ){}
}

const harry = new Student("harry","potter","hp");

console.log(harry.firstName); // Error
console.log(harry.lastName); // Error
console.log(harry.nickName); // hp

⛳️ 추상 클래스 (Abstract Class)

추상 클래스 내부의 메서드

- 추상 클래스 내부에 선언된 메서드를 말합니다.
- 추상 클래스는 새로운 인스턴스를 만들 수 없습니다.
- 다른 클래스에게 상속만 될 수 있습니다.

추상 메서드 (Abstract Method)

- 앞에 abstract를 붙여서 사용하며, 추상 클래스 내부에서는 call signature만 작성합니다.
- 함수의 이름과 존재한다면 argument, return값의 타입만 정의합니다.
- 메서드에 대한 구현체(Function Implementation)는 추상 메서드가 아니라
해당 추상 메서드를 상속하는 일반 클래스에서 작성합니다.

추상 클래스를 상속받은 일반 클래스

- extends 키워드는 일반 클래스가 추상 클래스를 상속받을때 사용합니다.

* Protected

-  class 밖으로부터 프로퍼티가 보호되면서 밖에서도 사용할 수 있습니다.
- 상속받은 자식 클래스에서 사용되기 원할때 사용합니다.
- 그러나, 클래스 밖에서 인스턴스 상태에서 사용은 불가합니다.
abstract User {
	constructor(
    	protected firstName:string,
      	protected lastName:string,
      	protected nickName:string
    ){}
  	
  	// 추상클래스 내부 메소드
  	public getFullName(){
    	return `${this.firstName} ${this.lastName}`;
    }
  	
  	// 추상 메소드 : Call Signature
  	abstract getNickName():void;
}

class Student extends User {
  
  	// 추상 메소드의 구현체
	getNickName(){
    	console.log(this.nickName);
    }
}

const harry = new Student("harry","porter","hp");

console.log(harry.getFullName()); // harry potter
harry.getNickName(); // hp
profile
📌 FE 공부 정리 공간입니다.

0개의 댓글