분류 전체보기
[C++] Template
[C++] Template
2022.12.17C++은 Template을 통해 Generic Programming을 지원한다. (Compile time Polymorphism) (제네릭 프로그래밍은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식 - 위키백과) C++에서 Template은 class 와 function으로 나뉜다. 1. Class Template 클래스들이 여러 개 있는데 자료형만 다른 경우 template을 적용해 간단하게 표현할 수 있다. (template 선언 시 넘겨주는 type-parameter-key 값인 typename과 class는 같은 역할을 한다) 컴파일러는 Pair 와 Pair을 보고 template을 참고해 해당하는 ..
[C++] STL
[C++] STL
2022.12.15Standard Template Library. C++에 이미 정의돼있는 라이브러리를 의미한다. STL에는 데이터를 저장하는 객체인 Container / 여러 가지 편리한 메서드를 제공하는 Algorithm과 Functions / Container의 객체를 가리키는 Iterator 로 총 4가지 종류가 있다. 이 중 Container에 대해 살펴보자. 1. Array int arr[10]; 에서 사용하는 C-style 배열과는 다르다. 왼쪽과 같이 Random Access 방식으로 요소에 접근 할 때는 오류를 뱉지 않지만, 오른쪽과 같이 array STL을 사용해서 요소에 접근 시 오류를 뱉는다. 런타임 시간에 invalid index를 체크해준다. 2. vector vector 컨테이너 내부 요소들은 ..
[JavaScript] BOM
[JavaScript] BOM
2022.12.09Browser Object Model 으로 웹 브라우저에서 웹 페이지를 제외한 모든 객체들을 의미한다. 그림은 BOM의 구조를 보여준다. window 객체가 최상단에 위치하고 그 아래 document / screen / location / history / navigator가 위치한다. document는 Document Object Model 부분에서 자세히 알아봤으니.. 다른 요소들에 대해 알아보자. window 객체에는 전역 변수로 선언한 모든 요소들이 포함된다. 모든 객체의 근원이 되기 때문에 window를 생략해서 사용하기도 한다. (window.document.get... -> document.get...) screen screen 객체를 통해 화면의 크기와 지원하는 색상 등을 알 수 있다. l..
[CSS] Selector
[CSS] Selector
2022.12.081. 띄어쓰기 1 2 3 이 적용된다. 띄어쓰기 a b 는 a 내부에 있는 b 모두를 지정함. 2. + 3 이 지정된다. a + b 는 a 태그 아래 b 한개만 지정함. 3. ~ 3 4 가 지정된다. a ~ b 는 a 태그 아래의 b 모두를 지정함. 3. anchor a : b 는 a 태그를 b 할 때 { ... } 를 작동시킨다. 선택자와 결합해서 사용하는 경우가 많음. a:first-child 는 첫 번째 요소를 가리킴. 4. pseudo-element 왼쪽과 같이 첫 줄만 지정하거나 첫 글자만 지정하는 등 특정 부분을 지정할 때 사용한다. before와 after로 요소를 배치하는것도 가능함. 태그 없이 :: 만 사용해서 요소를 지정하기도 한다. 5. attribute selector 웹 크롤링 시..
[HTML] Media
[HTML] Media
2022.12.02웹 페이지 내부에서 이미지, 음악, 비디오 등 다양한 미디어를 표현할 수 있다. 1. Video 여러 format이 있지만 HTML 에서는 MP4, WebM, Ogg 형식만 지원한다. controls 속성으로 재생 / 정지 등 실행을 제어할 수 있는 장치를 해당 비디오에 추가한다. 브라우저가 첫 번째 source를 재생하지 못하면 다음 source를 재생하는 방식으로 동작한다. 태그 기반으로 동작하기 때문에 자바스크립트의 DOM을 사용해 비디오를 다룰 수 있다. video 태그에 여러 속성을 추가 할 수 있다. autoplay : 브라우저가 로딩됐을 떄 자동으로 재생하도록 설정한다. mute : 음소거 상태로 재생한다. track : 속성은 아니다. source 밑에 추가해 비디오의 자막을 설정한다. 2..
[HTML] Graphics
[HTML] Graphics
2022.12.01HTML의 canvas / svg 태그를 사용하면 웹 페이지 내부에 그림을 그릴 수 있다. canvas 태그를 사용해 지정한 위치에 선을 긋는 간단한 예시이다. canvas 태그를 사용할 때는 자바스크립트를 사용해서 그림을 그린다. 간단하게 선을 긋는 예시 뿐만 아니라 이미지, 원, 색상 등 다양한 그림을 표현할 수 있으니 필요할 때 찾아서 사용하자. svg 태그를 사용해 사각형을 그리는 예시이다. 자바스크립트 대신 HTML 태그를 사용해서 그림을 표현한다. 태그 기반이기 때문에 그림의 일부를 수정할 때 자바스크립트의 DOM으로 접근한다. svg는 태그를 사용해 그림을 표현하는구나 ~ 정도로만 머리에 넣고 이 정보를 인덱스로 필요할 때 찾아서 사용하자. canvas는 픽셀 단위로 그림을 표현해 확대 시 ..
[시스템 프로그래밍] 동적 메모리
[시스템 프로그래밍] 동적 메모리
2022.11.30메모리는 무한하지 않고, 많은 소프트웨어들이 메모리에 큰 영향을 받는다. 당장 백준 사이트에서 그래프 알고리즘 문제를 풀 때도 메모리를 효과적으로 사용하지 못하면 알고리즘을 제대로 작성했어도 맞았습니다를 받을 수 없다. 가상 메모리.. 캐시... 메모리에도 여러 종류가 있다. 다른 메모리들은 컴퓨터구조나 운영체제를 공부하면서 배우기로 하고, 이번에는 동적 메모리에 대해 자세히 살펴보자. C를 공부하면서 배웠듯 동적 메모리는 Heap 메모리 부분에 할당된다. malloc과 free 함수를 사용해 메모리를 할당받고 반환한다. 자바에서는 Garbage Collection이 있어 반환에 신경쓰지 않아도 되지만, C에서는 메모리를 사용한 후 반납 해 줘야 한다. 프로그램이 돌아갈 때 메모리를 살펴보면 위와 같은 ..
[C++] Design Pattern
[C++] Design Pattern
2022.11.24클래스와 객체의 관계를 어떻게 구성해야 할까? 이런 상황에서 클래스는 어떻게 구성해야 할까? 위와 같이 자주 발생하는 문제에 대한 정리된 해결책을 디자인 패턴이라고 한다. 디자인 패턴은 문제 해결의 방법론이고, Paradigm에 맞춰서 정의된다. (함수형 언어의 paradigm, 객체지향 언어의 paradigm) 몇 가지 디자인 패턴에 대해 알아보자. Singleton 클래스가 하나의 인스턴스만을 가지도록 한다. 클래스의 생성자를 private 접근제어자로 정의하고, instance를 static 으로 정의해 어디서든지 해당 instance로 접근할 수 있되, 인스턴스의 생성은 단 한 번만 진행되도록 한다. Builder 복잡한 객체를 한 단계씩 생성한다. 생성해야 하는 객체가 복잡해지면 생성자로 넘겨야..
[JavaScript] function
[JavaScript] function
2022.11.231. function 키워드 자주 사용하는 방식이다. 2. Literal function 키워드로 함수를 정의한 후 해당 함수를 사용하는 경우가 많지만, 리터럴 방식으로도 함수를 정의할 수 있다. 리터럴 방식을 사용할 때는 익명 함수를 사용한다. x(4, 3) 을 실행 시 12를 반환한다. 3. Constructor 자바스크립트의 built_in 함수인 Function을 사용해 함수를 정의할 수 있다. 4. Self Invoking 정의 후 스스로를 호출한다. 재사용 할 수 없다. 5. lambda (arrow) 람다식을 사용해 함수를 간단하게 표현 할 수 있다. 인자가 하나면 괄호를 생략할 수 있지만 인자가 없거나 두 개 이상인 경우는 괄호를 생략할 수 없다. Hoisting 자바스크립트는 다른 언어와..
[C++] 정리 (1)
[C++] 정리 (1)
2022.11.231. cast / dispatch Dynamic cast / Dynamic dispatch Static cast / Static dispatch 제대로 정리하자. cast 는 형변환이고 dispatch는 함수 호출이다. static은 컴파일 시간이고 dynamic은 런타임 시간이다. 위의 부분을 제대로 짚고 다시 공부하자. 2. 함수, 메서드, 프로시저 셋 다 프로그램의 일부비슷한 의미라서.. 혼용해서 사용해도 괜찮다. 맥락에 따라 다르게 사용하기도 한다. 클래스 안에 있으면 메서드, 호출하는건 함수로 부른다. 함수와 프로시저는 같이 사용하는 편이다. (https://murphymoon.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80procedure-%E..
[JavaScript] Object
[JavaScript] Object
2022.11.22let something = { a : 'A', b : 'B', }; 원시 타입의 값들은 변경할 수 없지만, 객체는 변경할 수 있다. 객체는 위와 같이 프로퍼티 키와 프로퍼티 값들로 이루어져 있으며, 프로퍼티 값으로는 자바스크립트에서 사용하는 모든 값이 해당될 수 있다. (함수 포함) 자바와 C++같이 클래스를 중심으로 객체를 생성하고 인스턴스화하는 클래스 기반 언어들에 반해, 자바스크립트는 프로토타입 기반 객체지향 언어로서 자바와 C++과는 다른 방법으로 객체를 생성한다. let something = { a : 'A', b : 'B', }; console.log(something); console.log(something.a); console.log(something['a']); 위와 같이 객체 리터럴..
[C++] OOP (5) Dynamic dispatch / Multiple Inheritance
[C++] OOP (5) Dynamic dispatch / Multiple Inheritance
2022.11.22객체지향 언어에는 같은 signature를 가진 함수를 여러 개 정의할 수 있다. (signature 가 다르면 다른 함수이다) 이를 function overloading 이라고 부르고, 여러 함수 중 어떤 함수가 호출될지는 컴파일 시간에 정해진다. 여기까지는 지난번에 배웠고.. 이번에 살펴볼 function overriding 은 부모에서 정의된 함수를 자식이 새로 정의하는 작업이다. 함수를 사용할 때 어떤 함수가 불리는지는 런타임 시간에 정해진다. 즉, Dynamic dispatch를 사용한다. 런타임 시간에 불리는 함수가 결정되는 경우를 Dynamic dispatch 라고 부른다. 런타임 오버헤드가 있어 성능은 떨어질 수 있지만 코드를 훨씬 효과적으로 작성할 수 있어 상황에 맞춰서 사용한다. C++..