객체
에서만 사용 가능객체
인 p1, p2, p3 객체
를 생성하는 예👉 코드마다 중복되는 객체 타입
을 하나로 만들 수 있다면?
👉 타입이 인터페이스
인 p1, p2, p3 객체
를 생성하는 예
특징
속성
뿐만 아니라 함수
도 설계 가능이름 규칙
대문자
로 표기인터페이스
interface 인터페이스이름 {
속성이름: 속성타입
}
// 예시
interface Person {
name: string;
age: number
}
[실습] 인터페이스
const Interface = () => {
interface Language {
name: string;
level: number;
}
let p1: Language = {
name: "react",
level: 5,
};
// 에러 발생
let p2: Language = { name: "Typescript" };
let p3: Language = { level: 5 };
let p4: Language = {};
let p5: Language = {
name: "javascript",
level: 1,
completed: true,
};
return <div></div>;
};
export default Interface;
?
기호를 붙임interface 인터페이스이름 {
속성이름?: 속성타입
}
const Interface = () => {
interface Language {
name?: string;
level?: number;
completed?: boolean;
}
let p1: Language = {
name: "react",
level: 5,
};
let p2: Language = { name: "Typescript" };
let p3: Language = { level: 5 };
let p4: Language = {};
let p5: Language = {
name: "javascript",
level: 1,
completed: true,
};
return <div></div>;
};
export default Interface;
type UserType = {
name: string;
age: number;
}
interface UserInterface {
name: string;
age: number;
}
class User1 implements UserType {
}
class User2 implements UserInterface {
}
선언적 확장 불가능 (재선언 불가)
&
연산으로 기존의 타입을 추가해서 새로운 타입을 만들어야 함
type AddType = UserType & { address: string };
선언적 확장 가능
interface UserInterface {
address: string;
}
interface AddInterface extends UserInterface {
gender: string;
}
👉 UserInterface 는 gender 속성 포함 x, gender 속성은 AddInterface에만 포함된다.
class 클래스이름 {
속성이름: 속성타입
}
// 예시
class Person {
name: string;
age: number;
}
class Person {
// 클래스 속성은 사전에 선언되어야 함
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
let p1: Person = new Person("gyull", 26);
console.log(p1);
// 실행 결과
Person {name:"gyull", age: 26}
속성 이름 앞에 접근제한자를 붙일 수 있음
생략 시, public으로 적용
_
붙임class Person {
name: string; // public적용
private _age: number; // paivate 속성 이름 앞에 언더바_ 붙임
}
[실습] 인터페이스 구현
interface PersonInterface {
name: string;
age: number;
}
class Person implements PersonInterface {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
let p1: Person = new Person("gyull", 26);
console.log(p1);
// 실행 결과
Person {name:"gyull", age: 26}
추상 클래스(abstract class)
완전하게 구현되어 있지 않은 메서드(추상 메서드)를 갖는 클래스
→ 구현부는 없고 껍데기만 있는 추상 메서드를 가짐
추상 클래스는 객체를 생성할 수 없음 📍
목적
ex) 동물 상속 계층도
abstract <class 클래스이름 {
속성이름: 속성타입
abstract 메서드이름() {}
}
💡 추상 클래스는 추상 메서드가 반드시 있어야 함![실습] 추상 클래스
✍️ 전체 코드
import React from "react";
const AbstractClass = () => {
abstract class AbstractPerson {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
info(): void {
// 일반 메서드
console.log(`name:${this.name}, age : ${this.age}`);
}
abstract say(): void; // 추상 메서드
}
// 추상 클래스 상속
class Person extends AbstractPerson {
// 추상 메서드 구현
say(): void {
console.log("안녕하세요");
}
}
let p1: Person = new Person("gyull", 26);
p1.info();
p1.say();
return <div></div>;
};
export default AbstractClass;
// 실행결과
name : soo , age : 20
안녕하세요
새싹DT 기업연계형 프론트엔드 실무 프로젝트 과정 9주차 블로그 포스팅