[최신기술] 블록체인이란?

제 4차 산업혁명의 중심 키워드 중 하나인 블록체인, 요즘 거의 모든 분야에서 이 기술을 사용하려고 하는 움직임이 보입니다. 그렇다면, 블록체인이 무엇인지, 왜 많은 인기를 끌고 있는지에 대해 알아보려 합니다.

계속 “[최신기술] 블록체인이란?” 읽기

알고리즘 지식 – 시간복잡도란?

프로그램이 실행되는 데 걸리는 시간을 대략적으로 나타낸 것.
알고리즘의 효율을 나타내기 위해 사용된다.

왜 쓰는가?


더 품질이 좋은 코드를 만들기 위해서. 게임 개발과 같이 실행 시간이 매우 중요한 분야에서는 코드의 실행 시간을 대략적으로 측정해 쓸데없이 긴 시간을 소요하는 코드를 리팩토링하기 위해서 시간복잡도가  필수적으로 필요하다.
계속 “알고리즘 지식 – 시간복잡도란?” 읽기

객체지향 프로그래밍(OOP)이란?

객체지향 프로그래밍(OOP)이란?


기존의 절차지향 프로그래밍 방식에서 발견된 문제점을 보완하기 위해 로직을 상태와 행동으로 이루어진 객체로 만드는 프로그래밍 방식이다. 유지보수가 쉬워 대형 프로젝트에 적합하다는 장점이 있지만, 실행속도가 절차 지향에 비해 느리고, 설계에 많은 시간이 투자된다는 단점이 있다.

절차 지향 프로그래밍이란?

순차적으로 처리되는 프로그래밍 기법. 실행속도가 빠르고 구현이 쉽지만, 기능을 구현하는 데 제한적이다.

계속 “객체지향 프로그래밍(OOP)이란?” 읽기

디버깅이란?

About the word “Debugging”

용어의 뜻


디버깅은 프로그램 실행 시 문제를 일으키는 오류, 즉 ‘버그’를 찾아 해결하고 수정하는 것을 의미합니다.

 

버그의 종류


‘버그’는 크게 문법적 오류논리적 오류로 분류할 수 있습니다.

문법적 오류는 말 그대로 그 프로그래밍 언어의 문법에 맞지 않는 코드가 있을 경우 발생합니다. 대체로 문법적 오류는 IDE로 해결할 수 있기 때문에 디버깅이 쉬운 편입니다.

논리적 오류는 문법적으로 문제가 없지만, 의도와는 맞지 않게 프로그램이 돌아가는 오류를 말합니다. 이 부분은 IDE의 기능 만으로는 해결되지 않으며, 프로그래머가 가장 골치아파하는 오류입니다. 문법은 고치면 그만이지만, 논리적 오류는 잘못하면 코드 전체를 갈아엎어야 할 수도 있기 때문이죠.

 

디버깅 예시

문법적 오류는 다들 아실테고, 그렇다면 논리적 오류를 기준으로 해서 디버깅의 예시를 들어보겠습니다.

#include <stdio.h>
#define MULTI(a, b) a * b
 
int main()
{
    int a = 2;
    int b = 10;
    int c = MULTI(a + 2, b + 2);
    printf(“c is %d\n”, c);
    return 0;
}
cs

두 개의 수를 인자로 사용해 두 수를 곱한값을 반환하는 MULTI라는 매크로 함수가 있습니다. 원래 의도대로라면 a, b에서 2를 각각 더해서 곱해 4 * 12 = 48이라는 값이 반환되어야 합니다. 그러나, 실제로는 24라는 값이 반환됩니다.

이 오류가 바로 가장 골치아픈 논리적 오류입니다. 문법적으로 문제는 없으나, 원래의 의도와는 다르게 흘러가는 것이죠.

저게 왜 저렇게 되었는지, 어떻게 해결하는지에 대해서는 C++ inline 포스트에서 매크로(#define)의 고질적인 문제와 함께 다루도록 하겠습니다.

문제점을 알았다면 해결해야겠죠. 어떻게 하면 고칠 수 있을 지 알아내야죠. 이게 바로 디버깅입니다. 문제가 발생했을 때, 문제의 원인을 찾아 분석하고, 분석한 결과를 토대로 문제를 해결하는 과정을 바로 디버깅이라고 합니다.

용어의 유래


“디버깅”이라는 단어는 프로그래머, 그레이스 호퍼에 의해 만들어진 단어입니다. 어느 날, 호퍼는 Mark Ⅱ 컴퓨터에서 오작동을 발견하였고, 그 원인이 나방임을 알아내 컴퓨터에서 핀셋으로 꺼냈습니다.(세계 최초의 디버깅.) ‘버그’라는 단어는 1800년 대 부터 기술적인 오류를 가리키는 말로도 사용되었지만, ‘디버깅’이라는 단어는 이 때 처음으로 사용되었습니다.

 

디버깅의 중요성


프로그래밍에 있어 디버깅은 필수적인 요소입니다. 실제 개발할 때에도 가장 중요한 부분입니다. 디버깅을 얼마나 잘하느냐에 따라 프로그래머의 실력이 갈릴 정도로 프로그래머에게 있어 가장 중요한 능력이 디버깅 능력입니다. 따라서 프로그래머는 디버거 없이 디버깅을 하는 연습을 하는 것이 필요합니다.