회고

[취업준비일지] - 25

Happy Programmer 2022. 11. 14. 23:29

1.Generator는 yield를 통해 변화되는 값들을 내보낼 수 있다.
함수와 차이점으로 볼 수 있는 것은 .next()를 통해 해당 값 다음을 요청할 수 있다는 것과 필요한 시점에 데이터를 "생성"하기 때문에
범위를 무한대로 지정하더라도 시간소모 또는 에러가 발생하지 않으며
불필요한 데이터 생성으로 인한 시간/메모리 소모도 없어 
시간, 공간복잡도 면에서도 우수하다.


2.class를 설정한 다음 extends로 상속을 받을 수 있으며
상속된 데이터 중 변경을 원할 경우는 constructor 내부에
super("extendsValue","ChangedValue")형태로 변경할 수 있다.

예시는 다음과 같다.

-클래스 생성

class Class {
 constructor(private id: string, className: string = "novice",  level: number){
 //this.id = id 작성하지 않아도 constructor에 있기 때문에 상관없다.
 //this.className = "novice"
 //this.level = level 
 }
 levelUp(){
  this.level++
 }
}


-궁병직업으로 레벨, 아이디와 레벨업 메서드를 상속받는다.

class Archer extends Class{
 constructor(id: string, className: string,  level: number){
  super(className, "archer")
 }
 shoot(){
 console.log("shoot")
 }
}


-마법사직업으로 레벨, 아이디와 레벨업 메서드를 상속받는다.

class Mage extends Class{
 constructor(id: string, className: string,  level: number){
  super(className, "mage")
 }
 magicMissile(){
 console.log("magic missile")
 }
}


-보우마스터직업으로

레벨, 아이디와 레벨업 메서드를 Class에서 상속받은

궁병직업(Archer)에서 레벨, 아이디, 레벨업 메서드, shoot 메서드를 상속받는다.

class BowMaster extends Archer{
 constructor(id: string, className: string,  level: number){
  super(className, "bowMaster")
 }
 arrowRain(){
 console.log("arrow rain")
 }
}



3.public은 외부에서도 접근이 가능하며
private는 클래스 내부에서만 접근이 가능하고 상속에서도 접근이 불가능하며
protected는 상속된 클래스들에서도 접근이 가능하다.


4.private의 값을 조회, 수정하고 싶다면 getter와 setter를 이용할 수 있다.

getter에는 반드시 무언가를 반환을 해야 하기 때문에 return이 필요하며
get "getterName"(){return this.xxx}의 형태로 private 조회가 가능하며
사용시에는 메서드처럼 ()를 붙이지 않고 호출해 사용한다.
anyClassName.getterName과 같은 형식으로 사용된다.

setter 또한 유사하지만 get 대신 set을 사용하는 것과
return이 없어도 상관없다는 차이가 있다.
또한 ()에 값을 넣는게 아닌
anyClassName.setterName = "Want to change" 형태로 사용된다.


5.크로스 사이트 스크립팅(XSS, Cross-Site Scripting)은 
유저에게 함정을 던진 채 기다리는 기법으로
더미 사이트등에서 데이터를 탈취한 다음 그 데이터를 정상 사이트로 넘겨
정상 작동하는 것 처럼 보이게 만든다.

실제 페이지 url 사이에 스크립트 코드를 넣어 작동될 경우 입력된 데이터를 공격자에 발송하는 방식을 사용하거나
특정 스크립트 사용시 접속 사이트의 쿠키를 전송해 데이터가 탈취당하는 방식이 있다.


6.배열리스트, 연결리스트가 주로 비교되는데 
배열은 index를 통한 접근이라는 장점이 있지만
타 언어에서는 데이터 추가 및 삭제에 시간이 오래 걸린다는 단점이 있고

연결리스트는 다음 노드의 포인터 위치를 가리키는 방식이기 때문에
앞, 뒤의 연결만 추가 및 삭제로 데이터를 관리할 수 있다.
(어제 언급했던 내용들인데 오늘 추가적으로 한 페이지를 차지하고 있다..)





(1).백준 3047 ABC는 A,B,C는 오름차순이지만
주어지는 숫자는 랜덤이기 때문에 정렬을 한번 해야 하고
그 값들을 주어지는 랜덤한 문자열에 따라 출력해주는 문제였다.

정렬로 A,B,C를 구해주고 문자열에 맞춰 값을 넣은 다음 출력했다.

let input = `6 4 2
CAB`.split('\n')

let [A,B,C] = input[0].split(' ').map(Number).sort((a,b) => a-b)
let result = []
for(let i = 0 ; i < 3 ; i++){
    if(input[1][i] === 'A'){
        result.push(A)
    }
    if(input[1][i] === 'B'){
        result.push(B)
    }
    if(input[1][i] === 'C'){
        result.push(C)
    }    
}
console.log(result.join(' '))