분류 전체보기 (49) 썸네일형 리스트형 항목 13: 자원 관리에는 객체가 그만! 참고 : 책에서는 auto_ptr 을 예로 들어서 계속 설명하지만, auto_ptr 은 사용권장 되고 있지 않기 때문에 관련한 부분은 여기에 적지 않았다. 스마트 포인터 동적 할당한 객체의 문제 아래와 같이 동적할당한 객체를 얻어내고, 해당 객체를 사용한 뒤에 delete 해주는 함수가 있다하자. void f() { Investment *pInv = createInvestment(); ... delete pInv; }이 경우 해당 객체를 삭제 하지 못하는 경우가 발생할 수 있다. 1) delete 이전에 함수가 리턴되는 상황 2) 도중에 예외가 던져져서 delete를 하지 못하는 상황 createInvestment 로 얻어낸 자원이 항상 해제되도록 하는 방법은, 자원을 객체에 넣고 그 자원을 소멸자가 맡.. 항목 31 : 파일사이의 컴파일 의존성을 줄이자 인터페이스와 구현의 분리 c++ 의 class definiton 는 클래스 인터페이스 + 구현 세부사항까지 지정 할 수 있어서 c++ 은 인터페이스와 구현을 깔끔하게 분리하기 힘들다. 예를 들어 아래 코드처럼 Person 구현의 세부사항에 속하는 Date, Address 정의된 정보를 가져오기 위해 "date.h", "address.h" 들을 물어와야 한다. #include #include "date.h" #include "address.h" class Person { public: Person(const Date& birthday, const Address& addr); private : std::string name; Date theBirthDate; //구현 세부사항 Address theAddres.. namespace , cgroup namespace, cgroup tags: container 컨테이너 기술에 이용된다는 cgroup 과 namespace를 알아보자 (참고 : https://bluese05.tistory.com/11) namespace 하나의 system에서 수행되지만, 각각 별개의 독립된 공간처럼 격리된 환경을 제공하는 lightweight 가상화 기술 vm에서 쓰이는 hypervisor는 hw resource를 가상화 namespace는 동일한 os, kernel 에서 작동 namespace 종류 mnt(fs mount) : file system 의 mount 지점을 분할하여 격리 pid : 독립적인 프로세스 공간 할당. pid 분할 관리 net : network 리소스와 관련된 정보를 분할(network inter.. c++ idiom C++ Idiom 프로그래밍시 발생하는 문제를 해결하기 위한 기법 같은 것. c++ 의 언어적인 특성에 기반한 팁 문제해결 패턴 같은 것들이라고 할 수 있다. https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms (다양한 기법과 패턴들이 나와있다.) 여기서는 널리 쓰이는 기법들만 소개하고자 한다. PImpl (Pointer to Implementation) 포인터를 이용해서, 실제 구현체를 감춰두는 기법. 아래 두가지의 장점이 있다. 1) 전방 선언을 통한 컴파일 시간 단축 2) 인터페이스와 구현의 분리 실제 구현부를 인터페이스에 작성하지 않아서, 변경되더라도 인터페이스는 변경하지 않는다. 인터페이스가 변경되지 않았기 때문에 client 코드를 다시 컴파일 할 필요가 .. React 공홈 문서 정리(1) JSX Javascript 를 확장한 문법 React element 를 생성함 Babel 은 JSX 를 React.createElement() 를 호출로 컴파일 함 const element = ( a );과 const elemetn = React.createElement( 'h1', {className: 'greeing'}, 'a' )은 동일함 위처럼 생성한 react element 는 ReactDOM.render() 를 통해 렌더링 DOM 에 react element 렌더링 React 로 구현한 것은 일반적으로 하나의 root dom 노드가 있음 react 엘리먼트를 루트 DOM 노드에 렌더링하려면 둘 다 ReactDOM.render() 로 전달하면 됨 con.. LifeCycle api 자세한 것은 https://react-anyone.vlpt.us/05.html 를 참고하자 Mounting API constructor 컴포넌트 처음 만들어질 때 호출되는 함수 constructor(props) { super(props); //Componenet 의 생성자 함수를 호출 } componentDidMount 외부 라이브러리 연동 or 컴포넌트에 필요한 데이터 요청 DOM 에 관련한 작업들 Update API static getDerivedStateFromProps() props 로 받아온 값을 state 로 동기화 해주는 작업을 해주고 싶을 때 사용 ex. 부모 Componenet의 특정 값 (ex. state) 을 자식 Component 의 state 랑 똑같이 만들어 주고 싶을 때 sho.. Gridland Metro https://www.hackerrank.com/challenges/gridland-metro/problem 분류 : Search 문제 설명 n x m 으로 나타낼 수 있는 Gridland 에는 수평 방향의 철길들이 있다. 즉 각각의 철길은 (r, c1, c2) 로 나타낼 수 있다. r 은 row , c1 은 start 지점, c2 는 end 지점을 나타낸다. 철길이 있는 곳을 제외하고 lampost 들을 설치하려고 하는데, 설치할 수 있는 lampost 의 개수는 ? Input 예시 첫 줄에는 n, m, k 가 주어진다. k 는 철길의 개수다. 다음에는 k 개의 철길 정보가 주어진다. 철길 정보는 r , c1, c2 순으로 입력된다. 1 > n >> m >> k; vector input(k); for(.. Move Semantic Move Semantics (이동 문법) 이동 생성자와 이동 할당 연산자를 구현한 클래스를 move semantic 을 갖고 있다고 한다. 변수(이름으로 참조 할 수 있는 데이터)는 깊은 복사를 하고, 임시값(이름으로 참조 할 수 없는 데이터)이 데이터를 전송한다는 컨셉 객체에 대한 메모리 소유권을 이동시키면서 댕글링 포인터, 메모리 릭을 방지 ( (해제된 메모리를 가리키고 있는 것을 댕글링 포인터라고 한다.) 불필요한 복사를 줄일 수 있다. 벡터 같은 컨테이너에 원소 복사시 유용하게 쓰인다. 객체를 컨테이너에 가져 올 때, 객체 복제가 아닌 이동시킬 수 있다. 임시 객체를 리턴할 때도, 일반 복제 대입 연산 대신에 이동 연산을 이용한다.. lvalue , rvalue lvalue : 주소값을 취할 수 .. 이전 1 2 3 4 5 6 7 다음