반응형


살다보면 자연스레 계속해서 들려오는 단어가 있다.
IRP, 퇴직연금, ISA, 국민연금, 개인연금, 절세 혜택, 비과세...

빈번하게 듣고 몇번이고 살펴보고 듣게되지만 잘 요약정리 되지는 않는 그 단어들

오늘 한방에 정리하고 나의 평온한 미래를 위해 어떤 우선순위로 설계 해나가야 할지 정리해보자.

우선 본 포스팅에서는 각 단어의 개념을 알아보자.


[ IRP (개인형 퇴직연금 제도) ]

- 정의: 근로자가 퇴직 또는 이직할 때 받는 퇴직금을 포함하여 추가로 납입한 개인부담금을 적립하고 운용하여 노후에 연금 또는 일시금으로 수령할 수 있도록 하는 제도


- 가입 대상: 퇴직연금 가입자라면 퇴직 또는 이직 시 IRP 계좌를 개설해야 한다.


- IRP의 종류
1) 개인형 IRP: 근로자가 퇴직하거나 이직할 때 받은 퇴직금을 이 계좌에 넣어 노후 자금으로 활용할 수 있다.

2) 기업형 IRP: 상시 근로자 10명 미만 사업장에서 퇴직연금 제도를 간편하게 도입할 수 있도록 한 제도이다.


- IRP의 혜택
1) 세액 공제 혜택: IRP에 납입한 금액에 대해 세액 공제 혜택을 받을 수 있습니다. 연간 1,800만 원까지 납입할 수 있으며, 다른 세액공제 상품과 합산하여 연간 900만 원까지 세액 공제를 받을 수 있습니다.

2) 퇴직금 보호: 퇴직금을 IRP 계좌에 넣어두면 안정적으로 관리할 수 있으며, 중간에 사용하지 않고 노후 자금으로 활용할 수 있습니다.

3) 운용 수익: IRP 계좌에서 투자 상품을 선택하여 운용할 수 있으며, 운용 결과에 따라 수익을 얻을 수 있습니다.

4) 연금 또는 일시금 수령: 만 55세 이후 IRP 계좌에 있는 금액을 연금 또는 일시금으로 수령할 수 있습니다.




 

[ ISA (개인종합자산관리계좌) ]

- 정의: ISA는 다양한 금융 상품을 하나의 계좌로 통합 관리하면서 세제 혜택까지 누릴 수 있는 개인종합자산관리계좌이다. 2016년 3월 도입되었으며, 예금, 펀드, 주식, ETF 등 다양한 금융 상품을 한 계좌 안에서 자유롭게 투자하고 관리할 수 있다는 장점이 있다.


- ISA의 종류
ISA는 크게 3가지 종류로 나뉩니다.

1) 신탁형 ISA: 금융회사가 고객의 투자 성향에 맞춰 상품을 추천하고 운용해 주는 방식이다.

2) 일임형 ISA: 금융회사가 고객과 투자 목표 및 전략을 협의한 후 고객의 투자 판단에 따라 금융 상품을 구성하고 운용하는 방식이다.

3) 중개형 ISA: 고객이 직접 투자 상품을 선택하고 거래하는 방식이다.


- ISA의 혜택
ISA의 가장 큰 혜택은 세제 혜택이다.

1) 비과세 혜택: ISA 계좌 내에서 발생한 순이익에 대해 200만 원까지 비과세 혜택을 받을 수 있다.

2) 분리과세 혜택: 연간 200만 원을 초과하는 순이익에 대해서는 9.9%의 저율 분리과세가 적용된다.


- ISA 가입 조건
ISA는 만 19세 이상의 거주자라면 누구나 가입할 수 있습니다. 다만, 소득 기준에 따라 가입 가능한 ISA 종류가 다를 수 있다.


- ISA 가입 시 유의사항
1) 가입 기간: ISA는 수익금을 계좌에 3년 이상 유지해야  수익금에 대한 세제 혜택을 받을 수 있다.

2) 중도 해지: 3년 이내에 중도 해지할 경우 세제 혜택을 받을 수 없으며, 기존에 받았던 세금 감면액을 반납해야 한다.

3) 투자 상품: ISA 계좌에서 투자할 수 있는 상품은 제한적일 수 있으므로, 가입 전에 투자 가능 상품을 확인해야 한다.

4) 수수료: ISA 계좌는 계좌 관리 수수료, 운용 수수료 등이 발생할 수 있으므로, 가입 전에 수수료율을 확인해야 한다.
ISA 관련 추가 정보
* ISA 계좌는 1인당 1개만 개설할 수 있다.
* ISA 계좌의 연간 납입 한도는 2,000만 원이다.
* ISA 만기 후 60일 이내에 연금 계좌로 전환하면 추가적인 세액 공제 혜택을 받을 수 있다.

ISA는 자산 관리와 절세를 동시에 할 수 있는 유용한 금융 상품니다. 하지만, 가입 전에 ISA의 종류, 혜택, 유의사항 등을 꼼꼼히 확인하고 자신에게 맞는 ISA를 선택하는 것이 중요하다.



[ 비과세 혜택이란? ]

ISA(개인종합자산관리계좌)의 가장 큰 매력 중 하나는 비과세 혜택입니다.

비과세 혜택이란게 뭘까?

- 정의:  ISA 계좌 내에서 발생하는 순이익에 대해 세금을 부과하지 않는다는 의미입니다.

- 비과세 혜택, 왜 중요할까요?
일반적으로 금융 상품에 투자하여 수익이 발생하면 소득세를 내야 합니다. 이자 소득세는 15.4%로 꽤 높은 편이다. 하지만 ISA 계좌를 이용하면 이러한 세금 부담을 줄일 수 있다.

예를 들어:
1) ISA 계좌: 100만 원 투자 -> 110만 원으로 증가 (순이익 10만 원) -> 세금 0원

2) 일반 계좌: 100만 원 투자 -> 110만 원으로 증가 (순이익 10만 원) -> 세금 15,400원

위 예시처럼 ISA 계좌를 이용하면 10만 원의 순이익에 대해 15,400원의 세금을 아낄 수 있다.


- 비과세 한도
ISA 비과세 혜택은 연간 200만 원까지 적용됩니다. 즉, ISA 계좌 내에서 발생한 순이익이 200만 원 이하일 경우 세금이 전혀 부과되지 않는다.


- 비과세 혜택, 누가 받을 수 있나요?
ISA 비과세 혜택은 만 19세 이상의 거주자라면 누구나 받을 수 있다. 다만, 소득 기준에 따라 가입 가능한 ISA 종류가 다를 수 있다.


- 비과세 혜택, 어떻게 활용해야 할까요?
ISA 비과세 혜택을 최대한 활용하기 위해서는 다음과 같은 방법을 고려해 볼 수 있다.

1) 다양한 금융 상품 활용: ISA 계좌 내에서 예금, 펀드, 주식, ETF 등 다양한 금융 상품을 활용하여 투자 수익을 극대화한다.

2) 장기 투자: ISA는 3년 이상 유지해야 세제 혜택을 받을 수 있으므로, 장기적인 관점에서 투자 계획을 세우자.

3) 만기 후 연금 계좌 전환: ISA 만기 후 60일 이내에 연금 계좌로 전환하면 추가적인 세액 공제 혜택을 받을 수 있다.


- 결론
ISA 비과세 혜택은 투자 수익에 대한 세금 부담을 줄여주는 매우 유용한 혜택이다.




 

[ 개인연금 ]


- 정의: 개인연금은 노후 대비를 위해 개인이 자발적으로 가입하는 연금 상품이다. 공적연금(국민연금) 외에 추가적인 노후 소득을 마련하고자 하는 사람들이 가입하며, 세액 공제 혜택과 안정적인 노후 생활을 보장받을 수 있다는 장점이 있다.


- 개인연금의 종류
개인연금은 크게 2가지 종류로 나눌 수 있다.

1) 연금저축:
   • 정의: 금융기관에서 판매하는 연금 상품으로, 세액 공제 혜택이 주어진다.

   • 종류: 연금저축신탁, 연금저축펀드, 연금저축보험 등이 있다.

   • 가입 대상: 소득이 있는 사람이면 누구나 가입 가능하다.

   • 납입 한도: 연간 1,800만 원까지 납입 가능하며, 세액 공제는 연간 900만 원까지 가능하다.
  
  • 세액 공제: 납입액의 16.5% 또는 13.2%를 세액 공제받을 수 있다.

   •수령 방식: 만 55세 이후 연금 형태로 수령하거나, 일시금으로 수령할 수 있다.

2) 연금보험:
   • 정의: 보험회사에서 판매하는 연금 상품으로, 비과세 혜택이 주어집니다.

   • 종류: 변액연금보험, 공시이율형 연금보험 등이 있습니다.

   • 가입 대상: 누구나 가입 가능하다.

   • 납입 한도: 제한 없음

   • 비과세 혜택: 보험료 납입액에 대해 비과세 혜택을 받을 수 있다.

   • 수령 방식: 만 55세 이후 연금 형태로 수령하거나, 일시금으로 수령할 수 있다.


- 개인연금의 혜택
1) 세액 공제 혜택 (연금저축):
   • 연간 납입액의 16.5% 또는 13.2%를 세액 공제받을 수 있다.
   • 예시: 연간 900만 원을 납입하면 최대 148만 5천 원의 세금을 환급받을 수 있다.

2) 비과세 혜택 (연금보험):
   • 보험료 납입액에 대해 비과세 혜택을 받을 수 있습니다.
   • 이는 이자 소득세 15.4%를 절약하는 효과가 있다.

3) 노후 대비:
   • 개인연금은 노후에 안정적인 소득을 제공하여 생활 안정을 도모할 수 있도록 도와준다.

4) 자산 관리:
   * 개인연금을 통해 다양한 금융 상품에 투자하여 자산을 효율적으로 관리할 수 있다.


- 개인연금 가입 시 유의사항
1) 가입 조건:
   * 각 상품별 가입 조건을 확인해야 한다.
   * 연금저축은 소득이 있는 사람만 가입 가능하다.

2) 납입 금액:
   * 자신의 소득 수준과 노후 계획에 맞춰 적절한 납입 금액을 설정해야 한다.

   * 연금저축은 연간 납입 한도가 정해져 있다.

3) 수령 방식:
   * 연금 형태로 수령할지, 일시금으로 수령할지 신중하게 결정해야 한다.
   * 각각의 장단점을 고려하여 자신에게 맞는 방식을 선택해야 한다.

4) 중도 해지:
   * 개인연금을 중도 해지할 경우 세제 혜택을 받을 수 없거나 불이익이 발생할 수 있다.
   * 신중하게 가입 결정을 해야 한다.


- 결론
개인연금은 안정적인 노후 생활을 위한 필수적인 준비이다. 세액 공제 및 비과세 혜택과 더불어 노후 소득 보장 및 자산 관리의 효과까지 누릴 수 있다.

개인연금 가입 시에는 자신의 상황과 목표에 맞춰 신중하게 상품을 선택하고, 장기적인 관점에서 꾸준히 납입하는 것이 중요하다.

반응형
반응형

 

[결론 미리보기] 통상임금 법 개정후 변화

결론부터 말하면,  고용주가 특별한 변화를 주지 않는한 피고용인 입장에서 실급여 상승의 효과가 있습니다.

 

 

[본문]

최근 한국에서 통상임금에 대한 법적 개념이 변경되었습니다.

 

2024년 12월 대법원 전원합의체는 통상임금의 판단 기준 중 하나였던 '고정성' 요건을 폐지하는 판결을 내렸습니다.

이 판결로 인해 재직 조건부 상여금이나 명절 상여금, 휴가비 등도 통상임금에 포함될 수 있게 되었습니다.

 

대법원의 판결 이후, 고용노동부는 2025년 2월 6일 전국 기관장 회의를 열어 '통상임금 노사지도 지침'을 11년 만에 개정하였습니다.

이 지침은 대법원 판결 내용을 반영하여 통상임금의 범위를 확대하고, 노사 간의 절차 준수를 강조하고 있습니다.

 

이제 실제 어떤 변화가 있을지 한번 살펴볼까요?

 

 

[고용주와 피고용인에게 미치는 영향]

1. 고용주(기업)에게 미치는 영향

- 통상임금 범위 확대에 따라 연장·야간·휴일 근로수당 등의 산정 기준이 높아져 인건비 부담이 증가할 수 있습니다.

- 임금 체계의 재검토 및 개편이 필요하며, 노사 간 협의를 통해 새로운 임금 구조를 마련해야 합니다.

- 통상임금을 줄이기 위한 일방적인 지급 조건 변경은 법적 문제가 될 수 있으므로, 절차 준수를 엄격히 지켜야 합니다.

 

2. 피고용주(근로자)에게 미치는 영향

- 통상임금 범위 확대로 인해 연장·야간·휴일 근로수당 및 퇴직금 등이 증가하여 실질적인 임금 상승 효과를 기대할 수 있습니다.

- 명절 상여금, 휴가비 등이 통상임금에 포함됨에 따라 근로 조건이 개선될 수 있습니다.

 

 

[중소기업에 재직중인 홍길동씨 급여명세서 변화]

연봉 5,000만 원을 받는 홍길동 씨가 50인 이하 중소기업에 근무한다고 가정하겠습니다. 법 변경 전후의 급여명세서를 비교하여 세금 및 실수령액 변화를 살펴보겠습니다.

 

가정 조건:

1) 포괄임금제

2) 연봉: 5,000만원

3) 기본급: 월 350만원

4) 명절 상여금: 연 2회 (각 100만원)

5) 연간 총 상여금: 200만원 (4번 항목)

6) 세율 및 공제 항목은 일반적인 기준을 적용

 

법 개정 전:

1) 월 지급액: 총 400만원

- 기본급 300만원

- 포괄수당 100만원

2) 총 공제액: 35만 4천원

- 국면연금: 13만 5천원 (300만원 * 4.5%)

- 건강보험: 10만 5천원 (300만원 * 3.5%)

- 고용보험: 2만 4천원 (300만원 * 0.8%)

- 소득세 및 지방소득세: 약 9만원

3) 실 수령액: 364만 6천원

- 총 지급액 - 총 공제액

 

법 개정 후:

1) 월 총 지급액: 410만원

- 기본급 300만원

- 포괄수당 110만원

2) 총 공제액: 35만 9천원

- 국면연금: 13만 5천원 (300만원 * 4.5%)

- 건강보험: 10만 5천원 (300만원 * 3.5%)

- 고용보험: 2만 4천원 (300만원 * 0.8%)

- 소득세 및 지방소득세: 약 9만 5천원

4) 실 수령액: 374만 1천원

- 총 지급액 - 총 공제액

 

(실제급여는 회사별, 개인별로 차이가 있을 수 있습니다. 참고만 해주시기 바랍니다.)

 

[ 결론 ]

통상임금 항목의 개념이 변화함에 따라, 홍길동씨의 실 수령액이 증가하게 되었습니다.

고용주들이 어떻게 대응할지 앞으로 귀추가 주목되는데요.

 

역사적으로 법이 변경될때마다 실질적으로 피고용인에게는 득이된적은 없습니다.

기업은 꼼수를 부려 법의 사각지대로 빠져나가고 피고용인은 세금만 늘어 실 급여엔 변화가 없거나 오히려 줄어들었습니다.

 

이번 법의 변화가 모두에게 도움이 되는 전체 경기가 좋아지는데 도움이 되는 시발점이 됐으면 좋겠습니다.

 

 

반응형
반응형

안녕하세요. 정말 오랜만에 포스팅합니다.

전기차 보조금 초간편 조회

https://ev.bot-more.com

 

 

전기차 시대가 천천히 다가오고있네요.

예상보다는 느리게 오지만 전기차 시대가 온다는대는 모두 이견이 없는듯 합니다.

 

정부에서도 전기차 시대에 발맞춰 보급을 확대하고자,

전기차 보조금 정책을 시행하고 있는대요.

 

적게는 백만원에서 크게는 천만원이 훌쩍 넘는 전기차 보조금.

제대로 모르고 가면 마치 딜러가 할인해주는듯

홀리는 말에 넘어가기 쉽상입니다..!!

 

이렇게 큰 금액인 전기차 보조금을 어떻게 조회해야 하는지,

많은 실수요자 분들이 어려워하고 계십니다.

저도 정말 불편했고요.

 

이건 뭐 전기차를 사라는건지 말라는건지.

https://ev.or.kr/nportal/buySupprt/initSubsidyPaymentCheckAction.do

 

무공해차 통합누리집

기준년도 2019 2020 2021 2022 2023 2024 조회

ev.or.kr

 

유일한 전기차 보조금 조회 가능 방법이 이 무공해차 누리집을 통해서 찾는건데요.

내 지역, 내가 원하는 차를 비교하기가 너무너무 불편하더라고요.

 

그래서 그냥 제가 전기차 보조금 조회 챗봇을 만들었습니다.

 

모델명 대충 입력하고,

지역명 대충 입력하면 원하는 보조금 조회가 가능합니다..!!

 

차량의 정확한 이름을 모르더라도 조회 가능하니 편하게 이용해보세요

 

반응형
반응형

In Typescript, the exclamtion is sometimes used in last of the characters.

For example,

const people = { name: 'kim' };

if (people.name!) {
  ...
}

what is meaning?

In TypeScript, the exclamation mark (!) is used to assert that a value is not null or undefined. It is called the non-null assertion operator. However, it is typically used when you are certain that the value will not be null or undefined, and it should be used with caution.

반응형

'개발, 코딩 > typescript' 카테고리의 다른 글

typescript, 제네릭에대해 알아보자  (0) 2022.11.10
optional과 undefined의 차이  (0) 2022.10.26
typescript, 타입 소개  (0) 2022.10.26
반응형

동일한 정규식에 동일한 값을 넘겼음에도

반복해서 true, false를 번갈아 반환했다.

대체 왜!!!

 

이유

정규식에 g 옵션이 있으면, test() 메소드는 정규 표현식의 lastIndex를 업데이트하게 된다.

test() 메소드와 exec() 메소드는 내부적으로 lastIndex부터 문자열을 검사하게 되는데,

test() 메소드는 true를 반환했던 lastIndex부터 계속해서 검사하게 된다.

 

그리고 lastIndex는 false를 반환하기 전 까지 초기화가 안되는 특징이 있다.

 

따라서, 체크때마다 true / false를 반복해서 반환하는 이슈가 발생

반응형
반응형
// < 18
type TagPrpos = {
  name: string,
};

const Tag: React.FC<TagProps> = ({ name }) => (
  <div>
    <div>{ name }</div>
    { children }
  </div>
);
// > 18
type TagPrpos = {
  name: string,
  children: react.ReactNode
};

const Tag: React.FC<TagProps> = ({ name, children }) => (
  <div>
    <div>{ name }</div>
    { children }
  </div>
);

 

children 요소를 명시적으로 선언해줘야한다.

< 18에서는 children이 optional로 선언되어있었던 반면,

18에서는 optional 선언도 제거되었기 때문이다.

반응형
반응형

class변수를 어떤 방식으로 선언할지 고민해보게되는 계기가 있었다.

class변수에는 총 세가지가 있다
1. static 변수
2. instance 변수
3. local 변수

각각의 특성에 대해 알아보고 언제 어떻게 선언하는게 프로그램에 도움이 되는지 고민해보자.

1. static변수

class HumanLifeCycle {
  static morningRoutine = 'coffee';
  ...
}

위에서 보이는 static키워드를 이용한 선언 방식이 static변수이다. 변수를 static으로 선언하게 되면 해당 클래스러 몇개의 인스턴스를 생성하던지 상관없이 메모리상 하나의 변수만 참조하게된다. 따라서, 메모리를 절약할수 있다는 장점이 있다.
그렇다고 늘 static으로 선언해서는 안된다. 단 하나의 변수라는 개념인 만큼 여러 인스턴스에서 하나의 값을 공유하게 되기 때문에 각 인스턴스가 독립적으로 변수를 다뤄야 한다면 static을 써서는 안된다.
static이란 이름에 걸맞게 정적이고(변동이 없고) 클래스 인스턴스 간 글로벌하게 쓰이는 경우에 static변수를 쓰도록 하면 어떨까?

2. instance변수

class HumanLifeCycle {
  constructor() {
    this.pattern = {
      morning: '',
      afternoon: '',
    };
  }
}

위 코드에서 보이는 this.pattern이 instance변수에 해당한다. new연산자를 통해 인스턴스를 생성할때 마다 메모리에 해당 변수에 대한 공간을 할당한다. 즉, 인스턴스간 독립적인 변수를 갖게된다.
static이 클래스 레벨에서 변수를 공유하는것과 달리 인스턴스 레벨에서 변수를 다룬다는 차이가 있다. 메모리에 예민한 프로그램이 아니라면 직관적인 instance변수를 주로 즐겨쓰지만 최고의 프로그래머가 되려면 최적화에 대해 더 고민해볼 필요가 있을것 같다.

3. local변수
클래스 내 메소드에서 선언한 변수에 해당한다. 메소드 내에서 잠시 값을 담아두기 위해 쓰이곤 한다.

반응형
반응형

1. tsc 컴파일시 디렉토리 생성 기준
-> 최상위에 위치한 ts파일

2. 컴파일된 js파일이 위치할 폴더 지정
-> outDir

3. 컴파일할 폴더의 루트경로 설정 (해당 설정을하면 경로외에 위치한 ts파일이 있을때 컴파일 에러를 발생 시킨다. 협업시 잘못된 디렉토리 구조 생성을 방지할 수 있다.)
-> rootDir

4. 컴파일 대상에서 특정 파일 제외
-> exclude (배열에 경로+파일명으로 지정, *사용가능)

5. 컴파일 대상 제한 (징정된 파일만 컴파일함)
-> include (배열에 경로+파일명으로 지정, *사용가능)

6. 업데이트 된 ts파일만 컴파일 (true로 하면 디스크 공간을 더 많이 차지한다는 이슈..? 가 존재)
-> incremental

7. 컴파일 수준 정의 (보통 es5/6), 낮은 버전을 쓸수록 더 더러운 코드가 많이 발생하기 때문에 적정 수준의 버전 선택이 중요함
-> target

8. 모듈 정보를 어떤 것으로 할지 설정 (node 환경이면 보통 commonjs, 브라우저 환경이면 ecmascript에 맞는것으로)
-> module

9. module에서 필요한 library만 설정하려면
-> lib (배열에 지정, dom 등이 위치할 수 있음)

10. 프로젝트에 js를 쓸것을 허용
-> allowjs

11. js파일에서 문제가 있다면 경고를 띄움
-> checkjs

12. react관련 jsx를 쓰려면
-> jsx

13. 내 코드를 라이브러리로 공유, 타인에게 제공할 계획이라면..?
-> declaration

14. 다수의 컴파일된 js파일을 하나의 파일로 만드려면
-> outfile

15. incremental과 함께 이전 빌드 정보를 기억해, 다음 빌드 속도를 향상시키려면
-> composite

16. incremental을 사용할때 이전 빌드 정보를 저장할 파일 경로를 지정하려면
-> tsBuildInfoFile

16. 코드상에 comment를 모두 제거하려면
-> removeComment

17. 컴파일 에러체크만 하고 js로의 컴파일로 변경은 하고싶지 않을때
-> noEmit

18. 각각의 파일을 다른 모듈로 변환하고자 할때
-> isolatedModules

19. 엄격한 확인을 굳이굳이 특별한 이유로 받기 싫다면
-> strict false

반응형
반응형

제네릭
보기에도 이상하고 워딩도 애매서
단어만 들었을땐 거부감이 좀 든다

하지만, any를 남발하지 않으려면
제네릭은 반드시 알아야만 할것으로 생각된다.

분명 많은 개발자들이 any를 쓰는 그 순간까지
아 이거 그런거 없나..
하고 생각했을텐대
알고보면 바로 그게 제네릭이다
(나만 그랬나..?)

제네릭에대해 바로 알아보자.
제네릭을 정의 하자면 "아직은 정해지지 않았지만 쓰는 사람이 쓰는 타입에 따라 유동성있게 정해지는 타입임"을 의미한다.

일단, 제네릭 없이 각 기계장치에 엔진을 간단 붙여본다.

interface Vehicle {
  run() => void;
}

class Car implements Vehicle {
  run(runTime: number) {
    console.log('4 wheels drive...', runTime);
  }
  
  changeWheel(wheelNumber: number) {
    if (wheelNumber > 4)
      throw new Error('You have only 4 wheels...');
      
    console.log('changed whleel');
  }
}

class Airplane implements Vehicle {
  run(runTime: number) {
    console.log('2 wings drive...', runTime);
  }
  
  fixWing(wingPosition: 'left' | 'right') {
    console.log('fix..!');
  }
}

function doPreRun(vehicle: Vehicle): Vehicle {
  vehicle.run(30);
  return vehicle;
}

const genesis = new Car();
genesis.changeWheel(3); // ok

doPreRun(genesis);
genesis.changeWheel(4); // failed error

위 코드에서 보다시피
예열이 되어 반환된 인스턴스는
본인의 정체성을 잃고 interface의 구현만 갖는다.
doPreRun함수가 Vehicle 인스턴스를 리턴하기 때문이다.

이러한 상황을 피하고 보다 유동성있고 추상화하여 작성하고 싶다?
이럴때 바로 제네릭이 필요하다
제네릭을 이용해 코드를 작성해본다.

function doPreRun<T>(vehicle: T): T {
  vehicle.run(30);
  return vehicle;
}

const genesis = new Car();
genesis.changeWheel(3); // ok

doPreRun(genesis);
genesis.changeWheel(4); // ok

T라는 캐릭터를 썻는데 어려워할 필요없다.
임의의 T(Type)이라는 것이니까
다른 표현으로 V(Value), K(Key) 등이 많이 쓰인다고한다.


조금만 더 나아가보자.
지금은 T라는 타입이 너무 광번위 하여
다른 개발자가 Vehicle이 아닌 인스턴스를 넘길 위험이 존재해 보인다.

function doPreRun<T extends Vehicle>(vehicle: T): T {
  vehicle.run(30);
  return vehicle;
}

const genesis = new Car();
genesis.changeWheel(3); // ok

doPreRun(genesis);
genesis.changeWheel(4); // ok

이렇게
Vehicle을 확장(상속)하여 구현한 타입만을
허용하도록 수정할 수 있다.

제네릭을 더욱 유용하게 쓰기위해
constrains라는 것에 대해 알아볼것이다.
constrains는 제네릭에 조건을 거는것이다

const obj1 = {
  name: 'mocar',
  age: 31,
};

const obj2 = {
  hasPen: true,
  hasNote: false,
};

const obj3 = {
  cash: 3000,
  debt: 1000000,
};

const getValue<T, K extends keyof T> = (obj: T, key: K): T[K] => {
  return obj[key];
}

어떤가
알고보면 그렇게 어렵지않고
매우 유용한것이다.

반응형

'개발, 코딩 > typescript' 카테고리의 다른 글

Typescript, "people.name!" - what is meaning?  (0) 2023.06.05
optional과 undefined의 차이  (0) 2022.10.26
typescript, 타입 소개  (0) 2022.10.26
반응형

함수형 프로그래밍, 방어적 프로그래밍 등

다양한 영역에 걸쳐서

순수함수를 작성할 것을 강조한다.

 

순수함수란 무엇인가?

const total = sum(2, 8);

function sum(a, b) {
  return a + b;
}

여기 sum이라는 함수처럼

부수효과가 없는 함수 

즉, 어떤 함수에 동일한 인자를 주었을 때 항상 같은 값을 리턴하는 함수

 

부수효과?

그것의 의미는 바로,

외부의 상태를 변경하는 것

또는 함수로 들어온 인자의 상태를 직접 변경하는 것

을 의미한다.

 

순수함수가 아닌 경우의 sum

const total = sum(2, 8);
let favoriteNumber = 4;

function bugSum(a, b) {
 const sum = a + b;
 favoriteNumber = sum;
 return sum + favoriteNubmer;
}

 

위와 같이 함수를 작성하면

언제 프로그래밍에 버그를 만들어낼지 모른다.

나 혼자 개발한다면

혼자 잘 주의해서 개발하면 괜찮지만

 

다른 개발자가

내 코드를 받아서 사용할때

부수효과를 만들수 있는 favoriteNumber를

직접 조작하는 경우 등

에러요인이 만들어 질 가능성이 존재한다.

 

순수함수를 작성하도록 노력하자!

반응형

'개발, 코딩' 카테고리의 다른 글

객체지향 프로그래밍 핵심 개념  (0) 2022.10.27
git 기본기_백과사전(2)  (0) 2022.10.26
git 기본기_백과사전 (1)  (0) 2022.10.24
git 협업하기 - 실무편  (0) 2022.10.23
Webpack 구성 이해하기  (0) 2022.10.04