본문 바로가기

분류 전체보기

(594)
[Keras] np_utils.to_categorical(클래스, 클래스의 개수) np_utils.to_categorical(클래스, 클래스의 개수) 함수 정수 숫자를 -> [0,0,1,0,0,0] 처럼 바꿔서 구분하는 것 이런 변환을 '원-핫 인코딩'이라고 한다.
[C++] 복사 생성자와 delete 키워드 복사 생성자 문제점 실행 시 얕은 복사(shallow copy)에 의한 메모리 참조 에러 발생 객체 p1 선언 시 생성자에서 name, phone 메모리 할당 객체 p2 선언 시 디폴트 복사 생성자에서 메모리 할당 없이 객체 p1의 name, phone의 포인터만 복사(얕은 복사) p2 소멸자 호출하여 name, phone 포인터가 가리키는 메모리 해제 소멸자 호출 순서는 생성자와 반대 순서 p1 소멸자 호출하여 name, phone 포인터가 가리키는 메모리 해제 시 실행 에러 이미 p2 소멸자에 의해 해제 !!! ™ 메모리를 할당하는 깊은 복사를 하는 생성자를 작성하여 해결 C++11 이전엔 private 안에 복사 생성자와 대입 연산자를 정의하여 외부에서 접근하지 못하게 하는 방법 이였다면, 이젠 d..
[C++] 생성자 개괄- explicit, delete, default, override 생성자 3가지 타입 - 기본 생성자 - 디폴트 생성자 - 복사 생성자 c++11에서 추가된 explicit, delete, default, override 에 대해 작성합니다. explicit 는 암시적인 형변환을 막아주는 키워드 입니다. delete는 특정한 함수에 대해 정의를 금지하는 키워드 입니다. default는 사용자 정의 타입이 기본적으로 만들어주는 생성자 함수를 명시적으로 만들것을 요구하는 키워드 입니다. override는 사용자 정의 타입의 자식 클래스에게 함수를 오버라이딩 하라고 요구하는 키워드 입니다. 1. 기본 생성자 explicit는 암시적인 형변환을 막아주는 키워드 입니다. 예를 들어 Widget 이라는 사용자 정의 타입을 만들고 정수를 하나 받아 생성하게 만들었습니다. 그리고 p..
[C++] 상속 예제 코드가 예상보다 길죠? 한번 차례차례 살펴보도록 합시다. 코드를 우선 보시면, 5~38행에서 Human란 클래스가 정의되었습니다. 유심히 보셔야 할 부분은 11행입니다. Human 생성자 정의에서, ": age(_age)"란 코드가 보이시나요? Human 생성자로 _age 인자가 넘어오면, Human 클래스 내의 멤버 변수 age의 값을 _age로 초기화 시켜주는 역할을 합니다. 이것이 우리가 조금 있다가 배우게 될 "멤버 이니셜라이저(Member Initializer)"를 이용한 초기화 방법입니다.
[C++] 소멸자(destructor) C++에서 생성자는 객체 멤버의 초기화뿐만 아니라, 객체를 사용하기 위한 외부 환경까지도 초기화하는 역할을 합니다. 따라서 객체의 수명이 끝나면 생성자의 반대 역할을 수행할 멤버 함수도 필요해집니다. 이러한 역할을 하는 멤버 함수를 소멸자(destructor)라고 합니다. 소멸자는 객체의 수명이 끝나면 컴파일러에 의해 자동으로 호출되며, 사용이 끝난 객체를 정리해 줍니다. C++에서 클래스 소멸자의 이름은 해당 클래스의 이름과 같으며, 이름 앞에 물결 표시(tilde, ~)를 붙여 생성자와 구분합니다. 즉, Book 클래스의 소멸자는 ~Book()이라는 이름을 가지게 됩니다. 이러한 소멸자는 다음과 같은 특징을 가집니다. 1. 소멸자는 인수를 가지지 않습니다. 2. 소멸자는 반환값이 없지만 void형으로..
[Linux] GPU 정보 확인 우분투 그래픽 카드 GPU 확인 방법 $ lspci | grep -i VGA 혹은 $ nvidia-smi --query | fgrep 'Product Name'
[C++] 생성자 콜론(:) Foo(int num): bar(num) 은 초기화 리스트라고 하고, 멤버 변수 bar를 num으로 초기화하는 역할을 합니다. 그냥 생성자 함수{} 내에서 초기화하는 것과, 이렇게 초기화 리스트를 쓰 는것의 차이는 초기화 리스트에서 초기화를 하는 경우, 생성자가 호출될 때 객체의 생성과 초기화가 한 번에 이루어집니다. 생성자 함수 내{}에서 초기화를 하는 경우, 객체가 생성되어, default생성자로 초기화된 상태에서 다시 한 번 할당받게 하게 됩니다. 이 경우엔 default할당-유저할당의 2단계를 거치게 돼서 오버헤드가 생깁니다. 초기화 리스트를 써야만 하는 상황은 크게 다음과 같습니다 클래스가 레퍼런스를 멤버로 가질 때 non static const멤버가 있을 때 default 생성자가 없을 때 b..
[C++] 함수 객체 위 예제에서 주목하셔야 할 부분은 함수 호출 연산자가 오버로딩 되었다는것도 있지만, 메인 함수 내에 Equal 객체로 어떻게 함수가 호출되고 있는지에 대해 보셔야 합니다. 첫번째 호출인 'cmp(5, 5)'는 우리가 첫 예제에서 보아왔던 코드로, 암묵적 호출이라고 합니다. 여기서 암묵적 호출은 밖으로 드러내지 않는 호출이라고 할 수 있으며, 그 아래에 있는 두번째 호출 'cmp.operator()(10, 20)'은 명시적 호출이라고 할 수 있습니다. 분명하게 드러내는 호출이라고 할 수 있는거죠. 그리고 세번째 호출인 'Equal()(10, 20)'은 임시 객체를 통한 암묵적 호출이라고 할 수 있습니다. 여기서 드는 의문점은, 왜 굳이 함수 호출 연산자를 오버로딩하여 객체를 가지고 함수처럼 사용할까요? 우..
Memory bound vs Compute bound I/O Bound vs CPU Bound Process I/O bound Process : 연산보다, I/O 에 더 시간이 들어가는 프로세스다. CPU burst 가 작다. CPU bound Process : 연산에 주로 시간이 들어가는 프로세스다. CPU burst 가 크다./ compute bound 빽 투더 기본기 [OS 1편]. 프로세스 이 글에서는 운영체제의 기초가 되는, Process (프로세스)에 대해 정리해본다. 1. Process 란 1.1. Program vs Process Program : 디스크에 저장된 실행가능한 명령어 파일. 수동적인 개체. Process : 메모리에 올.. dailyheumsi.tistory.com Memory-bound function Mem..
[C++] 참조 사이트 'C++ 이야기' 카테고리의 글 목록 소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기 boycoding.tistory.com
[C & C++] macro function, inline function 일반 함수 작동 방식 그런데 여기서 함수포인터를 통하여 함수 내용으로 이동하는데 시간이 소요되게된다. 뭐 엄청나게 큰 타임은 아닐지라도 함수내용이 getter setter와 같이 별볼일 없거나 그러면 왔다 갔다 하는 시간이 더 걸리지도 모른다. 그래서 그러한 함수들은 그냥 포인터로 접근하지말고 사용하는 위치에다가 때려박고싶다. 인라인 함수를 쓰면 컴파일 시간이 길어지고 프로그램 크기가 커진다 그러나 런타임 속도가 빠르다(함수로 넘어가는 시간을 절약) [C++ 때려잡기] C++ 심화강의 7 inline 함수 2018/08/27 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 1 객체 지향 프로그래밍과 클래스 2018/08/27 - [교육 노트/C++ 심화강의] - [C++ 때려잡기..
[Linux] vi 이동 단축키 vi 페이지 이동 명령 ctrl+f - 다음 페이지로 ctrl+b - 이전 페이지로 gg - 파일 첫 문장으로 G - 파일 끝으로 :숫자 – 숫자 번째 문장으로 이동 vi 페이지 이동 명령 vi 명령 노트 가끔 까먹는 vi 명령들을 적어 놓습니다. vi 페이지 이동 명령 ctrl+f - 다음 페이지로 ctrl+b - 이전 페이지로 gg - 파일 첫 문장으로 G - 파일 끝으로 :숫자 – 숫자 번째 문장으로 이동 * ingorae.tistory.com vi 단축키 정리 · 초보몽키의 개발공부로그 vi 단축키 정리 27 Mar 2017 | vim 학습자료 vi 단축키 삽입 키 기능 i 커서 위치에 Insert I 줄 맨 앞에서 Insert a 커서 다음에 Insert A 줄 맨 뒤에서 Insert o 커서 ..
[Linux] vi 에서 문자열 검색 1. 먼저 vi 를 실행하고 : 를 눌러 명령어 모드에 들어갑니다. 2. / or ? 으로 문자열 탐색 현재 커서 위치에서 아래방향으로 탐색 /찾을문자열 예) :/text 현재 커서 위치에서 윗방향으로 탐색(역방향 탐색) ?찾을문자열 예) :?text 3. 그 다음 문자열를 탐색(계속 탐색)을 하려면 소문자 "n" 을 누르면 되고 이전 문자열를 탐색(계속 탐색 - 역방향)을 하려면 대문자 "N"을 누르면 됩니다. 4. 정규식도 사용할 수 있다! 예) Text 로 시작하는 문자열을 찾을때 /^Text
[Linux] 리눅스의 구조 (커널,kernel) 리눅스는 기본적으로 커널,쉘,응용프로그램으로 동작됩니다 커널이란 하드웨어와 소프트웨어 사이에서 제어 역활을 해주는것이며 쉘로 부터 데이터를 받아와서 주 기억 장치로 보내는 역활을 하고 있습니다 커널이 주 기억 장치로 보낸 데이터를 프로세스라고 하며 그 프로세스를 cpu는 처리하게 됩니다 또한 커널은 프로세서 및 메모리 파일 시스템 디바이스 네트워크르 관리하며 리눅스 커널의 특징은 Free,가상 메모리 시스템,가상의 파일시스템,멀티 쓰레드등을 지원합니다 커널은 이벤트 중심 프로그램으로써, 응용 프로그램으로부터의 시스템 콜 요청이나 하드웨어의 인터럽트 요청을 처리한다. 리눅스 커널이란? 응용 프로그램 동작을 위한 환경을 제공하고 하드웨어를 제어하는 역할을 해주어, 응용 프로그램이 본래 목적만을 실행하도록 돕..
[C] 연결 리스트 구조체 만들고 사용하기 NODE 구조체에서 가장 중요한 부분은 struct NODE *next;입니다. 얼핏 보면 구조체 자기 자신의 포인터를 멤버로 가지고 있는데 전혀 어렵지 않습니다. next에는 NODE 구조체로 만든 다른 노드의 메모리 주소를 저장합니다. 즉, 자기 자신이 아닌 다른 노드의 메모리 주소를 저장한다는 점을 기억하세요. NODE 구조체에서 데이터는 int형 하나만 저장했습니다. 실제로 사용할 때는 용도에 따라서 다양한 자료형으로 된 멤버 여러 개를 넣으면 됩니다. 이제 단일 연결 리스트에서 노드의 종류를 알아보겠습니다. 노드는 역할에 따라서 두 가지로 나뉩니다. 머리 노드(head node): 단일 연결 리스트의 기준점이며 헤드(head)라고도 부릅니다. 머리 노드는 첫 번째 노드를 가리키는 용도이므로 데이..
[Spring] 프로젝트 참고 사이트 [SPRING] 스프링 프레임워크 시작하기-4 자바 웹개발 JDK Eclipse Tomcat DBMS (ORACLE, MySQL, H2...) 어제 공부한 내용 복습 1. bean 엘리먼트 속성 1-1. init-method : Servlet 컨테이너는 생성자로 Servlet 객체의 멤버변수를 초기화할 수 없다 velog.io
[C++] class와 struct의 차이 C++ CLASS(클래스) 정의와 struct(구조체)와 차이 안녕하세요! 공대남입니다. C언어부터 공부하시고 C++를 하시는 분들은 클래스를 처음 접하실 것 입니다. (객체지향언어를 처음 하신다면) 객체지향언어에서는 클래스와 객체가 중요한 개념입니 k96-ozon.tistory.com
[Linux] gcc Include / library 경로 설정 * INCLUDE gcc가 어떤 path에서 헤더 파일을 읽어오는지 알고 싶다면, gcc를 실행할 때 -v gcc test.c -v C_INCLUDE_PATH 환경 변수를 써서 지정할 수도 있습니다 (포맷은 PATH와 동일) C++ include path를 지정하기 위해서 CPLUS_INCLUDE_PATH를 쓰기도 합니다. -I option을 써서 지정할 수 있으며 (여러 디렉토리를 지정하기 위해 중복으로 사용 가능) -I C 소스는 표준 디렉토리에 있는 헤더 파일을 이용하여 개발을 할 수도 있지만, 표준 디렉토리가 아닌 위치에 있는 레더 파일을 가져와서도 개발을 할 수 있다. 그 때 그 디렉토리의 위치를 지정해주는 옵션이다. 이 옵션 또한 예제를 보고 하면 금방 진행할 수 있다. * LIB etc/ld..
[putty] 라인 수 늘리는 방법 [Linux] puTTy 라인 수 늘리는 방법 리눅스 puTTy 에서 화면에 보이는 라인 수 늘리는 방법! 바로 보시죠! 1. puTTy 를 열었을 때 첫 화면 입니다. 2. Window 에 가면 라인 수를 변경할 수 있습니다. 3. 저장을 하기위해 다시 Session 으로~!! elena90.tistory.com
[C++] -> 와 . 의 차이
[Linux] gcc컴파일 옵션 [gcc 컴파일] 1) gcc 파일명(*.c) : Default로 out 파일이 생성된다. (ex a.out) 2) gcc -c 파일명(*.c) : 오브젝트 파일을 생성한다. 3) gcc -c 오브젝트_파일명(*.o) 파일명(*.c) gcc -o 실행파일명(*.out) 오브젝트_파일명(*.o) 4) gcc -o 실행파일 파일명(*.c) : 실행 파일을 만든다. (3번을 한줄로...) [gcc 옵션] 1. -Wall 옵션 : 모든 모호한 코딩에 대해서 경고를 보내는 옵션 2. -W 옵션 : 합법적이지만 모호한 코딩에 대해서 경고를 보내는 옵션 3. -W -Wall 옵션 : 아주 사소한 모호성에 대해서도 경고가 발생 4. O2 옵션 : 최적화 레벨 2로 설정. (대부분의 최적화를 시도) 5. -E 옵션 : ..
[C&C++] #include 기본 포함 경로, ""와 <> 차이 #include 전처리기에서 의 기준 위치는? : C 언어 관련 전체 목차 http://blog.naver.com/tipsware/221010831969 1. C 프로젝트에서 include 기준... blog.naver.com
[C++] enum class 어떻게 보면 enum값이 암시적 형변환이 되어서 int 와 비교가 가능하다는 것은 이점으로 보일 수 있지만, 프로그래머가 예상하지 못한 휴먼 에러를 발생할 수 있습니다. enum class를 도입함으로써 더이상 int 로 암시적 형변환이 되는게 불가능해졌습니다. 이는 기존의 enum 암시적 형변환을 유용하게 사용하셨던 분들께는 안좋은 소식일 수 있지만. 이렇게 까다롭게 열거자들의 형식이 강력하게 제한된다는 점이 우리 개발자들이 만들 수 있는 휴먼에러의 위험성을 줄일 수 있다는 이점이 존재합니다. 이제 명확하게 명시적 형변환을 통해서 열거자를 비교해야 합니다. [C++] enum class (scoped enum) 에 대해서 안녕하세요. BlockDMask 입니다. 오늘은 C++11에서 추가된 enum c..
[C++] 네임스페이스(namespace) 란? 네임스페이스가 뭔지 알기 전에 아주 간단한 Hello World 예제를 살펴봅시다. C++에서 Hello World 를 찍어내려면 와 같이 입력하면 됩니다. C를 미리 공부하셨다면, C에서의 HelloWorld 예제랑 차이점을 몇가지 찾아낼 수 있을 것이고 이런 질문을 하겠죠.. ※ 일단, 헤더파일부터 다르네요. => 그거야 사용하는 함수가 다르니까 헤더파일이 다른 것이겠죠? C 언어에서는 printf 함수를 사용했다면, C++ 에서는 cout이라는 함수를 사용합니다. cout 함수를 사용하기 위해 "iostream"(input/output stream 이라는 뜻입니다.) 헤더파일을 인용한 것입니다. ※ 엥? 그렇다면 using namespace std; 는 뭐죠? 처음 보는 건데? => 이 질문을 받기..
[Linux] 파일속 문자열 찾기 리눅스 파일 찾기, 파일속 문자열 찾기 1. 리눅스 파일명으로 검색하는법. 사용법 find [찾을위치] -name [파일명] 예) 최상위 폴더부터 하위로 'apache'로 시작하는 파일 찾기. find / -name 'apache*' 예) usr 폴더부터 하위로 'apa'로 시작하는 파.. overcode.tistory.com
volatile 변수 volatile 변수 변수를 선언할 때 앞에 volatile을 붙이면 컴파일러는 해당 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듭니다. volatile로 선언한 변수는 사용할 때 항상 메모리에 접근합니다. 즉, 이 변수는 언제든지 값이 바뀔 수 있으니까 항상 메모리에 접근하라고 컴파일러에게 알려주는 것입니다. 예를 들어 다음과 같은 반복문이 있습니다. 컴파일러는 이 코드를 최적화하여 while 반복문을 없애버리고 i에 그냥 10을 할당해버립니다(Visual Studio의 /O2 옵션, GCC의 -O3 옵션). 대략 이런 모습이 됩니다(어셈블리까지 설명하지 않고 C 코드로 대신 설명했습니다). 여기서 i를 volatile로 선언하면 반복할 때마다 항상 i의 메모리에 접근해야 하므로 컴파일러는 ..
[Linux] gcc -o 컴파일 과정
[Spring] Spring 설치 https://jerryjerryjerry.tistory.com/64?category=280350 [Spring] Spring 설치방법, 톰캣 서버 연결, 디렉토리 구조 * Spring 이란?에 대한 포스팅 : http://jerryjerryjerry.tistory.com/62 * Spring 설치 방법 1. 첫번째 설치방법으로는 이클립스 안에서 STS 플러그인을 설치하는 방법이 있다. 2. 두번째 설치방법으로는 이클립.. jerryjerryjerry.tistory.com
[Spring] 스프링, 스프링 프레임워크(Spring Framework) 1. 스프링이란? 스프링프레임워크(Spring Framework) - 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 스프링(Spring)이라고도 불린다. - 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공한다. - Framework : 개발할 때 설계 기본이 되는 뼈대나 구조 / 환경 (문제 영역을 해결한 재사용, 확장 가능한 라이브러리.) 프레임 워크는 자주 쓰일 만한 기능들을 한데 모아 놓은 유틸(클래스)들의 모음(집합) - 설계의 기반이 되는 부분을 기술한 확장 가능한 기반 코드와 사용자가 이 코드를 자기 입맛대로 수정, 확장하는데 필요한 라이브러리 이 두가지 요소가 통합되어 제공되는 형태이다. - 사용자가 이 기반 코드를 이용해 일정 수준 이상의 품질을 보장받는 코드를, 비교적..
OSI 7계층 > [LAYER 4] 전송 계층 > PORT 1. PORT(포트), 넌 누구니? 포트는 운영 체제 통신의 종단점이다. 이 용어는 하드웨어 장치에도 사용되지만, 소프트웨어에서는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위이다. 사용법 : URI 문법에 의해서 사용 및 표기할 수 있으며, IP 주소와 함께 표기하는 예는 다음과 같다. ftp://000.000.000.000:21 여기서 000.000.000.000은 IP 주소를 나타내며 : 다음의 21이 포트 번호를 의미한다. 2. PORT(포트), 언제 사용될까? 포트(port)는 보통 항구나 공항(airport)을 나타냅니다. 이러한 항구와 공항은 외부세계와 접속할 수 있는 관문이 됩니다. 컴퓨터에서도 마찬가지입니다. 컴퓨터에서의 포트(port)란 외부의 다른 장비와 접속하기 위한 플러그와..