목록Computer Science/Software engineering (9)
ecsimsw
Introduction구글 검색 시, 엄청난 수의 정보 속에서 어떤 알고리즘으로 자료의 우선 순위를 매겨 사용자에게 보여주는지 궁금하여 알아보다가 좋은 포스트를 발견하여 나름대로 정리해보았다. PageRank구글이 검색 엔진에서 정보의 우선 순위를 할당하는 방식이다. 결과부터 말하면, 페이지의 우선도는 해당 페이지를 링크하고 있는 페이지들의 우선도 값으로 결정된다. 사람을 평가하기 위해, 잘 어울려다니는 친구들을 평가하는 느낌이다. 세르게이 브린과 래리 페이지는 웹 안에서 인덱싱을 통한 기존의 검색 방식이 문제가 있고, 텍스트 그 자체를 통한 검색이 아닌, 하이퍼텍스트를 이용하여 링크 구조와 링크 텍스트를 이용하면 보다 유용한 정보를 제공할 수 있다고 생각하였다. 이 구조를 이용하면 페이지 마다의 영향력..
- 컴파일 시 바인딩된 (정적 바인딩된) base reference 변수로 오버라이딩한 함수를 호출할 시 당연히 base 클래스의 함수를 호출하게 된다. - 동적 바인딩을 통하여 함수와 함수 정의를 실행 시에 바인딩하도록 할 수 있고, 특정 함수에 대해 동적 바인딩을 사용하고자 할 때 virtual 키워드를 사용할 수 있다. c++ overriding class A { public: void foo(){ cout
베이스 클래스의 객체에 파생 클래스의 객체가 복사되면 베이스 클래스의 프로퍼티 외에 나머지 추가적인 프로퍼피는 저장할 곳이 없어 복사가 불가능하다. 이것을 객체 잘림(object slicing)이라고 한다.
네임 맹글링은 동일한 함수명을 갖는, 오버로딩한 함수들을 함수의 형태와 파라미터 정보로 명칭을 따로 부여하여 구별하기 위한 매커니즘이다. @
- storage class (기억 부류)는 변수의 종류에 따라서 초기화나 파괴 시기, 얼마나 지속되어야하는지를 결정하는 역할을 한다.
정적 스코프 : 컴파일 시에 결정되는 가장 가까운 바깥쪽의 스코프 변수 값으로 처리 동적 스코프 : 컴파일 시 자료형 체크 불가능 : 대개 인터프리티드 언어에서 사용되는 방식 : 스택을 이용해서 호출되는 스코프들을 쌓고 가장 가까운 것의 변수 값이 바인딩 int count = 10; void foo2(){ print(count); } void foo1(){ int count = 20; foo2(); } main(){ foo1(); } // 정적 스코핑 : foo2의 출력은 count = 10 // 동적 스코핑 : foo2의 출력은 count = 20
- Binding Times : 언어 설계 (language design time) : 연산자와 연산 바인딩 : 언어 구현 (language implementation time) : 데이터 타입과 데이터 값 바인딩 : 프로그램 작성 (program writing time) : 알고리즘, 데이터 구조, 모듈 바인딩 : 컴파일 (compile time) : 변수와 데이터 유형 바인딩 : 링크 (link time) : 메모리 내의 프로그램 전체 라이브러리, 모듈 확정 : 로드 (load time) : 물리적 주소 선택 : 실행 (run time) : 변수에 메모리가 위치한 값 바인딩
- quora에서 0.3이 왜 0.2+0.1과 다른 값인지에 대한 질문을 볼 수 있었다. 이는 한마디로 소수를 2진수로 표현하는 정밀도의 문제이다. Precision - c#에서 (0.3 == 0.1+0.2)는 거짓이다. 그리고 0.2f + 0.1 값을 확인하면 0.300000002980232이다. 이는 소수를 2진수로 표현하는데 있어 분명한 한계가 있기 때문이다. 컴퓨터는 계산에 있어 2진수를 사용해야만하고, 0.1과 0.2는 2진수로 정확한 값이 아닌 순환 소수로 절대 표현할 수 없는 수를 자료형에 따른 정밀도로 가져와 연산된다. 이를 다시 10진수로 표현하면 오차가 발생하고 이 때문에 위의 당연한 계산조차 거짓으로 판명되는 것이다. c#에서는 decimal 자료형을 사용하는 것을 통해 이를 해결할 ..