1.인터페이스에 readonly를 설정할 경우
implements로 받아온 클래스에서는 추가적 설정이 없더라도
자연스럽게 인터페이스의 readonly를 받아와 readonly로 설정된다.
2.인터페이스도 클래스처럼 상속을 받을 수 있기 때문에
여러 인터페이스를 하나에 적용하고 싶을 경우
interface Something extends AnotherInterface{} 형태로 확장할 수 있다.
3.인터페이스 또는 클래스 등에서 특정 변수등의 뒤에 ?를 붙일 경우
해당 변수가 있는 경우에는 지정된 타입을 따르지만
해당 변수가 존재하지 않아도 된다는 설정이다.
value? : string 과 같은 형태로 선언한다.
4.인터섹션 타입은 유니온 타입과 다르게 &연산자를 사용해 표현한다.
유니온 타입은 or의 형태로 두가지 모두 사용할 수 있지만
인터섹션 타입은 and의 형태로 두가지 타입을 모두 사용해야만 한다.
예를 들어 아래와 같이 a,b가 합쳐져 c type이 된다.
type a = {aa : string; bb : number;},
type b = {bb : number; cc : string[];}
type c = a & b === {aa : string; bb : number; cc : string[]}
5.타입가드는 유니온 타입의 사용 시 작업 중
여러 타입의 충돌로 인한 문제를 해결하기 위해 사용되는데
일반적으로는 if(typeof variable === string)과 같은 형태로
type을 체크하는 것을 타입 가드라고 한다.
하지만 사용자 정의 타입(alias)등을 사용할 경우
type체크를 할 수 없는데 이럴 경우 사용하는 것이 in이다.
특정 변수가 현재 변수에 들어있는지 확인하기 위해
if('variable' in valuesName)과 같은 형태로 특정 매개변수가 포함되어 있다면 작업을 진행하는 방식으로 체크를 하고 이를 인식해 타입체크가 통과된다.
또는 클래스를 사용할 경우 아래와 같은 방식으로 타입가드를 설정할 수 있다.
if('variable' instanceof valuesName)
6.구별된 유니온은 유니온 형식으로 여러개의 타입을 사용할 경우
각각을 모두 타입가드로 구별하기는 힘들기 때문에
공통된 속성(예를 들면 type)에 특정할 값들을 넣고
xxxx.type === 'aaa' 과 같은 형식으로 타입 체크가 가능하다.
또한 type를 따로 지정하지만 type이라는 변수에 할당되어 있음은 알고 있기 때문에 switch로 쉽게 접근해 타입가드를 설정할 수 있다.
switch(xxxx.type){
case 'aaa'
console.log(xxxx.somthingInA)
case 'bbb'
console.log(xxxx.somthingInB)
}
7.형 변환은 html요소 등을 가져올 때 타입을 알려주기 위해 사용된다.
두가지 방법을 통해 타입을 지정해 줄 수 있는데
변환하고자 하는 요소 앞이나 타입을 알려주려고 하는 위치 앞에 추가하는 방식으로 <HTMLInputElement> 등을 추가해 주는 방식과
원하는 값 뒤에 as HTMLInputElement를 추가하는 방식 모두 동일하게 작동한다.
두가지 방식이 있는 이유는 첫번째 괄호쌍으로 지정할 경우 리액트 JSX구문과 유사하기 때문에 충돌을 막기 위해 두번째 방식이 고안되었다.
8.입력을 감지하는 방식에는 폴링과 인터럽트 두가지가 있다.
폴링 방식은 cpu가 작업 중 입출력 명령을 만나면
직접 데이터를 가져오는 방식으로 현재는 사용하지 않으며
인터럽트 방식은 더 우선순위가 높은 작업이 발생하는 경우
일터럽트 과정을 진행하는데 순서는 아래와 같다.
1.과정 진행 중 인터럽트 신호 발생
2.진행중인 작업을 멈추고 저장
3.인터럽트 처리
4.저장된 작업 중단점 확인
5.작업 재개
폴링보다 인터럽트 방식이 우수하기 때문에
자연스럽게 폴링 방식은 도태되고 인터럽트 방식으로 교체되었다.
인터럽트는 전원이상, 신호, 입출력, 에러발생, 우선순위 작업 요청 등에 의해 발생된다.
(1).백준 4493 가위 바위 보? 문제는 여러 회차가 나눠져 있었다.
각 테스트케이스들마다 일정 횟수의 가위바위보를 통해
승자를 출력하며 비긴 경우는 TIE를 출력해야 했다.
낮은 난이도치고 문제가 되는건 테스트케이스 분할 부분인데
for문과 i += x 형태로 테스트 케이스를 분리하는 방식으로 분할한 다음
일반적인 방식으로 가위바위보의 승패를 결과에 담은 다음 result.join('\n')으로 처리했다.
let input = `3
2
R P
S R
3
P P
R S
S R
1
P R`.split('\n')
let arr = []
let result = []
for(let i = 1 ; i < input.length ; i++){
arr.push(input.slice(i+1,i+1+Number(input[i])))
i += Number(input[i])
}
for(let i = 0 ; i < arr.length ; i++){
let a = 0
let b = 0
for(let j = 0 ; j < arr[i].length ; j++){
if(arr[i][j] === 'S R'){
b += 1
}
else if(arr[i][j] === 'S P'){
a += 1
}
else if(arr[i][j] === 'R S'){
a += 1
}
else if(arr[i][j] === 'R P'){
b += 1
}
else if(arr[i][j] === 'P S'){
b += 1
}
else if(arr[i][j] === 'P R'){
a += 1
}
}
if(a>b){
result.push('Player 1')
}
else if(a<b){
result.push('Player 2')
}
else{
result.push('TIE')
}
}
console.log(result.join('\n'))

'회고' 카테고리의 다른 글
| [취업준비일지] - 38 (0) | 2022.11.27 |
|---|---|
| [취업준비일지] - 37 (0) | 2022.11.26 |
| [취업준비일지] - 35 (1) | 2022.11.24 |
| [취업준비일지] - 34 (0) | 2022.11.23 |
| [취업준비일지] - 33 (0) | 2022.11.22 |
