반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 주간회고
- 회고
- 코테
- 피드백
- mysql
- 네트워크
- 리눅스
- js
- Git
- 생각정리
- next.js
- 생각일기
- til
- WIL
- 자바스크립트
- react
- 생각로그
- mongoose
- CS
- 기록
- MongoDB
- 알고리즘
- 트러블슈팅
- javascript
- 일기
- array
- Grafana
- Java
- nest.js
- typescript
Archives
- Today
- Total
코딩일상
[TypeScript]캡슐화?? 본문
반응형
절차지향 프로그래밍
{
type CoffeeCup = {
shots: number;
hasMilk: boolean;
};
const BEANS_GRAMM_PER_SHOT: number = 7;
let coffeeBeans: number = 0;
function makeCoffee(shots: number): CoffeeCup {
if (coffeeBeans < shots * BEANS_GRAMM_PER_SHOT) {
throw new Error("Not enough coffee beans!");
}
coffeeBeans -= shots * BEANS_GRAMM_PER_SHOT;
return {
shots: shots,
hasMilk: false,
};
}
coffeeBeans = 3 * BEANS_GRAMM_PER_SHOT
const coffee = makeCoffee(2);
console.log(coffee);
}
Class를 적용하여 객체 지향형으로 변경
coffeeMaker라는 내용에 필요한 것(데이터 + 함수)들만 추가 하여 클래스 생성
{
type CoffeeCup = {
shots: number;
hasMilk: boolean;
};
class CoffeMaker {
static BEANS_GRAMM_PER_SHOT: number = 7; //class level
coffeeBeans: number = 0; //instance (object) level
constructor(coffeeBeans: number) {
this.coffeeBeans = coffeeBeans;
}
static makeMachine(coffeeBeans: number): CoffeMaker {
return new CoffeMaker(coffeeBeans);
}
makeCoffee(shots: number): CoffeeCup {
if (this.coffeeBeans < shots * CoffeMaker.BEANS_GRAMM_PER_SHOT) {
throw new Error("Not enough coffee beans!");
}
this.coffeeBeans -= shots * CoffeMaker.BEANS_GRAMM_PER_SHOT;
return {
shots: shots,
hasMilk: false,
};
}
}
const maker = new CoffeMaker(32);
console.log(maker);
console.log(maker.makeCoffee(2));
console.log(CoffeMaker.makeMachine(3));
}
캡슐화
캡슐화를 해야하는 이유
const maker = new CoffeMaker(32);
maker.coffeeBeans =3;
maker.coffeeBeans = -32;//invalid
위와 같이 외부에서 CoffeMaker Class의 인자를 수정하는것은 옳지 않다.
우리의 의도와는 전혀 맞지가 않다.
이러한 직접적인 수정을 막기위해서 private를 이용하여 외부에서 바로 위 인자들을 다룰수없게 하여 캡슐화(은닉) 해준다.
private static BEANS_GRAMM_PER_SHOT: number = 7; //class level
private coffeeBeans: number = 0; //instance (object) level
위와 같인 직접적인 수정을 막은 대신 함수를 이용(fillCoffeeBeans)하여 내부의 상태를 변경할 수 있도록 한다.
fillCoffeeBeans(beans: number) {
if (beans < 0) {
throw new Error("커피콩을 갯수는 0보다 커야한다.");
}
this.coffeeBeans += beans;
}
이렇게 함수를 만들어서 인자를 다룰 경우 올바른지 않은지 또한 한번 더 에러 처리를 해놓음으로써 좀더 안정성있게 만들수가 있다.
반응형
'기록 > TIL(Today I Learned)' 카테고리의 다른 글
[React] 주말동안 공부한 React 기본기능 (0) | 2022.11.13 |
---|---|
[TypeScript] 오늘의 공부 정리 (0) | 2022.11.01 |
TypeScript는 왜 써야할까?? 공부시작!!! (0) | 2022.10.28 |
NewsApi를 이용하여 기사데이터 가져오기(feat. node.js) (0) | 2022.10.26 |
22.09.17 TIL 서비스에 맞는 DB 설계란 과연 무엇일까?? 이게 과연 최선일까?? (0) | 2022.09.17 |
Comments