일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 생성자 주입
- 싱글톤
- java
- mybatis
- Javascript
- 스프링 부트
- jdbc
- assertThat
- 스프링 프레임워크
- @Configuration
- DI
- 스프링 빈
- springboot
- DIP
- kafka
- JPA
- assertThrows
- 스프링
- spring
- 스프링 컨테이너
- db
- Effective Java
- resultMap
- sqld
- 스프링 부트 입문
- 필드 주입
- SQL
- 스프링부트
- 스프링 부트 기본
- thymeleaf
- Today
- Total
선 조치 후 분석
[JavaScript] Web 개발을 위한 JavaScript (6) - Class + Getter&Setter(게터&세터) + Fields (public,private) + Static + Inheritance - 상속 + 다형성 + 재정의 (Overridng) + instanceOf 본문
[JavaScript] Web 개발을 위한 JavaScript (6) - Class + Getter&Setter(게터&세터) + Fields (public,private) + Static + Inheritance - 상속 + 다형성 + 재정의 (Overridng) + instanceOf
JB1104 2021. 12. 27. 21:47Class + Getter&Setter(게터&세터) + Fields (public, private) + Static + Inheritance - 상속 + 다형성 + 재정의 (Overridng) + instanceOf
Class : 조금 더 연관있는 데이터를 모아놓는 '컨테이너' 같은 역할
class person {
name; //속성
age: //속성
speak(); //행동
}
1. Class declarations
class Person{
//constructor
//fields
this.name = name;
this.age = age;
}
//methods
speak(){
console.log(`${this.name}:hello!`);
}
}
const ellie = new Person('ellie', 20);
console.log(ellie.name);
console.log(ellie.age);
ellie.speak();
2. Getter and Setters (게터, 세터)
class User{
constructor(firstName, lastName, age){
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
get age(){
return this._age;
}
set age(value){ //파라미터 필요
if(value<0){
throw Error('age can not be negative!!');
}
}
}
집중!
class User{
constructor(firstName, lastName, age){
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
get age(){
return this._age;
}
set age(value){ //파라미터 필요
this._age = value < 0 ? 0 : value;
}
}
const user1 = new User('Stive' , 'job', -1);
console.log(user1.age);
++ 나이가 '-1'인 경우는 말이 안 되는 경우이다.
그래서 이렇게 사용자의 오류를 잡아주는 역할도 하는게 'Getter & Setter'의 역할이다.
3. Fields (public, private)
생성자를 쓰지 않고 '필드'를 정의할 수 있는데, 그냥 정의하면 - public
#을 붙이면 - private : 'Class' 내부에서만 보이고 접근이 가능하다.
++
Too soon! 너무 최근에 추가되었다! 바벨을 이용해야 한다. 아직은 사용하기 이르다.
"이런 게 있구나"라는 정도로 넘어가자.
class Experiment{
publicField = 2;
#privateField = 0;
}
const experiment = new Experiment();
console.log(experiment.publicField);
console.log(experiment.privateField);
4. Static
class Article{
static publisher = 'Dream Coding';
constructor(articleNumber){
this.articleNumber = articleNumber;
}
static printPublisher(){
console.log(Article.publisher);
}
}
const article1 = new Article();
const article2 = new Article();
console.log(article1.publisher);
console.log(Article.publisher);
Article.printPublisher();
★ 'Static'은 'Object'마다 붙어있느것이 아니라, 'Class'자체에 붙어있는 것이다.
++ 'Static'을 사용하는 것이 '메모리 효율'에 좋다
5. Inheritance - 상속 + 다형성 + 재정의 (Overridng)
class Shape{
constructor(width, height, color){
this.width = width;
this.height = height;
this.color = color;
}
draw() {
console.log(`drawing ${this.color} color of`);
}
getArea(){
return this.width * this.width;
}
}
class Triangle1 extends Shape{}
class Rectangle extends Shape {}
const rectangle = new Rectangle(20, 20, 'red');
rectangle.draw();
console.log(rectangle.getArea()); //400 호출
const triangle1 = new Triangle1(30,30,'Yellow');
triangle1.draw();
console.log(triangle1.getArea()); // 900호출
'Rectangle'이라는 '클래스'에서 'width', 'height', 'color'변수가 필요할 때,
새로 만드는 것보다는 'extends' 키워드를 사용하여 'Shape'클래스를 상속 받아오는것이다.
'Fields' & ''Methods'를 받아 올 수 있다.
이렇게 상속을 통해서, 공통적인 요소들은 재사용할 수 있다. 한곳만 수정하면 '유지보수'에도 좋다.
하지만!
class Triangle2 extends Shape{
draw() {
super.draw();
console.log('New Triangle!!!!'); // Overriding
}
getArea(){
return (this.width * this.height) / 2; // getArea 메소드만 'Overriding'
}
toString(){
return(`Triangle2 : ${this.color}`);
}
}
const triangle2 = new Triangle2(30, 30, 'Yellow');
triangle2.draw();
console.log(`New : ${triangle2.getArea()}`);
++ 기존 '부모'의 'draw'도 호출하고 싶으면 'super' 사용!
6. Class checking : instanceOf
왼쪽의 'Object'가 오른쪽의 'Class'의 'Instace'인지 아닌지 확인하는 기능이다.
즉, 'Object'가 'Class'를 이용해서 만들어졌는지 확인하는 것.
console.log(rectangle instanceof Rectangle);
console.log(triangle1 instanceof Rectangle);
console.log(triangle1 instanceof Triangle1);
console.log(triangle1 instanceof Shape);
console.log(triangle1 instanceof Object);
맨 마지막만 난해하고 나머지는 쉽게 이해했을 것이다.
마지막 코드 관련해서 설명하자면,
'JavaSCript'에서 만든 모든 'Object', 'Class'는 'JavaScript'의 'Object'를 상속받은 것이다.