1.()=>{aaa()}처럼 한번만 사용하는 경우 aaa로 사용해야 하며
useEffect(()=>{aaa()})인 경우
useEffect(aaa) 또는 useEffect(aaa,[])로 처리 


2.mapping할 때 (el,index)로 index도 같이 넘겨서 사용할 경우 외부에서 접근할 때 마크업을 사용하지 않고 접근할 수 있다.

 


3.useRef는 랜더링이 되더라도 일반 value와 달리 변경되지 않는다.
useState와 다르게 리랜더링을 발생시키지 않는 값의 저장에 사용한다.


4.팩토리 메소드 패턴(Factory Method Pattern)은 Sub class에서 객체를 만드는 방식이다.

템플릿 메소드와 유사하게 타입 의존성을 낮추고 캡슐화 하는 것은 같지만
팩토리 메소드는 상속을 통해 객체의 생성부를 구현하지만
템플릿 메소드에서는 고정된 메서드는 미리 생성하고 잠궈둔 다음
다양성이 필요한 객체만 상속을 통해 생성할 수 있게 열어둔다.

확장성이 강하고 코드가 간결해진다는 장점이 있지만
생성을 위한 생성을 해야하는 경우가 생기고
(일반 컨스트럭터 또한 말 생성을 위한 말공장을 만들어야 한다는 이야기가 있는데
이건 말 생성을 위한 말공장 생성을 위한 말공장공장을 만들어야 한다)
불필요한 것 까지 팩토리 메소드를 사용할 경우 클래스가 지나치게 많아질 수 있다.

 

 

 

 


(1).백준 2684 동전 게임은 40번의 동전던지기에서 도출된
38개의 3연속하는 결과(앞앞앞, 뒤뒤뒤 등)를 분할해 
각 테스트케이스별로 출력하는 문제였다.

8개나 되는 3글자 문자열이기 때문에 객체로 구분해 index를 할당하고
결과 배열은 new Array로 생성해 0으로 초기화한 다음 
coinResult[coinOrder[input[i].slice(j-2,j+1)]]++를 통해
해당하는 문자열("HHH")의 인덱스(7)을 받아 coinResult 배열의 값을 증가시켰다.

let input = `4
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
HHTTTHHTTTHTHHTHHTTHTTTHHHTHTTHTTHTTTHTH
HTHTHHHTHHHTHTHHHHTTTHTTTTTHHTTTTHTHHHHT`.split('\n')

let result = []
for(let i = 1 ; i < input.length ; i++){
    let coinOrder = {TTT : 0, TTH : 1, THT : 2, THH: 3, HTT: 4, HTH:5, HHT:6, HHH:7}
    let coinResult = new Array(8).fill(0)
    for(let j = 2 ; j < input[i].length ; j++){
        coinResult[coinOrder[input[i].slice(j-2,j+1)]]++
    }
    result.push(coinResult.join(' '))
}

console.log(result.join('\n'))

 

+ Recent posts