1.keyof를 사용하면 key값에 접근할 수 있는데
일반적으로 <T extends object, U extends keyof T> 형태로 사용된다.
이렇게 진행해야 하는 이유는 객체 내부에 어떤 키가 들어있을지는 모르지만 넣어줄 객체의 키에 접근할 필요가 있을 경우 외부에서 타입체크로 오류를 방지하기 위해서다.


2.클래스에서 제네릭을 사용하는 방법은 유사하지만
클래스 내부 여러 작동 방식이 문자열, 배열, 객체 등 여러 타입에 따라 처리가 다를 수 있다.
이런 부분을 막기 위해 타입가드 형태로 잘못된 형태의 입력은 무시해야 하고
객체 등을 넣을 때는 변수에 할당 후 변수를 통제하는 방식으로 해야 한다.


3.interface나 alias등을 사용할 때 모든 내용물을 채우기 곤란한 경우
Partial을 사용할 경우 선택적 사용이 가능하게 된다.

또한 Readonly라는 타입을 설정할 경우 해당 데이터의 추가,제거,수정을 시도할 경우 에러 표시로 문제를 알 수 있게 한다.


4.리액트에서 작업할 경우 일반적 작업에는 타입 할당이 필요없지만
props를 넘기는 등의 작업에는 해당 props를 받아올 때 타입을 설정해야 한다.
받아오는 쪽에 type지정이 될 경우 보내는 컴포넌트에서도 타입 체크가 되며 


5.ref로 값을 받고 싶은 경우 제네릭으로 useRef<THMLInputElement>를 설정한 다음 Ref.current 값이 제대로 들어갈 것임을 확신할 수 있게 
사용하는 위치에서 Ref.current!.value 등으로 사용해야 한다.


6.PCB(Process Control Block)는 프로세스 메타데이터를 저장하는 곳으로 
프로세스 메타데이터에는 process id, process state, process priority, cpu registers, cpu usage, memory usage, owner 등이 있다.

인터럽트가 발생할 경우 현재 작업중이던 프로세스를 pcb에 저장한 다음
인터럽트 작업이 중단될 경우 다시 이전 작업을 pcb에서 불러온다.

PCB는 linked list 연결리스트 방식이기 때문에 추가/제거에 우수하다는 장점이 있다.


7.Context Switching은 PCB를 이용하는 과정을 말하는데
인터럽트만이 아닌 중단/재개가 작동하는 경우 Context Switching이 발생한다.
처리 도중 작업 외적인 시간이 들어가는 경우를 오버헤드라고 칭하며
이 시간을 단축할 경우 오버헤드가 감소했다고 할 수 있다.





(1).백준 1427 소트인사이드는 숫자를 받아 내림차순으로 정렬한 값을 출력하는 문제다.
split('')을 통해 배열로 만든 후 sort로 정렬한 다음 join으로 합치면 바로 해결된다.
브론즈 수준도 안되는 것 같은 문제였다.

let input = `500613009`.split('').sort((a,b) => b-a).join('')
console.log(input)

 

+ Recent posts