본문 바로가기
반응형

컴퓨터/프로그래밍90

라즈베리 파이 종류 라즈베리 파이 보드의 종류는 다음과 같다. Raspberry Pi 1 Model A+ (2014) Raspberry Pi 1 Model B+ (2014) Raspberry Pi 2 Model B (2015) Raspberry Pi 3 Model B (2016) Raspberry Pi 3 Model A+ (2018) Raspberry Pi 3 Model B+ (2018) Raspberry Pi 4 Model B (2019) Raspberry Pi Zero W (2017) Raspberry Pi Zero (2015) 2021. 7. 3.
Atom 에디터 컬럼 모드 키보드 변경 Atom에서 컬럼모드를 사용하려면 Alt 키를 누른 상태에서 마우스 좌클릭한 후 드래그하면 된다. Alt 키를 누른 상태로 입력해야 한다. 이 때 Tab을 누르면 Tab이 입력되지 않고 윈도우가 변경되는 문제가 있다. 이 때는 Alt 키를 Ctrl 등의 다른 키로 바꿀 수 있다. 다음과 같이 Sublime-Column-Selection에서 키를 변경할 수 있다. 2021. 6. 23.
Atom 편집기에서 Save all 단축키 만들기 Atom에서 Save all 단축키를 만들기 위해서 File 메뉴에서 Settings을 선택하고 Keybindings을 선택한다. 아래와 같은 창에서 your keymap file을 클릭한다. 여기서 다음 문장을 입력하고 저장하면 ctrl + shift + s가 Save all 단축키로 저장된다. 'body': 'ctrl-shift-S':'window:save-all' 2021. 6. 23.
360도 각도 범위 변경 각도가 370도일 때는 10도로 -10일 때는 350도와 같이 각도를 항상 0~360도 범위로 변경하는 방법은 다음과 같다. y = x % 360; if (y 2021. 2. 19.
선택 알고리즘 선택 알고리즘(Selection Algorithm)은 배열에서 k 번째로 작은 수를 찾는 알고리즘이다. 이 때 k 번째 숫자를 kth order statistic이라고 부른다. 최소값, 최대값, 중간값을 찾는 알고리즘은 선택 알고리즘의 한 종류이다. 2020. 12. 24.
Atom 편집기에서 공백 무시하고 찾기 여러 파일에서 찾기를 하려면 폴더를 프로젝트로 등록하고 Find in Project를 선택 해야 한다. 공백을 무시하고 찾기를 하려면 공백 부분에 \s*를 입력한다. 즉, "a\s*=1"을 입력하면 "a=1" 또는 "a = 1" 또는 "a = 1" 등이 모두 검색된다. 파일이 EUC-KR이면 프로젝트에서 찾기가 잘 안된다. UTF-8이 되어야 한다. 파일에서 찾기에서 항목을 클릭하면 그 곳으로 이동하는데, 먼저 창을 클릭하고 항목을 클릭하면 클릭한 창으로 표시된다. 2020. 12. 18.
Notepad++ 컬럼 라인 표시 노트패드에서 80 컬럼에 라인을 표시하는 방법은 메뉴 설정 - 환경설정에서 열표식 설정에 80을 입력한다. 2020. 12. 18.
return type specification for constructor invalid 컴파일 에러 "return type specification for constructor invalid" 컴파일 에러는 생성자에 반환형을 사용할 때 뜬다. 생성자에는 반환형을 사용하지 말아야 한다. 생성자 fun에 다음과 같이 void 형과 같은 반환형을 지정하면 안된다.void fun::fun(){} 위 코드는 다음과 같이 수정해야 한다.fun::fun(){} 2020. 6. 4.
atan과 atan2의 차이 atan 함수는 double atan(double x)으로 정의되고 리턴값은 -π/2 ~ π/2의 범위를 가진다. atan 함수는 arctan 정의와 같다. atan2 함수는 double atan2(double y, double x)으로 정의되고 리턴값은 -π ~ π의 범위를 가진다. atan2 함수는 다음 그림과 같이 x,y 좌표가 1,2 사분면 일 때는 0 ~ +π 범위를 가지고 x,y 좌표가 3,4 사분면 일 때는 0 ~ -π 범위를 가진다. x축을 기준으로 반시계 방향으로 회전할 때는 양의 값이 되고 시계 방향으로 회전할 때는 음의 값이 된다. 2020. 6. 1.
BASIC 언어 - 간단 소개 BASIC(Beginner's All-purpose Symbolic Instruction Code)은 1964년 다트머스 대학교의 존 케메니(John Kemeny)와 토머스 커츠(Thomas Kurtz)에 의해 개발되었다. 영어로는 베이식으로 발음해야 하지만 한국에서는 대부분 베이직이라고 발음한다. 베이직은 1980년대 개인용 컴퓨터에는 기본으로 설치되어 있던 언어로 부팅을 하면 베이직이 기본 실행되었다. IBM PC도 처음에는 롬에 베이직을 내장하여 DOS가 없으면 베이직이 실행되었다. 현재는 많이 사용되고 있지 않지만 마이크로소프트가 Visual BASIC으로 베이직을 계속 지원하고 있다. 현재 초심자에게는 BASIC 보다 Python이 더 적합하다. 베이직은 원래 인터프리터 방식이였지만 현재는 컴파.. 2020. 5. 16.
행렬 회전 알고리즘 행렬 회전 중 시계방향으로 90도 회전은 다음 그림과 같다. 위와 같이 시계방향으로 90도 회전하는 알고리즘은 다음과 같이 구현할 수 있다. 여기서 mat은 원래 행렬이고 mat1은 회전된 행렬이다. for(i=0; i 2020. 5. 14.
Objective-C Objective-C는 80년대초 C에서 SmallTalk와 같은 문법을 사용하기 위해 만들어졌다. Objective-C는 스티브 잡스에 의해 넥스트와 애플에 사용되었다. 2014년부터 애플에서 Objective-C 대신 Swift를 사용하고 있다. Objective-C는 C에 기능을 추가한 Superset이기 때문에 일반 C 코드를 Objective-C에서 컴파일하여 사용할 수 있다. Objective-C와 C++의 가장 큰 차이점은 메소드를 호출하는 방식이다. Objective-C에서는 메소드를 메세지 방식으로 사용한다. C++에서는 메소드가 컴파일 되어 프로그램에 포함되지만, Objective-C에서는 프로그램 실행 중 메세지를 전달하는 방식으로 메소드를 사용한다. 2020. 5. 7.
폴리글랏 프로그래밍 폴리글랏 (Polyglot) 프로그래밍이란 여러 종류의 프로그래밍 언어를 사용할 수 있는 것을 의미한다. 현대에는 폴리글랏이 필수라고 말하는 사람도 있지만, 여러 언어를 아는 것 보다 하나의 언어를 깊게 아는 게 더 중요하다고 말하는 사람도 있다. C, C++ 등과 같이 로우 레벨과 가까운 언어와 Java, C# 등과 같이 하이 레벨 언어 중에서 각각 하나 씩 배우는 것도 좋다고 말하는 사람도 있다. 프로그래밍 언어는 실제 사용하지 않으면 제대로 배울 수가 없다. 특정 프로그래밍 언어를 사용하여 프로젝트를 진행하지 않고 그 언어를 공부만 해서는 배우기가 어렵다. 그래서, 특정 언어에 대한 필요성이 있을 때 배우는 것이 가장 효율적이다. 2020. 5. 7.
중첩함수 중첩함수(Nested Function, Nested Procedure, Nested Subroutine)은 함수 안에서 다른 함수를 만들어 사용하는 것을 의미한다. 과거 Pascal 등에서 지원하였고 최근에는 많은 언어에서 지원한다. 하지만, C는 전통적으로 중첩함수를 지원하지 않았기 때문에 C 프로그래머들은 중첩함수가 생소하게 느껴진다. C#에서는 7.0 버전부터 Local Function이라는 이름으로 중첩함수를 지원한다. C++과 Java와 Visual Basic에서는 Lambda expression을 사용하여 중첩함수를 사용할 수 있다. 2020. 5. 7.
메모리 동적 할당 함수 malloc, calloc, realoc, free malloc은 memory allocation의 약자로 메모리를 할당할 때 사용하는 함수이다. calloc은 contiguous allocation의 약자로 malloc과 비슷하지만 calloc은 처음에 0으로 초기화한다. realloc은 re-allocation의 약자로 malloc으로 할당된 메모리의 크기를 다시 조절하는 함수이다. free는 할당된 메모리를 해제하는 함수이다. 2020. 5. 1.
Ada 언어 장단점 Ada (에이다) 장단점 장점신뢰성이 매우 중요한 시스템 개발에 적합대규모 프로그램 개발에 유리유지 보수가 쉬움에러가 적은 표현 단점프로그래밍에 제약이 많음예외처리 기능이 좋지 않음프로세서 간 통신 기능이 좋지 않음 2020. 4. 29.
정수 반올림 2개의 양의 정수 x와 y가 있을 때 x를 y로 나눈 값을 반올림한 값은 다음과 같이 구할 수 있다. z = ( x + ( y / 2 ) ) / y ; x가 음의 정수일 때는 반올림을 다음과 같이 구할 수 있다. z = ( x - ( y / 2 ) ) / y ; 2020. 4. 29.
[C++] 오버로딩과 오버라이딩 차이 오버로딩과 오버라이딩은 이름은 비슷하지만 의미는 전혀 다르다. 오버로딩 (Overloading) 함수 이름은 동일하지만 함수 인자를 달리 선언하면 함수를 호출할 때 전달되는 변수형에 따라 그에 맞는 함수가 호출되는 것을 의미한다. 오버라이딩 (Overriding) 클래스를 상속할 때 상속 받은 클래스에서 부모 클래스에서 선언한 함수를 자식 클래스에서 재정의 하여 사용하는 것을 의미한다. 2020. 4. 23.
컴포넌트 기반 소프트웨어 공학 소프트웨어는 인류가 과거에 다루었던 공학과는 성격이 매우 다르다. 예를 들면, 기계공학에서는 기계 설계도를 그리고 그 설계도에 따라 부품을 만들고 조립하여 최종 시스템을 완성한다. 마찬가지로 건축공학, 토목공학, 전기전자공학 등에서도 설계도를 그리고 부품을 조립하고 최종 시스템을 만드는 과정은 기본적으로 같다. 하지만, 소프트웨어는 설계도가 없었고 단지 프로그램 코드만이 있었다. 이러한 코드만으로는 인간이 직관적으로 전체 시스템 구성이나 동작을 알기가 매우 어렵다. 기계가 고장나면 그 기계를 설계한 사람이 아니라도 기계를 고칠 수 있고 기계 전공이 아닌 사람도 대충은 기계의 동작을 알 수 있고 간단한 것은 직접 고칠 수도 있다. 하지만, 소프트웨어는 프로그램이 문제가 있으면 전문 프로그래머도 자신이 짠 .. 2020. 4. 14.
객체 지향 프로그래밍 뜻 객체 지향을 가장 쉽게 설명한다면 프로그램 함수와 변수를 하나의 모듈로 만드는 것이다. 이것을 객체 지향에서는 캡슐화라고 한다. 이것이 객체 지향에서 가장 핵심적인 개념이다. 예를 들면 객체 지향이 아닌 구조화 프로그램 언어인 C에서는 보통 다음과 같이 프로그램을 작성한다. // 함수 사용하는 코드 int sw, in1, in2, out; if (sw==0) out = func(in1, in2, 0); else if(sw==1) out = func(in1, in2, 1); // 함수 int func(int i1, int i2, int s) { if (s==0) return i1+i2; else if (s==1) return i1-i2; return 0; } 위의 코드는 2개의 변수를 더하거나 빼기 위해 .. 2020. 4. 14.
List와 Set의 차이 List는 원소의 중복이 가능하지만 Set은 원소의 중복을 한 개로 취급한다.List는 각 원소가 위치가 정해져 있지만 Set은 위치가 정해져 있지 않다.List는 원소들이 입력된 순서로 저장 되지만 Set은 순서가 정해져 있지 않다. Set은 수학의 집합과 같은 개념이다. 예를 들면, 길목을 지키고 있으면서 지나가는 사람의 이름을 저장한다고 가정한다. 반복해서 지나가는 사람도 있다. 이 때 다음과 같은 사람 이름을 List와 Set 각각에 저장한다고 가정한다. "Johns", "Suzi", "Jobs", "Gates", "Suzi", "Jobs" List에는 저장된 순서대로 다음과 같은 데이터가 저장된다."Johns", "Suzi", "Jobs", "Gates", "Suzi", "Jobs" Set에는 .. 2020. 4. 14.
객체 지향 프로그래밍 (OOP) 특징 객체 지향 프로그래밍(OOP)의 특징은 다음과 같다. ① 캡슐화 (Encapsulation) - 함수와 데이터의 결합 ② 상속 (Inheritance) ③ 다형성 (Polymorphism) - 오버로딩 (Overloading) 2020. 4. 11.
Three-way Comparison 뜻 Three-way Comparison이란 2개의 값 A와 B가 있을 때, A>B 또는 A=B 또는 A 2020. 4. 11.
남이 개발한 프로그램 코드를 받을 때 남이 개발하고 있는 프로그램 코드를 받아 이어서 개발하는 것은 조금 어려운 일이다. 처음부터 자신이 개발하지 않았기 때문에 프로그램을 분석하는데 시간이 꽤 걸린다. 그래서, 어떤 사람들은 다른 사람이 개발하던 프로그램을 사용하지 않고 처음부터 다시 개발하기도 한다. 처음부터 다시 개발하는 경우를 몇 번 보았다. 이럴 경우 시간이 부족하여 매우 고생하게 된다. 남의 코드를 이어 받지 못하는 이유는 이전 개발자가 프로그램을 너무 이상하게 코딩한 경우도 있지만 대부분은 받는 개발자가 코드 분석 능력이 부족한 경우가 많다. 이전 개발자가 아주 실력이 없는 경우가 아니라면 프로그램 구조가 아주 나쁘지는 않고 이러한 구조를 분석하고 이해해야 한다. 코드 분석 능력이 있으면 프로그램을 이어 받더라도 크게 힘들이지 않.. 2020. 4. 11.
어떤 종류의 프로그램 개발이 가장 까다로울까? 사람들마다 어렵다고 생각하는 프로그래밍 분야는 다 다를 것이다. 지금까지의 경험으로 볼 때 프로그래밍하기 가장 까다로운 분야는 멀티미디어 분야인 것 같다. 비디오나 오디오 정보를 처리하는 프로그램을 개발할 때는 대부분 ActiveX, OpenGL, FFmpeg 등의 라이브러리를 사용한다. 하지만, 이러한 라이브러리를 사용하는 방법이 매우 복잡하다. 라이브러리 자체를 개발하는 것도 아니고 라이브러리를 사용하는데 사용하는 방법이 너무 복잡하다. 라이브러리를 사용하는 방법이 이렇게 복잡하게 만들어진 이유 중 하나는 멀티미디어 정보는 대용량이고 또한 고속으로 처리해야 하기 때문에 라이브러리의 성능에 초점이 맞추어져 있어 사용 편의성은 2순위로 밀려 있기 때문인 것 같다. 라이브러리 사용법을 배우는 시간은 매우 .. 2020. 4. 11.
Qt 프로그램 툴 Qt는 그래픽 인터페이스 프로그래밍을 할 수 있는 툴이다. 리눅스, 윈도우, 맥, 안드로이드, 임베디드의 플랫폼에서 사용할 수 있다. Qt로 작성하면 플랫폼이 변경되었을 때 거의 수정 없이 그대로 사용할 수 있다. Visual Studio에서는 그래픽 인터페이스 툴이 내장되어 있지만 그것을 사용하지 않고 Qt를 사용할 수도 있다. Qt는 GPL 라이센스로 무료로 사용하거나 상용 라이센스로 사용할 수 있다. Qt 홈페이지 2020. 4. 5.
프로그래밍에 가장 많이 사용되는 폰트 프로그래밍에 가장 많이 사용되는 폰트는 Consolas(콘솔라스)이다. 그 외 Courier New와 Monospace 등이 있다. 2020. 3. 31.
프로그래밍 언어 순위 - 가장 많이 사용하는 언어 JAVA 2017년 기준 많이 사용되는 프로그래밍 언어의 순위는 다음과 같다. 순위 언어 1 Java 2 C 3 C++ 4 Python 5 C# 6 JavaScript 7 VB.NET 스마트폰에 사용되는 안드로이드 때문에 Java의 순위가 높다. C#은 현재까지 나온 프로그래밍 언어 중에 완성도가 가장 높은 언어이다. 2019. 11. 14.
디버깅이 까다로운 하이젠버그 (디버깅) 하이젠버그(Heisenbug)는 버그를 디버깅을 하려고 하면 그 버그가 나타나지 않는 버그를 의미한다. Heisenbug는 불확정성의 원리를 발견한 물리학자 Heisenberg의 이름에서 나왔다. 하이젠버그는 디버깅을 하기 위해 디버거를 연결하거나 디버깅 코드를 삽입하면 이러한 행동이 시스템에 영향을 주어 버그가 나타나지 않는다. 하이젠버그는 잡기 매우 까다로운 버그이다. 버그가 타이밍과 관련되어 있거나 메모리가 다른 영역으로 침범한 버그일 경우 디버깅 코드를 삽입하면 버그가 재현 되지 않고 다른 현상이 나타날 수 있다. 2019. 11. 14.
IT의 풀스택 개발자 풀스택 개발자 (Full-stack Developer)란 IT 개발자 중에서 프런트엔드 (Front-end)와 백엔드 (Back-end)를 모두 개발할 수 있는 개발자를 의미한다. 프런트엔드는 사용자와 접하는 부분을 담당하는 것으로 HTML, Javasciprt, CSS 등을 이용하여 개발하는 것이다. 백엔드는 서버 쪽을 담당하는 것으로 Java, PHP, ASP.NET, C$.NET, Ruby 등을 이용하여 개발하고, 데이터베이스는 SQL, Oracle 등을 이용하여 개발한다. 보통은 프런트엔드 개발자와 백엔드 개발자가 따로 있지만 풀스택 개발자는 이 둘을 모두 할 수 있는 개발자이다. 2019. 11. 14.
반응형