(Object Oriented Programming)
: 프로그램을 객체 (메소드, 데이터의 묶음)
라는 기본 단위로 나누고, 이 객체들의 상호작용을 서술하는 방식.
자바스크립트는 ProtoType
을 이용하여 객체를 표현할 수 있다.
[ 절차지향 : 명령어의 실행순서를 기반 ] VS [객체지향 : 기능을 모듈로 묶어 모듈을 재활용 ]
절차지향: 실행순서(절차)가 더 중점이 된다.
객체지향: 객체의 종류와 속성이 더 중점이 된다.
객체들이 가진 공통 특징을 뽑아내는 것
ㄴ 완전하지 않더라도 틀을 어느정도 생각하고 시작하며, 점점 구체화 시킨다.
음료가 공통적으로 가진 속성 :
가격
,종류(탄산,이온 등)
등 데이터(변수)를 추상화
- 이제 종류, 용량등 여러 조건을 고려하여 가격을 설정하면 된다.
메소드: 돈을 넣는다, 음료가 나온다. 함수 추상화
- 돈을 넣는다( 그렇지만 지폐가 구겨져있으면, 돈을 받지 않고 다시 내뱉는다.)
- 음료가 나온다( 유리병이면 깨지지않게 천천히 나온다 )
- 음료가 나온다( (hot선택) = 뜨거운 제티, (cool선택) = 시원한 제티 )
접근 권한을 통해 원치않는 실수, 외부의 접근으로부터
데이터와 함수들을 보호할 수 있다.
- 자판기 음료의 가격을 나 말고도 수정할 수 있다면?
- 천원짜리 지폐를 만원으로 인식하도록 조작 후, 음료수를 뽑는다면?
ㄴ 아마 나는 장사 접어야 할 것이다... 😭
Class의 프로퍼티(함수,데이터)를 다른 class에 물려주거나, 물려받을 수 있다.
ㄴ 음료자판기에 커피벤딩머신 기능까지 있다면??
어? 함수 그대로 쓰면 되겠네?? 😏 : 돈을넣는다, 음료가 나온다
목록: 이미 구현되어있으니 이름만 바꾸면 되겠구나?👏 (블랙,밀크커피,유자차,우유 등)
다양한 형태로 나타날 수 있다
ㄴ 부모 클래스를 활용해서 자식의 클래스에도 재정의하여 이용 가능 (오버라이딩: overriding)
음료자판기의 특성을 커피자판기에도 구현하고, 내용을 재정의하여 쓰면된다.
음료 종류 > 커피 종류 |||||| 돈을 넣는다 > 돈을 넣는다( 동전만 가능하다 )
오버라이딩
class MusicPlay {
play() {
console.log('노래를 재생합니다');
}
}
class FavoritePlay extends musicPlay {
play() {
console.log('내 취향의 노래를 재생합니다');
}
}
let favoritePlay = new FavoritePlay()
favoritePlay.play(); // 내 취향의 노래를 재생합니다.