wns6356의 모든 글

[HTS개발] QT Creator_Hello World!(2)

안녕하세요! DevlyJ입니다.

지난번 QT Creator에 대한 설치를 완료했고
오늘은 프로그램의 기초! Hello World를 출력해보도록 하겠습니다.


 

Hello World 출력!

먼저 지난번 설치했던 QT Creator를 실행합니다.

그리고 [File > New File or Project…]를 선택하여 새로운 프로젝트를 생성합니다.

저희는 Widget을 만들어 테스트를 해볼 것이므로,
[Qt Widgets Applications] 선택!

프로젝트 명칭과 경로설정을 해주고 Next..

qmake선택 후 Next

(qmake는 QT 프레임워크에서 빌드하기 위해 제공하는 빌드 툴입니다.)

프로그램에 한국어를 사용하므로, [Korean]을 찾아 설정을 해줍니다.

마지막 Finish까지 누르면 드디어 프로젝트가 생성되었습니다.

main.cpp 파일과 widget.cpp, Forms 등 다양한 파일을 Qt Creator가 자동으로 생성해주었습니다.
이제 해당 기초 소스를 기반으로 프로그램을 제작할 준비가 되었습니다.

그 전에, 현재 프로그램을 실행시키면 어떻게 될지 한번 알아보겠습니다.

프로젝트 우클릭 > Run 을 통해 실행을 합니다.
그럼 우측과 같이 빈 화면이 나오게 되면 성공입니다.

아직은 어떠한 작업도 하지 않아 프로그램이 많이 없어보이는데요..
“Hello World!” 라벨을 넣어보도록 하겠습니다.

Forms 폴더의 widget.ui 파일을 더블클릭 해보면 새로운 화면이 열리는데요.

Label을 찾아 Drag&Drop을 통해 화면에 올려주고 또 더블클릭하여 텍스트를 변경해줍니다.

그 후 다시 프로젝트 실행을 해보면 Hello World! 가 잘 보이네요!

그런데 모양이 영 이상하죠…
다시 widget.ui를 더블클릭하고 마우스로 위치 조정을 한 뒤 실행해보겠습니다.

아직 별거는 아니지만 조금 전 보다는 훨씬 나아졌습니다.

자, 오늘은 Hello World! 까지 띄워보았고,
다음부터는 Qt Creator에 대해서 더 연구해서 본격적으로 증권사 HTS를 개발해보도록 하겠습니다.

감사합니다.

[HTS개발] QT Creator 설치(1)

안녕하세요. DevlyJ입니다.

오늘부터 QT를 이용해서 증권사 HTS 프로그램 개발을 시작해보도록 하겠습니다.

오늘은 QT에 대해서, QT Creator를 설치해보도록 하겠습니다.


QT란?

QT는 C++ 언어를 이용하여 GUI 어플리케이션을 작성 할 수 있는 크로스플랫폼 프레임워크입니다.
QT를 이용하여 GUI 제작을 보다 편리하게 할 수 있고,
하나의 코드로 다양한 OS에서 작동되는 프로그램을 만들 수 있습니다.

QT를 이용하면 제공하는 IDE(QT Creator)를 통해 보다 쉽게 개발할 수 있습니다.
QT Creator에 기본 탑재된 QT Designer를 이용하여 Drag&Drop 을 통해 GUI를 개발 할 수 있고, 세부적인 기능은 C++코드를 통해 개발합니다.

C++로 개발하면 MFC나 Win32를 이용하여 보통 개발한다고 합니다.
그런데 QT는 위의 두 개의 프로그램 보다 우리나라에서 자료나 사용량이 많지 않고 MFC, Win32가 더 Low 레벨에서 실행되기 때문에 속도가 QT보다 빠르다고 합니다.
하지만 QT로 개발하는게 더 쉽고 많은 기능을 사용자에게 제공하여 QT를 선택하게 되었습니다.


 

QT Creator 개발환경 설치

먼저 아래 URL에 접속하여 QT Creator를 설치해야합니다.

https://download.qt.io/archive/qt

저는 5.14.2 버전으로 설치하였습니다.
더 상위의 버전으로 설치해보려 했지만, 오픈되어 있는 버전은 5.14.2가 가장 최신의 버전으로 오픈되어 있었습니다.

exe파일을 설치 후에 실행시킨 후 Next를 통해 설치해주세요.

QT 계정을 만들어야 하는데, Sign-up란의 이메일 주소와 비밀번호 입력 후 Next를 클릭하고, 입력했던 이메일 주소에 메일을 통해 인증을 하면 다음으로 넘어갈 수 있습니다.

이후 설치할 위치에 경로 설정을 해주고
MinGW 7.3.0 64-bit, QT Charts, Qt Creator 4.11.1 CDB Debugger를 선택 하였습니다.

자, 마지막으로 Finish까지 마쳤으면 아래와 같이 QT Creator 설치 완료입니다!

QT Creator를 설치를 완료하였고 다음번에는 첫 번째 단추인 Hello World 를 출력해보도록 하겠습니다.

오늘도 읽어주셔서 감사합니다.

C++은 무엇인가?

안녕하세요!

오늘은 C++은 무엇인가?
C++에 대해서 알아보도록 하겠습니다.


C++의 개요

C++는 1979년 벨 연구소의 비야네 스트롭스트룹(Bjarne Stroustrup)에 의해 개발된 프로그래밍 언어로, C 언어의 확장판입니다. C++는 객체 지향 프로그래밍(OOP) 개념을 도입하여 코드의 재사용성과 유지보수성을 높였으며, 다양한 프로그래밍 패러다임을 지원합니다.

어… 역사는 알겠고!
왜 요즘 Python처럼 쉬운 언어가 있는데 왜 복잡한 C++를 사용할까요?

이유는 바로 “속도”에 있습니다.

C++는 프로그래밍 언어의 가장 Low 레벨인 C언어를 기반으로 제작된 언어라서 속도와 효율성 측면에서 직접 컨트롤할 수 있는 장점이 있습니다.

그래서 C++을 이용하여  금융 및 과학 관련 프로그램, 실시간 처리 프로그램, 게임 엔진, 그래픽 라이브러리, 운영 체제 프로그램 등 다양한 방면에서 활용할 수 있습니다.

그렇다면 속도가 중요하다면서 Low 레벨의 언어인 C언어를 쓰지 왜 C++ 을 쓸까요?

C언어는 Low 레벨이라 컴퓨터가 이해하기 쉽게 작성되어 있습니다.
컴퓨터가 이해하기 쉽다면? 우리 개발자들한테는 이해하기 어렵겠죠..
그래서 그나마 객체 지향 특징이 들어간 C++을 사용합니다.
물론 그렇다고 C언어가 안 쓰이는 것은 아니고 오히려 더 많이 쓰입니다.
각 언어마다 특징이 있어 C언어도 많이 쓰이고 C++도 많이 쓰입니다.


C++의 특징

  1. C언어를 확장하여 만든 고급 범용 프로그래밍 언어입니다.
  2. 절차 지향적 언어 + 객체 지향형 언어의 특징을 지니고 있습니다.
  3. 연산자 오버로딩, 구조체, 포인터 등의 기능을 지원합니다.
  4. 메모리 관리를 수동으로 할 수 있습니다.
  5. 플랫폼에 종속적입니다.
  6. 표준 라이브러리 STL을 제공합니다.

자 그러면 하나씩 뜯어보도록 하겠습니다.

C++는 C언어를 기반으로 제작된 언어라서 C언어의 문법과 유사합니다.다만.. 차이점이 있다면 C언어의 업그레이드 버전이 C++이라 객체 지향의 특성이 추가된 버전이라 생각하심 됩니다.

C언어를 배웠다면 포인터, 구조체와 같은 개념이 익숙하실 겁니다.
거기에 연산자 오버로딩을 통해 객체 지향의 특성도 살려주고요.

C언어에서도 메모리 관리를 수동으로 할 수 있으며

C언어나 C++언어나 OS에서 기계어로 바로 컴파일을 진행하여 OS 플랫폼에 종속적인 언어가 되버립니다.
윈도우, 리눅스, 유닉스 등 다양한 OS 플랫폼에서 직접적으로 컴파일 하기 때문에 각각의 OS별 같은 코드이지만 결과가 달라질 수 있습니다.

표준 라이브러리(STL)에는 다양한 데이터 구조와 알고리즘을 쉽게 사용할 수 있도록 정의해놓은 라이브러리 입니다.
Vector, List, Map, Set 등 다양한 데이터 타입과, 정렬, 검색 등 다양할 알고리즘을 포함하고 있어 개발자의 생산성을 높일 수 있습니다.

끝으로, C++를 이용하여 앞으로는 HTS 프로그램을 만들어보려고 합니다.
속도와 성능이 중요한 만큼 HTS도 잘 만들어가는 과정을 보여드리도록 하겠습니다.

오늘도 감사합니다.

Java(자바)란 무엇인가?

안녕하세요.

오늘은 앞으로 진행해볼 프로젝트로 C++를 이용해 증권사의 HTS 프로그램을 개발해볼 예정인데요~
그래서 저는 Java를 하는 개발자라서 C++과의 차이점을 위해 Java에 대해서 먼저 자세히 알아보는 시간을 갖도록 하려고 합니다!

Java(자바)가 무엇인지, 왜 사람들이 사용하는지 알아보도록 할게요!


Java(자바)란?

Java는 객체지향 프로그래밍 언어입니다.
운영체제나 하드웨어에서 독립적으로 실행이 가능해서 현재까지도 전 세계에서 많이 쓰이는 프로그래밍 언어입니다.

그렇다면 사람들이 왜 Java를 많이 쓸까요?

바로 Spring 프레임워크라는 Java 기반의 환경에서 웹 페이지의 다양한 기능을 쉽게 구현할 수 있는 아주 좋은 도구가 있기 때문입니다.
당장 인터넷에 웹 개발하면 파이썬의 Django,  Node.js의 NextJs 등 웹 프레임워크들이 많은데 Java에서는 Spring 프레임워크가 가장 유명합니다.
또한 웹 뿐만 아니라 다양한 강점들이 있어 사람들이 Java를 사용하고 있습니다.

그러면 어떤 강점들이 있는지 알아볼까요?


Java의 장점은?

객체 지향 프로그래밍 언어

자바의 “핵심” 입니다.
보통 프로그래밍이라 한다면 데이터를 입력 받아 순서대로 처리하여 결과까지 도출해냅니다.
그런데 객체 지향 프로그래밍은 순서대로 처리한다라는 패러다임은 같지만, 여러 부품들을 조합할 수 있도록 하여 객체들의 유연한 처리를 할 수 있도록 도와줍니다.
그렇기 때문에 코드에 대한 유지보수가 쉽고 훨씬 직관적입니다.

쓰레드(Thread) 처리

자바에서는 쓰레드 처리를 지원합니다.
하나의 일을 여러 개의 쓰레드에게 나누어 주어 동시에 수행할 수 있도록 하는 멀티쓰레딩 기술로 더욱 더 빠르게 처리가 가능하도록 합니다.

이식성 Good

자바는 가상머신(JVM)만 설치되어 있다면, 모든 운영체제나 하드웨어에서 구동되는 프로그램을 만들 수 있습니다.

자동 메모리 관리 (Garbage Collector)

자바는 객체 생성 시 자동으로 메모리 영역을 할당하고, 사용이 완료되면 Garbage Collector를 통해 메모리를 해제하고, 자동으로 메모리 관리를 해줍니다.
즉 개발자가 직접 메모리에 접근할 수 없으며, 자바가 알아서 직접 관리하니 개발자 입장에서는 편하게 메모리 관리가 가능합니다.

동적 로딩

프로그램을 실행할 때 1GB의 자바 소스들을 모두 로딩하면 그 만큼의 시간이 걸리겠죠?
자바는 이러한 방식으로 프로그램 로딩을 하지 않고 프로그램이 필요한 시점에 로딩하여 사용할 수 있습니다.


Java의 단점은?

속도가 느리다.

자바는 실행을 위해 JVM 을 한번 거쳐 실행하기 때문에 다른 언어에 비해 실행 속도가 느립니다.

예외처리 (Excpetion)

자바의 예외처리는 개발자가 일일이 지정해주어야 합니다.

메모리 차지

자바는 C와 C++ 같은 프로그램 언어와 비교하여 더 많은 메모리를 차지합니다.


Java 실행은 내부적으로 어떻게 동작하나?

자바는 JVM을 통해 실행한다고 하였습니다.
그러면 자바를 실행했을때 컴퓨터 내부에서는 어떻게 실행되나 절차를 한번 알아보도록 하겠습니다.

  1. 개발자가 Test.java 파일을 작성합니다.
  2. Java 컴파일러가 Test.java 파일을 바이트코드 파일 Test.class로 변환한다.
  3. Class Loader가 Test.class를 JVM 메모리에 로드한다.
  4. 로딩한 Test.Class 파일을 실행 엔진을 통해 해석한다.
  5. 해석된 바이트코드는 메모리에 배치되어 수행이 이루어진다.
    (이때, Test.java 에 작성한 코드 내용에 대해서 수행)
  6. 실행하는 동안 JVM의 필요에 따라 메모리 GC를 수행한다.

JDK? JRE? JVM?

자바 공부를 하다 보면 JDK, JRE, JVM 단어는 비슷하지만 아주 헷갈리는 단어가 있습니다.

JVM (Java Virtual Machine)?

자바 프로그램을 실행하기 위한 “가상 머신” 입니다.
어느 운영체제에서 JVM 설치를 하면 Java 프로그램을 사용할 수 있게 도와주는 머신입니다.
또한 메모리를 효율적으로 관리 & 최적화 할 수 있도록 도와줍니다.

  • JVM 덕분에 모든 운영체제에서 Java를 사용할 수 있습니다.
    과거에는 프로그램 개발 시, 같은 프로그램이지만 운영체제 별로 다르게 작성을 해야했습니다. 그러던 중 JVM이 등장하여 각 운영체제 별로 고민 없이 개발을 진행하면 JVM에서 알아서 운영체제에 맞도록 바이트 코드로 변환하여 프로그램을 실행 할 수 있습니다.

JRE (Java Runtime Environment)?

JRE는 자바 클래스 라이브러리(Java class libraries), 자바 가상머신(JVM) 를 포함하고 있습니다.
자바 클래스 라이브러리를 통해 작성한 자바 코드를 라이브러리와 결합한 후 JVM에게 넘겨 실행시킵니다.
JRE만 있어도 자바를 실행시킬 수 있습니다.

JDK (Java Devlopment Kit)?

우리가 일반적으로 자바를 공부하기 위해 설치하는 것이 JDK 입니다.
JDK는 앞서 말씀드린 JRE, JVM을 포함하고 있고 JDK를 설치하면 자동으로 JRE, JVM 또한 설치됩니다.
자바로 개발하지 않고 실행만 하기 위한 사람들은 JRE만 설치해도 됩니다
하지만 자바로 무언가를 개발하기 위한 사람은 JDK를 설치해야 합니다.
JDK에는 JRE, JVM에는 없는 “자바 컴파일러”가 존재합니다.
이 컴파일러를 통해 우리는 자바에 대한 개발을 진행 할 수 있습니다.

알고리즘(Algorithm)이란?

안녕하세요.

오늘은 알고리즘에 대해서 알아보도록 하겠습니다!


알고리즘(Algorithm)이란 무엇인가?

알고리즘은 문제 해결 방법을 정의한 일련의 단계적 절차이자 어떠한 문제를 해결하기 위한 동작들의 모임이다. (from. wiki…)

음.. 무슨 소리인지 모르겠는데요?
쉽게 말해보면 어떠한 문제가 있습니다.
이 문제를 해결하기 위해 미리 정해 놓은 프로세스를 통해 풀어나가려 할텐데요..
이때! 미리 정해놓은 프로세스를 알고리즘이라 생각하시면 편합니다!

위 그림을 보시면 Input과 Output 사이에 알고리즘이 있습니다.
내가 입력할 값(Input)으로 원하는 값(Output)을 도출해내는 과정을 알고리즘이라고 표현합니다.

예를 들어보겠습니다.
라면을 아주아주 먹고 싶어하는 사람이 있습니다.
그 사람은 라면을 먹기 위해서 라면을 끓이는 과정이 필요합니다.
이때, 라면을 끓이는 과정이 알고리즘에 해당하는 과정입니다.
 – Input : 라면 먹고 싶은 사람
 – 알고리즘 : 라면 끓이는 과정
 – Output : 라면을 맛있게 먹어보자

일상생활에서도 알고리즘과 같은 일련의 과정을 볼 수 있습니다.
IT를 하는 사람으로써 이런 과정을 알고리즘 이라 불러요~


왜 알고리즘 공부를 해야하는가?

알고리즘 공부를 왜 해야하나요?
세상에는 우리보다 훨씬 똑똑한 사람들이 많이 있죠.
그런 사람들을 우리는 천재라고 부릅니다.
천재들이 많이 쓰이는 알고리즘을 구현해놓고, 우리는 그것을 토대로 실전에서 써먹기 위해 분석하고 공부하는 것이죠!

이를테면, 숫자 10으로 100을 만들어야 한다고 문제가 주어졌을때
누군가는 10+10+10….+10 = 100 과 같이 10을 열번 더하는 사람이 있고
10×10 = 100 과 같이 곱셈으로 간단하게 해결하는 사람이 있을 수 있죠.

즉, 덧셈 뺄셈만 아는 사람보다 곱셈 나눗셈까지 알게 된다면 더 효율적으로, 더 빠르게 계산을 할  수 있듯이!
프로그램에서도 알고리즘 공부를 통해 프로그램을 더 효율적으로, 빠르게 만들기 위함이라고 생각합니다.


알고리즘의 종류는 무엇이 있나?

위에서 말씀드렸듯이, 알고리즘의 종류는 아주 많습니다.
그 중에서 오늘은 널리 쓰이는 알고리즘들을 간단하게 알아보도록 하겠습니다.

  1. 검색(Search) 알고리즘
    – 데이터 집합에서 특정 값을 검색하는 알고리즘
    – 선형 검색, 이진 검색 등 다양한 방식으로 사용 가능

  2. 정렬(Sorting) 알고리즘
    – 데이터를 정렬하는데 사용하는 알고리즘
    – 버블 정렬, 선택 정렬 등 다양한 방식으로 사용 가능

  3. 동적(Dynamic) 계획법
    – 하나의 문제를 작은 문제로 나눠 해결하는 알고리즘

  4. 그래프(Graph) 알고리즘
    – 정점과 간선으로 이루어진 알고리즘
    – DFS, BFS 등 다양한 알고리즘이 있음

  5. 탐욕(Greedy) 알고리즘
    – 매 순간에 최적이라고 생각되는 것을 선택하는 알고리즘
    – 최적이라고 생각해서 선택했지만 최적이 아닐 수 있음

이처럼 다양한 알고리즘이 있습니다.
이후 포스팅을 통해 차근차근 알아보도록 하고 오늘은 큰 틀만 알아보도록 하겠습니다.


좋은 알고리즘이란?

알고리즘이라고 해서 모두 다 좋은 알고리즘일까요?
  아닙니다!
그러면 어떤 알고리즘이 좋다고 말할 수 있을까요?
알고리즘이 소모하는 소요 시간을 시간 복잡도, 메모리 공간을 얼마나 잡아 먹는가를 공간 복잡도라 합니다.

이러한 복잡도를 측정하는 방법에 대해서 사람들은 “빅오(Big O) 표기법” 이란 표기법을 만들어 놨습니다.
빅오 표기법은 가장 널리 쓰이는 표기법이에요.

위 그림에서 O(1) 을 좋다고 표현하며, O(n!) 으로 갈 수록 좋지 않다고 표현 합니다.
결과적으로 알고리즘 내부에서 코드를 실행하기 위한 횟수가 시간과 관련되어서 효율이 좋고, 좋지 않고를 판단하는 지표가 됩니다.

올바른 알고리즘을 사용하기 위해서 해당하는 표기법을 통해 미리 계산해보고, 판단해서 프로그램에 적용한다면 보다 효율적으로 만들 수 있게 됩니다.

사실.. 프로그램을 실제로 만들어보면 해당 방법을 고려하지는 않지만, 고려하는 훈련도 필요하다고 생각이 드네요.

이상! 알고리즘에 대해 알아보았습니다.

오늘도 읽어주셔서 감사합니다.

[재귀 알고리즘] 자기 자신을 호출하는 알고리즘 (재귀함수)

안녕하세요~

오늘은 재귀 알고리즘에 대해서 알아보겠습니다!


재귀 알고리즘이란?

재귀 : 어떠한 것을 정의할 때 자기 자신을 참조하는 것. [from 위키..]
즉, IT 관점에서 본다면 자기 자신을 계속해서 호출하는 알고리즘입니다.

Working of C recursion

위 그림과 같이
  1. main() 메소드 안에서 최초 recurse() 메소드 호출
  2. 호출된 recurse()에서 자기자신인 recurse() 호출
  3. 종료되기까지 계속해서 자기자신 호출 반복
이 처럼 계속해서 자기자신을 호출하는 방식의 알고리즘입니다.

해당 알고리즘을 적용한 재귀함수를 많이 쓴다고 해요~


왜 재귀 함수를 쓰는가?

어? 반복문과 비슷한데 왜 재귀 알고리즘을 쓰나요?

재귀 함수의 장점은 “가독성”  이 가장 크다고 생각해요.
인터넷 찾아보면 변수 사용을 줄인다는 장점도 있는데,
결국에는 그것도 가독성이죠… 하하..

저 같은 경우 폴더-파일 구조를 for문이나 while문 등의 반복문을 통해 구현하기 어렵다고 느꼈어요.
반복문을 사용하게 되면 그 만큼의 가독성도 떨어지고 변수도 많이 사용하더라구요..
그래서 재귀 함수를 통해 구현을 한번 해본 적이 있는데 이때 엄청 간단하게 구현을 해냈습니다..!!

하지만 재귀함수는 메모리 사용량이 많고, 단순 반복문보다 성능이 더 떨어질 수 있는 단점이 있어요.

그리고 종료 조건을 잘못 했을때에는 Stack Overflow 발생..

그래서 특히 재귀 함수의 경우에는 주의해서 사용해야합니다!


재귀 알고리즘 예시 (팩토리얼)

재귀 알고리즘 검색 시에 가장 많이 나오는 팩토리얼 구하기입니다.

팩토리얼은 특정 정수에서 1까지의 수를 모두 곱하는 것이에요.
예를 들어서 4! = 4 x 3 x 2 x 1 = 24.  [즉 4! = 24]

자. 그러면 팩토리얼을 구현한 코드를 보시죠!

public static void main(String[] args) {
  System.out.println(factorial(4));
}

public static int factorial(int n) {
  int result = 1;
  for (int i=n ; i>=1 ; i--) {
    result *= i;
  }
  return result;
}
  1. main()메소드 실행
  2. factorial(4) 실행
  3. n = 4, n * factorial(n-1) 실행
  4. n = 3, n * factorial(n-1) 실행
  5. n = 2, n * factorial(n-1) 실행
  6. n = 1, if문안의 return 1 실행

결과는 4 * 3 * 2 * 1 = 24 가 나옵니다!

그냥 for문을 통한 반복문으로 실행한다면?

public static void main(String[] args) {
  System.out.println(factorial(4));
}

public static int factorial(int n) {
  int result = 1;
  for (int i=n ; i>=1 ; i--) {
    result *= i;
  }
  return result;
}

반복문을 통해 구현한 팩토리얼도 똑같이 24의 결과값이 나옵니다.
그런데 사실 반복문으로 구현하나, 재귀함수를 통해 구현하나 비슷해보입니다.
하지만… 팩토리얼이 아닌 더 복잡한 프로그램을 구현하려 한다면 어떻게 될까요?
더욱 더 복잡하고, 가독성도 그 만큼 떨어지게 될거에요.. (제 생각 ㅎ)


마치며.. 결론은?

항상 재귀 함수가 좋지는 않습니다!
고려해봐야 할 부분도 일반 반복문보다 훨씬 많고,
많이 쓰지 않는다면 그 만큼 어려운 알고리즘이라고 생각해요..
하지만? 적용할 수 있는 상황에서 적용을 한번 해본다면
아!! 왜 써야하겠구나..! 라는 거를 깨달을테니 한번 도전해봅시다!

상황에 맞게 적절히 골라 사용을 해보며 공부해봅시다!

오늘도 제 글을 봐주셔서 감사합니다 ^__^

 

[Oracle/오라클] START WITH 재귀호출 쿼리

안녕하세요!

오늘은 오라클(Oracle)START WITH 재귀호출 쿼리에 대해 말씀드리겠습니다.
START WITH 함수는 Oracle 11g 이상의 버전에서 사용할 수 있습니다.

그럼 먼저 재귀호출이란 무엇인지 간단히 알아보도록 하겠습니다.


재귀호출(Recursive Call)이란?

재귀호출이란 말 그대로 자기 자신을 계속해서 호출하는 것을 뜻 합니다.

Working of C recursion

자기 자신을 무한히 호출하게 되면 프로그램이 무한히 실행되는 현상이 있어, 그 만큼 조심히 다뤄야하는 알고리즘 입니다.
재귀함수의 활용하기 좋은 것으로는

  • 피보나치 수열
  • 윈도우 폴더/파일 구조
  • 팩토리얼 등등…

등등 아주 아주 다양합니다.
재귀호출에 대한 자세한 내용은 다음에 한번 다뤄보도록 하겠습니다.


START WITH ~ CONNECT BY

그래서 오늘의 주제 START WITH 함수는 뭐냐?
위에서 말씀드렸듯이 재귀호출 알고리즘을 활용하여 오라클 측에서제공하는 함수입니다.
예를 들어 폴더/파일 구조처럼 재귀호출을 통해 구현된다고 생각하시면 됩니다.

사용법은 아래와 같습니다.

SELECT [컬럼]…
FROM [테이블]
WHERE [조건]
START WITH [최상위 조건]
CONNECT BY [NOCYCLE][PRIOR 계층형 구조 조건];

1.8 Directory structure | An Introduction to R

예시)

SELECT NAME
FROM FOLDER
START WITH NAME = ‘ROOT’
CONNECT BY NOCYCLE PRIOR NAME = PARENT_NAME
  1. FOLDER 테이블에서 NAME 컬럼만 조회할 것인데
  2. 최상위 폴더는 ROOT로 설정할 것이고
  3. ‘NAME’ 컬럼의 값(ROOT)과 ‘PARENT_NAME’ 컬럼(data, R, Rmd, scripts, output)의 값을 가져오고
  4. 값이 있다면 재귀호출과 같이 ‘NAME’ 컬럼의 값(data, R, Rmd, scripts, output)과 ‘PARENT_NAME’ 컬럼(rawdata, processeddata, metadata)의 값을 또 가져오고
  5. 이후 값이 없다면 조회 된 결과를 반환합니다.

NOCYCLE : 무한루프를 방지하기 위함
PRIOR : 계층구조를 표현하기 위함

 

이상입니다.

오늘도 감사합니다 ^__^

Hello World! DevlyJ 입니다!

안녕하세요. Hello World!
첫 블로그 게시합니다!! 짝짝짝~

워드프레스를 통해 첫 블로그의 첫 게시물을 등록하게 되었는데요..!
생각보다 너무 어렵고 세팅이 필요한 부분이 많네요!
다들 어떻게 블로그를 쓰시는지..!!
다시 한번 블로거의 위대함을 느껴보는 하루였습니다. ㅋ.ㅋ

그렇다면 서론은 여기까지!
아직은 부끄럽지만 제 이야기를 들려드릴게요!


저는 DevlyJ, “Dev+ly+J 개발스러운 J” 이에요.
네.. 맞아요. 초보 개발자입니다 ㅎ.ㅎ
현재 2년차 개발자이고, Java의 SWT를 이용해서 프로그램을 개발하는 솔루션 업체에서 재직중입니다!

아… 이직하고 싶다…

2년차가 지나다보니 요즘 이직에 대한 생각이 많아 졌어요..
회사에서는 아주 여러가지 일을 시켜서 스트레스 받는 요즘!!!
우연하게 이직을 할 수 있는 좋은 기회를 얻어 면접을 봤어요.
그런데… 면접관님들이 완전 경력자에게 할 법한 기본적인 질문을 저에게 했어요..


  현재 재직중인 회사에서는 어떤 업무를 하나요?
  현재 재직중인 회사에서 이런 업무를 했을때 어떻게 했나요?


 

완전 기본적인 질문이죠..
면접 당시에는…

  Java의 Swt를 이용해서 개발했고요…
 업무는 어떠어떤 것들에 대해서 개발을 해봤고요…
 이런 업무는 어떻게 했고요…
 대고객 시스템에 대한 업무도 있어서 자랑스럽습니다!

라고 잘 말했다고 생각했지만..
다시 돌아와서 생각해보니 뭔가 이상했어요.

 어… 음… 내가 지금 하고 있는 일이 뭐지..?
 내가 미래에도 이 일을 하면서 쭉 살아갈 수 있을까..?

불안한 심정들과, 앞으로에 대한 걱정이 한번에 몰려왔어요.


★ 그래서!!!


저의 이 불안한 심정들과 미래에 대한 걱정들을 해소하기 위해!!!
공부를 시작해보자!
근데?
공부를 하면서 기록하며, 또 일상들에 대해 재미있게 기록해보자!

라는 취지에서 블로그를 개설하게 되었답니다..

앞으로는 제 블로그는 저만의 개발 일기가 될 것이어요~~
개발에 있어서 문제 해결하는 과정들을 정리하며,
한번 더 기록하며 공부도 하고..!

꾸준…하지는 못할 수도 있어요..
아직까지는 제 성격상 꾸준하게 오랫동안 하지는 못할것 같거든요.. 
그래도 일주일에 한번!  ★목표!!!!★

  아! 2년차 개발자는 이런식으로 공부하고 있구나!

를 보여드리기도 하고.. 이렇게라도 안하면 정말 공부를 안하고 또 같은 일상생활이 반복될까봐..

평일에는 일-집, 주말에는 가끔 친구만나서 놀고…
그냥 회사다니는 평범한 직장인st…

어쨌든!! 앞으로 잘 부탁드립니다.
아직은 많이 서투르고, 모자르지만 점점 성장해나가는 모습을 보여드리도록 할게요!

오늘도 감사합니다. ㅎ.ㅎ