KIC/TYPESCRIPT
[TypeScript] 기본3 class, func(?)
octopengj
2020. 11. 2. 14:19
/*
7. class
*/
class Person{
//자바에서 생성자 => 클래스명과 동일 => Person(){}
//1. 타입스크립트에서 생성자 => constructor() or constructor("")
//2. 생성자는 절대로 한개이상 생성X
constructor(name,age){
this.name=name //동적으로 멤버변수선언 //name 빨간줄 (에러)
this.age=age //age 빨간줄 (에러)
}
}
class Person1{
name1
age1
constructor(name1,age1){
this.name1=name1 //에러발생하지 않는다.
this.age1=age1
}
}
class Person2{
//name
//age
address
//접근지정자 public을 부여하는 경우(속성추가)
constructor(public name:string, public age:number){}
//constructor(){} // 멀티플 컨스트럭터는 허용하지 않는다.
}
tsc class.ts (ES5)의 경우
/*
7. class
*/
var Person = /** @class */ (function () {
//자바에서 생성자 => 클래스명과 동일 => Person(){}
//1. 타입스크립트에서 생성자 => constructor() or constructor("")
//2. 생성자는 절대로 한개이상 생성X
function Person(name, age) {
this.name = name; //동적으로 멤버변수선언 //name 빨간줄 (에러)
this.age = age; //age 빨간줄 (에러)
}
return Person;
}());
var Person1 = /** @class */ (function () {
function Person1(name1, age1) {
this.name1 = name1; //에러발생하지 않는다.
this.age1 = age1;
}
return Person1;
}());
var Person2 = /** @class */ (function () {
//접근지정자 public을 부여하는 경우(속성추가)
function Person2(name, age) {
this.name = name;
this.age = age;
}
return Person2;
}());
ES5
1. 클래스사용이 불가능하다.
2. 속성명을 멤버변수형태로 선언해서 사용 가능하다.
tsc class.ts --target es6 (ES6)의 경우
// --target es6로 지정하여 ES6의 문법으로 컴파일한다.
// tsc class.ts 로 컴파일하는 경우는 ES5문법으로 컴파일한다.
/*
7. class
*/
class Person {
//자바에서 생성자 => 클래스명과 동일 => Person(){}
//1. 타입스크립트에서 생성자 => constructor() or constructor("")
//2. 생성자는 절대로 한개이상 생성X
constructor(name, age) {
this.name = name; //동적으로 멤버변수선언 //name 빨간줄 (에러)
this.age = age; //age 빨간줄 (에러)
}
}
class Person1 {
constructor(name1, age1) {
this.name1 = name1; //에러발생하지 않는다.
this.age1 = age1;
}
}
class Person2 {
//접근지정자 public을 부여하는 경우(속성추가)
constructor(name, age) {
this.name = name;
this.age = age;
}
}
ES6
1. 클래스사용이 가능하다.
2. 속성명을 멤버변수형태로 선언해서 사용이 불가능하다.
/*
7. class extend
클래스를 상속받을 수 있다.
*/
class Animal {
_weight: any; // 저장되는 값에 따라서 자료형이 결정
constructor(weight) {
this._weight = weight; //this.속성명(=멤버변수) //(this생략하면 안된다.)
}
weight() {
console.log(this._weight);
}
eat() {
console.log("Animal Eat");
}
}
class Human extends Animal {
_language: string;
//_weight:any //부모로부터 상속되어 있다.
constructor(weight, language) {
//부모클래스의 값을 초기화 먼저하고 자식클래스의 값을 초기화
super(weight); //this._weight=weight super(props)
this._language = language;
}
// 오버라이딩-> 자식입장에서 부모클래스로부터 물려받은 메서드의 내용을 수정
eat() {
console.log("Human eat!");
}
speak(){
console.log(`Korean speak ${this._language}`)
}
}
// 형식) const 객체명=new 클래스명(인수1, 인수2,,)
const korean=new Human(65, 'Korean')
korean.weight() //객체명.메서드명()
korean.eat()
korean.speak()
// 형식) 객체명 instanceof 클래스명 = true or false
console.log(korean instanceof Human) //true
console.log(korean instanceof Animal) //true
// tsc classextend.ts
// node classextend.js
//터미널 결과화면
65
Human eat!
Korean speak Korean
true
true
/*
8. func
함수 호출시 함수의 매개변수명 뒤에 ?를 주면 함수의 실행을 위해서
매개변수를 강제로 전달하지 않아도 될 때 사용한다.
-> 전달할 값이 있으면 전달하고 전달할 값이 없으면 전달하지 않다도
에러를 발생시키지 않도록 해주는 옵션
*/
function display_detail(id:number,name:string,mail_id?:string){
console.log('id->',id,'name->',name)
if(mail_id!=undefined){
console.log('mail_id->',mail_id)
}
}
display_detail(123,"John") // mail_id -> mail_id?로 작성하면 에러발생하지 않음.
display_detail(111,"Mary","mary@daum.net")
// tsc func.ts
// node func.js
//터미널결과
id-> 123 name-> John
id-> 111 name-> Mary
mail_id-> mary@daum.net