본문 바로가기

분류 전체보기

(49)
useEffect useEffect React Hook 에서 ComponentDidMount 와 ComponentDidupdate 와 같은 기능을 할 수 있게 해주는 api 다. 공식 홈페이지에서는 componentDidMount와 componentDidUpdate, componentWillUnmount가 합쳐진 것으로 생각해도 좋다고 한다. 참고 링크 https://ko.reactjs.org/docs/hooks-faq.html#is-it-safe-to-omit-functions-from-the-list-of-dependencies 사용예 const Test = () => { const [number, setCount] = React.useState(0); React.useEffect(() => { console.log(..
18788 - Swapity Swap 문제 오역 주의 농부 존의 N (1
18265 - MooBuzz 문제 ** 오역 주의 농부 존의 소들은 최근에 "FizzBuzz" 라 불리는 간단한 숫자 게임의 팬이 되었습니다. (...?) 게임의 규칙은 간답합니다. 원모양으로 서 있는 상태에서 소들은 1부터 차례대로 숫자를 세고, 각각의 소는 자신의 차례가 되면 하나의 숫자를 말합니다. 만약 한 소가 3의 배수에 해당하는 숫자를 말할 차례가 되면, 숫자 대신 "Fizz" 를 말해야 합니다. 만약 한 소가 5의 배수에 해당하는 숫자를 말할 차례가 되면, 숫자 대신 "Buzz" 를 말해야 합니다. 만약 한 소가 15의 배수에 해당하는 숫자를 말할 차례가 되면, 숫자 대신 "FizzBuzz" 를 말해야 합니다. 게임의 첫 부분은 아래와 같이 진행됩니다. 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz..
18267 - Milk Visits 문제 ** 오역이 있을 수 있으니 참고 부탁드립니다. 농부 John 은 N (1 ~ 105) 개의 농장을 지을 계획이다. 각 농장은 N-1 개의 길로 연결되어 있고, 농장은 tree 구조를 형성한다. (즉, 모든 농장들은 cycle 을 형성하지 않고, 어떻게든 다른 농장으로 갈 수 있다.) 각 농장은 소를 가지고 있으며, 소의 품종은 Guernsey 또는 Holsein 이다. Jhon 의 M (1 ~ 105) 명의 친구들은 종종 놀러온다. 친구 i 가 방문하는 동안, 존은 Ai 부터 Bi 까지 가는 유일한(unique) 길을 따라 친구와 함께 걷는다. 그들은 길을 따라 걸으면서 소의 우유도 먹을 수 있다. (john 씨 친절) 그의 친구들은 Guernsey 우유 나 Holstein 우유만 먹을 수 있다...
항목 17: new 로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 자원 누출 가능성 스마트 포인터 생성 코드 처리 우선순위를 알려주는 함수와 동적으로 할당한 Widget 객체에 대해 우선순위에 따라 처리를 적용하는 함수가 있다고 하자 int priority(); void processWidget(std::shard_ptr pw, int priority); //shared_ptr 을 통해 자원관리호출시 아래와 같이 쓰면 컴파일 에러가 난다! processWidget(new Widget, priority());shared_ptr 의 생성자는 explicit 로 선언되어 있기 때문에, new Widget 에 의해 만들어진 포인터가 shared_ptr 타입의 객체로 바뀌는 암시적 변환은 일어나지 않는다. 그래서 아래와 같이 써줘야 한다. processWidget(shared_..
항목 16: new 및 delete 를 사용할 때는 형태를 반드시 맞추자 delete 사용시 주의 사항 아래 코드를 보고 문제점을 찾아보자. string *stringArray = new string[100]; delete stringArray;그렇다. new 는 배열을 할당했는데, delete 는 그렇지 않다. stringArray 가 가리키는 100 개의 string 객체중 99개는 정상적인 소멸과정을 거치지 못할 가능성이 크다. new 와 delete 연산자의 동작 new 연산자를 사용해 어떤 객체를 동적 할당하게 되면, 두 가지의 내부 동작이 이뤄진다. 1) 메모리가 할당된다. (operator new 라는 이름의 함수가 쓰인다. 항목 49. 51 참조) 2) 할당된 메모리에 대해 한 개 이상의 생성자가 호출된다. delete 연산자를 쓸 때는 다음과 같은 두 가지 내..
항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자 자원 관리 클래스의 자원 접근 자원에 접근하려 하는 예 아래 createInvestment 로 자원을 만든 후, pInv 에 넘겨주는 경우를 생각해보자 (항목 13 예제) shared_ptr pInv(createInvestment());그리고 Investment 객체를 사용하는 함수가 다음과 같이 정의 되어있다고 하자 int daysHeld(const Investment *p); //그러면 이렇게 호출하고 싶겠죠 int days = daysHeld(pInv); 그러나 위와 같이 할 경우 컴파일이 되지 않는다. daysHeld 는 Investment * 타입의 포인터를 원하는데 , shared_ptr 타입을 넘기고 있으니 안되는 것! RAII 클래스 객체의 자원 변환 위 문제를 해결하기 위해서는 결국 RA..
항목 14: 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 자원 관리 클래스에 대한 고찰 항목 13에서 처럼 힙 기반 자원이 아니라면 어떻게 관리해야 하는가? 자원 관리 클래스를 결국 만들어야 한다. 예를 들어 Mutex 타입의 객체를 조작하는 C API 를 사용중이라고 가정해보자. 해당 API 는 lock, unlock 함수를 제공한다. void lock(Mutex *pm); void unlock(Mutext *pm);이전에 걸어 놓은 뮤텍스 잠금을 잊지 않고 풀어주기 위한 용도의 잠금 관리 클래스를 만들고 싶다면 이 클래스는 RAII 법칙을 따라 구성한다. == 생성 시에 자원을 획득, 소멸 시에 자원을 해제! 잠금 관리 클래스 class Lock { public: explicit Lock(Mutext *pm) : mutexPtr(pm){ lock(mutex..